毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(三)

本文转自  http://blog.csdn.net/w7849516230/article/details/8165684 

接着上篇,这篇侧重于具体的笔试、面试的问题,至于是哪个公司的就不去追究了,但一定是经常问到的,而且我嵌入式系统工程师和移动开发工程师都参与了,问题要区别看待,那么自然就少了很多对C++问题的考察。

     笔试
    有一个教训是,题目让你编程实现的,不要罗列一大堆思想方法,编程么,就是把你的代码写上去,比如写个非递归的中序遍历二叉树,都知道用个栈就好了,但是还是要写的。
    嵌入式中最常考的就是
   (1)运算符优先级,实在记不下来,每次去前看一遍(没办法,人家非要考)
   (2)用变量a给出下面的定义(《程序员面试宝典》,后面很多题都是其中的),注意a)一个指向有10个整型数数组的指针 b)一个指向函数的指针,该函数有一个整型参数并返回一个整型数 c)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
   (3)结构体占用内存空间大小的计算,然后优化;考察内存对齐(为什么要对齐?),其实不同编译器,不同平台都是有差别的,但既然要考,把基本的弄清楚。
   (4)剩下的对const的理解,#define和inline的区别,typedef、volatile的理解使用以及值传递、地址传递,内存空间分配(堆栈)等宝典上都有。

   (5)这里加两个代码的:a)CPU大小端的判断(要理解)

[cpp]  view plain copy
  1. int check_endian(){  
  2.     union w{  
  3.         int a;  
  4.         char b;  
  5.     }  
  6.     c.a = 1;  
  7.     return (c.b == 1)  
  8. }  

    b)求二进制数中1的个数(《编程之美》),这个很常用,是一些问题的基础,其中a是要求1个数的数

[cpp]  view plain copy
  1. int num = 0;  
  2. while(a){  
  3.     a &= (a-1);  
  4.     num++;  
  5. }  
  6. return num;  

   (6)Java中主要涉及接口、抽象类的理解,异常处理机制
   (7)对内存回收时机的考察(恰当时候,不是一定回收),finalize的执行,顺带的可以和final、finally的理解一起出现,而且注意finally即使在return后面,也照样执行;有些公司考到内存的分代回收,可以了解下。
   (8)字符串常量池的理解,题目的话就是结合new创建对象和==、equal,问你创建了几个对象,判断两个对象是否相同,一般记住new肯定创建新的引用,而是否指向同一个字符串用==无法判断,而单独声明String对象,那么就没有新创建对象。
   (9)String类的+操作,StringBuild的优化和StringBuffer的区别,相类似的对各种容器的区别理解(List,Set,Map),而且会说到线程安全SynchronizedMap和ConcurrentHashMap的区别;至于真的考察Java中I/O类的联合使用,那就靠自己的经验了。
   (10)内部类、泛型、反射好好看看《Java编程思想》,基本应该能搞定。而且你还会看到是否有sizeof,线程之间的协作问题等等。
     面试
    不管答案怎样,面试的心态和表达技巧一定要多学习,不要仅仅回答是或否,要有条理的展开,否则一个小时左右的面试会有各种各样的问题,总有你答的不好的;面试是个人和人交流的过程,但是简单基础的问题千万别错,否则后面一点机会没有。
   (1)必问:进程间通信、写个擅长的排序或者网络公司问个TCP、UDP区别,其实可以从问你DNS、HTTP、Ping等属于哪一层,底层是基于传输层的什么来考察你的;还有就是各种权限相关的,序列化相关,C++的虚函数实现,Java的内存回收机制,强调的是要用自己的话说出来,尽量不要去背。嵌入式的基本nand nor Flash的区别以及笔试中的大小端、宏定义、断言等问题也常在面试中出现。
   (2)常问在《编程之美》上的如摸石头的游戏3篇, 求二进制数中1的个数 ,寻找最大的K个数,斐波那契(Fibonacci)数列,数组相关的如 求数组的子数组之和的最大值,求数组中最长递增子序列 以及 桶中取黑白球等,很多是原题,也有就是以此为基础来做的; 比如百万级数量的IP段,一个区段对应一个地方(比如北京,西安之类),给一个IP查找确定是哪个地方
   (3)设计模式 23个常用的要了解一下,单例模式要会实现,看看我推荐的书应该问题也不大的。
   (4)Android相关的也是些框架的理解,进程间通信,四大组件的理解使用,从这些问题上看看你到底用到、学习到一个什么样程度,对错估计不是特别在意的。
   (5)非技术性的就是些项目难点,收获,感受,你的优势,证明你的能力之类,还有就是你期望的工作环境、氛围,职业规划,理想;有时会遇到压力的优缺点,把一个MP3推销给聋子等问题。补充一下的是,有时候会从你做的项目中问你对产品的思考,包括UI、功能实现,性能优化等等。面试还是针对公司的特点,多看以往的面经比较好。
    最后要说的是不管你大二、大三,研一、研二,其实对于找实习都是个非常好的锻炼机会,早早的了解自己的优势和需要弥补的地方,同时也能证明你是个用心,早做准备之人,机会是留给有准备的人的,祝你好运!后面会再写一篇关于工作,关于人生道路的选择的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值