华为面试题汇总 联系客服

发布时间 : 星期日 文章华为面试题汇总更新完毕开始阅读f85d00fa50e2524de5187e61

联合体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 #include using namespace std; void print(vector); int

第21/28页 t main() {

vector array; array.push_back(1); array.push_back(6); array.push_back(6); array.push_back(3);

//删除array数组中所有的6 vector::iterator itor; vector::iterator itor2; itor=array.begin();

for(itor=array.begin(); itor!=array.end(); ) {

if(6==*itor) {