联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。
试题2:写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
解答: int Sum( int n ) {
return ( (long)1 + n) * n / 2; //或return (1l + n) * n / 2; }
剖析:
对于这个题,只能说,也许最简单的答案就是最好的答案。下面的解答,或者基于下面的解答思路去优化,不管怎么“折腾”,其效率也不可能与直接return ( 1 l + n ) * n / 2相比! int Sum( int n ) {
long sum = 0;
for( int i=1; i<=n; i++ ) {
sum += i; }
return sum; }
所以程序员们需要敏感地将数学等知识用在程序设计中。
终于明白了:按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。 不管是在c/c++中还是在java函数调用都是传值调用,.
当参数是对象的时候,传递的是对象的引用,这个和c/c++传递指针是一个道理,在函数中改变引用本身,不会改变引用所指向的对象.
华为面试题 4、SQL问答题
SELECT * FROM TABLE 和
SELECT * FROM TABLE
WHERE NAME LIKE '%%' AND ADDR LIKE '%%' AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%' OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' ) 的检索结果为何不同? 答: 前者检索全部,后者有三种情况检索不出:NAME=null或ADDR=null或1_ADDR LIKE 2_ADDR 3_ADDR 4_ADDR其一为null.
前者检索所有记录,后者只能
索出 NAME 和ADDR中非Null的记录。
5、SQL问答题 表结构:
1、 表名:g_cardapply 字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字) g_applydate bigint 8;//申请日期 g_state varchar 2;//申请状态 2、 表名:g_cardapplydetail 字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字) g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号 g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号。 题目:
1、 查询身份证号码为440401430103082的申请日期 select A.g_applydate
from g_cardapply A inner join g_cardapplydetail B on A.g_applyno = B.g_applyno where B.g_idCard = '440401430103082'
2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数 select g_idCard,count(*) as Cnt from g_cardapplydetail group by g_idcard having count(*) > 1
3、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07 update g_cardapplydetail set g_state = '07' where g_idcard = '440401430103082'
update A set g_state = '07'
from g_cardapply A inner join g_cardapplydetail B on A.g_applyno = B.g_applyno where B.g_idcard = '440401430103082'
4、 删除g_cardapplydetail表中所有姓李的记录 delete from g_cardapplydetail where g_name like '李%'
3、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07 update g_cardapplydetail set g_state = '07' where g_idcard = '440401430103082'
update A set g_state = '07'
from g_cardapply A inner join g_cardapplydetail B on A.g_applyno = B.g_applyno where B.g_idcard = '440401430103082' 5、SQL问答题:
/*Select g_cardapply. g_applydate From g_cardapply, g_cardapplydetail
Where g_cardapply. g_applyno=g_cardapplydetail. g_applyno And g_cardapplydetail.g_idcard='440401430103082'*/
/*Select *From (select count(*) g_count , g_idcard From g_cardapplydetail Group by g_idcard ) a Where a. g_count >= 2*/
/*Update g_cardapply set g_state='07'
where g_applyno in (select distinct g_applyno from g_cardapplydetail
where g_idcard ='440401430103082') update g_cardapplydetail set g_state='07'
where g_idcard='440401430103082' */
/*Delete from g_cardapplydetail Where g_name like '李%'*/ 通过测试
PS:偶GF做的,自己先汗一下 金山公司几道面试题
4. In C++, there're four type of Casting Operators, please enumerate and explain them especially the difference. 解析: C++类型转换问题
答案: reinterpret_cast,static_cast,const_cast,dynamic_cast static_cast 数制转换
dynamic_cast 用于执行向下转换和在继承之间的转换 const_cast 去掉const
reinterpret_cast 用于执行并不安全的orimplmentation_dependent类型转换
7 以下代码有什么问题,如何修改? #include
第21/28页 t main() {
vector
//删除array数组中所有的6 vector
for(itor=array.begin(); itor!=array.end(); ) {
if(6==*itor) {