程序员面试宝典
心态很重要!
心态很重要!
心态很重要!
重要的事只说这三遍了!!!(该吃吃,该喝喝,该学学)
我用的是《剑指offer》+《数据结构》+《操作系统》,同样是offer收割不 二选择。如果你需要这几本书的pdf经典版可以给我留言留下你的邮箱,版权问题不归 我管。
好的,下面是面试重头戏!!!
项目经验——现在的面试官更喜欢问你一些项目经验,当然你的简历上得有项目,如果你真的有项目经验,你就会回答流畅,恭喜你,面试官基本不会再问程序题目来考你,因为从交流过程中,面试官已经对你知根知底。倘若你的简历上写的项目经验是抄袭或者假的,你会给面试官留下不好的印象,以为假的真不了,在交流过程中,面试官基本就对你的能力知根知底。就像一个大学生看高中生的行为一样,每一个行为反映了其心理状态。毕竟人家面试应届生这么多年了。死在技术面的人==没有项目经验但非得在简历上弄点假的+基础知识一半回答不上来。项目介绍可以按照STAR模式整理(不知道STAR可以baidu或者google一下,简历介绍必备)。
好吧,受到你们懒惰心理的召唤,我用star模型给你们走一遍项目介绍,同时注意事项也会毫无保留的奉献给大家。
拿国家电网工业网关数据分析管理系统的一个项目来展开:
S:situation 项目场景。国家电网整个电网线路缺乏自动监管系统。平时主要依靠人工来检测,排查,处理;但是很多地方不便于人工排查,检测,比如荒漠,沟壑,山丘,丛林等地。为实现电力系统自动化,智能化,响应工业4.0战略,将人工转向远程,转向智能化监测管理。
T: task 任务。主要目的是解决大量人力物力带来的棘手问题,采用物联网技术,利用传感网络,终端服务器实现远程监控
A:action 行动。收集电网内部资料,与电网内部人员沟通需要解决的问题,了解电网内部管理系统,传感器设备;驱动程序,客户端程序,服务器程序设计编写等。
R: result 结果。投入实际应用的效果,比如,实时采集系统效率,稳定性,客户端程序界面以及操作友好性等是否达到了要求。
当然一个项目里面还因为有很多细节可以使用star模型。
注意事项:自己的职责一一写上,注意区分“负责”,“参与”用词,不会的不要乱写,如果乱写,无异于搬石头砸自己脚。向面试官讲解项目的时候就按照自己做过项目经历详细但不要啰嗦,全面但不要细节地讲述一遍,在心中有个框架。在这期间面试官会因为对你讲述的某个内容感兴趣,比如数据库设计,大数据处理方法,网络socket编程,多线程,服务器端程序。此时正是给你机会的时刻,你可以拓展自己需要讲述的内容,你把socket网络编程过程说一遍,数据库表设计说一遍,如何处理的大数据,为何要用多线程,服务器端程序I/O复用等等,以及服务器端程序为何选择tcp/udp等。说完这些一般后面面试官不会问你了,因为该说的全说了,面试官会对你刮目相看的,其实一般不会问到这个地步的,问到一半就不错了。等到他说:“待会找HR聊聊的时候,哈哈,就是你谈条件,了解公司的时候”。
技术面试和综合面试经验
JAVA SE (当然我不学java,这个是一个学习java的同学给整理的,非常感谢)
1.九种基本数据类型的大小,以及他们的封装类。
2. Switch能否用string做参数?
3. equals 与==的区别。
4. Object 有哪些公用方法?
5. Java 的四种引用,强弱软虚,用到的场景。
6. Hashcode 的作用。
7. ArrayList、LinkedList、Vector的区别。
8. String、StringBuffer与StringBuilder的区别。
9. Map、Set、List、Queue、Stack的特点与用法。
10. HashMap和HashTable的区别。
11. HashMap 和ConcurrentHashMap的区别,HashMap的底层源码。
12. TreeMap、HashMap、LindedHashMap的区别。
13. Collection 包结构,与Collections的区别。
14. try catch finally,try里有return,finally还执行么?
15. Excption 与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪 些 情况。
16. Java 面向对象的三个特征与含义。
17. Override 和Overload的含义去区别。
18. Interface 与abstract类的区别。
19. Static class 与non static class的区别。
20. java 多态的实现原理。
21. 实现多线程的两种方法:Thread与Runable。
22. 线程同步的方法:sychronized、lock、reentrantLock等。
23. 锁的等级:方法锁、对象锁、类锁。
24. 写出生产者消费者模式。
25. ThreadLocal 的设计理念与作用。
26. ThreadPool 用法与优势。
27. Concurrent 包里的其他东西:ArrayBlockingQueue、 CountDownLatch 等等。
28. wait()和sleep()的区别。
29. foreach 与正常for循环效率对比。
30. Java IO 与NIO。
31. 反射的作用于原理。
32. 泛型常用特点,List<String>能否转为List<Object>。
33. 解析 XML 的几种方式的原理与特点: DOM、 SAX、PULL。
34. Java 与C++对比。
35. Java1.7 与1.8新特性
36.设计模式:单例、工厂、适配器、责任链、观察者等等。
37. JNI 的使用。
C/C++(全是重点,如果时间紧急可以只看红色)
1. 进程中的内存布局
2. 指针相关(野指针、数组越界)、数组与指针、二位指针
3. 数组与二维数组
4. 动态内存分配(内存泄漏)
5. 预编译与有参宏
6.Static与const7. 结构体、共用体以及结构体空洞
8. 位运算
9.Sizeof与strlen10.内存对齐
11.函数调用过程
12.Inline函数
12. 指针与引用
13.Const、static、sizeof14.Class与struct的区别
15. 构造函数与析构函数
16. 继承与多态
17. 空类默认生成哪些成员函数
18. 什么是多态
19. 动态绑定的实现
20. 内存泄漏原因及如何避免
21.多态 概念和实现方式: 编译时多态和运行时多态,说出来就行了
22.STL 容器 map 的底层结构 红黑树 查找复杂度 lgn
23 .多态中 父类析构函数可以设成虚函数,这是为了防止那种情况发生,可能 造成什么后果:用父类指针new一个子类对象,释放父类对象不会释放子 类对象 有可能造成内存泄露+ STL 的实现:
1.vector 底层数据结构为数组 ,支持快速随机访问
2.list 底层数据结构为双向链表,支持快速增删
3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
6.45是适配器,而不叫容器,因为是对容器的再封装
7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
8.set 底层数据结构为红黑树,有序,不重复
9.multiset 底层数据结构为红黑树,有序,可重复
10.map 底层数据结构为红黑树,有序,不重复
11.multimap 底层数据结构为红黑树,有序,可重复
12.hash_set 底层数据结构为hash表,无序,不重复
13.hash_multiset 底层数据结构为hash表,无序,可重复
14.hash_map 底层数据结构为hash表,无序,不重复
15.hash_multimap 底层数据结构为hash表,无序,可重复操作系统
1.进程和线程的区别。
2.死锁的必要条件,怎么处理死锁。
3.如何预防,避免死锁,说出方法;
4.什么是分布式锁;
3. Window内存管理方式:段存储,页存储,段页存储。
4.进程的几种状态。
5. IPC几种通信方式。
6.什么是虚拟内存。
计算机网络
1. OSI与TCP/IP各层的结构与功能,都有哪些协议。
2. TCP与UDP的区别。
3. TCP报文结构。
4. TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。
5. TCP拥塞控制以及处理方法。
6. TCP滑动窗口与回退N针协议。
7.post和gets的区别
7. Http的报文结构。
8. Http的状态码含义。
9. Http request的几种类型。
10. Http1.1和Http1.0的区别
11. Http怎么处理长连接。
12. Cookie与Session的作用于原理。
13.电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、 OSPF、IP、ARP。
14. Ping的整个过程。ICMP报文是什么。
15. C/S模式下使用socket通信,几个关键函数。
16. IP地址分类。
17.路由器与交换机区别。
网络其实大体分为两块,一个TCP协议,一个HTTP协议,只要把这两 块以及相关协议搞清楚,一般问题不大
数据结构以及算法基础
1.链表与数组。
2.队列和栈,出栈与入栈。
3.链表的删除、插入、反向。
4.字符串操作。
5. Hash表的hash函数,冲突解决方法有哪些。
6.各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平
均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。
均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。
7.快排的partition函数与归并的Merge函数。
8.对冒泡与快排的改进。
9.二分查找,与变种二分查找。
10.二叉树、B+树、AVL树、红黑树、哈夫曼树。
11.二叉树的前中后续遍历:递归与非递归写法,层序遍历算法。
12.图的BFS与DFS算法,最小生成树prim算法与最短路径Dijkstra算法。
13. KMP算法。
14.排列组合问题。
15.动态规划、贪心算法、分治算法。(一般不会问到)
16.大数据处理:类似10亿条数据找出最大的1000个数.........等等
()
17.判断一个单链表是否有环?
18.常用排序的时间负责度以及使用场合
linux(服务器程序离不开linux)
1. 查看进程的两个操作命令。
2. 你常用的操作命令有哪些。
3. Linux 下边是如何进行进程调度的。
4. Shell 脚本编程
5. 网络编程
6. 介绍下 linux 上的权限(其实还有很多,但是面试官估计也想不起多少,只看看你是不是用过 linux)
数据库
2. 数据库中索引的特点,以及缺点
3. 数据库的事物机制你了解吗,如何保证安全的,如何保证数据安全。
5. 数据库的索引底层采用了什么数据结构,你对红黑树了解吗,和B+树 有何区别。
综合面常问问题6. 数据库的隔离级别都有哪些。
1.项目中你遇到的最大困难是什么,怎么解决的, 学到了什么。
2. 你认为你有哪些地方的不足。
3. 你平时看些什么书,如何学习的。
4. 你的优点是什么,缺点是什么。
5. 你认为我们凭什么在这么多的面试者里边录取你。
6. 你人生中你觉得那件事最成功,为什么
7. 假如你个是 leader, 你员工背后说你坏话你怎么看
9. 两个字评价大学生涯
10. 加班怎么看
11. 为什么选择选择这个城市
12. 你最大的遗憾是什么
13. 你的职业规划是什么
14. 你平时的爱好是什么
套路-套路-套路
(把面试搞得轻松加愉快,你基本就成功了)
综合面中最重要的是要学会自圆其说,不要让面试官抓住你的把柄,然后就是学会调节气氛, 迅速与面试官拉近距离, 有两句话说的好 ~~~
1、 会自黑的人, 身边的人大部分都是黑转粉了O(∩_∩)O ~~好邪恶 !!
2、 如果遇到你感觉到有点被为难了,那你就露出你洁白的
牙齿,多笑笑,爱笑的人运气不会太差~~
面试结束,记得与面试官握握手说声谢谢(谢谢您的面试机会,希望有机会并肩作战,要不要或许就是这一瞬间)
观察面试官的性格,也就是常说的察言观色。1,如果面试官比较年轻活泼,就表现自己开朗积极,乐观的一面。可以在 面试中试着活跃气氛,最能插段子的地方是自我介绍和讲述优缺点的时 候。好吧,我为一个段子手,我承认我可以灵活的将段子运用到各个阶 段。
2,如果面试官年纪比较大,记得表现诚恳谨慎,不要跳,不要飞,放慢语 速,想好了再说话。一般这些年长的面试官阅人无数,眼光毒辣,最好 不要想给他们挖坑。。
A,面试官让你写代码的时候不要冷场,这个时候一般你不说话,面试官也 不说话,他会在电脑上给你敲评价。这时候最好不要让他冷静下来作对 你的分析,要陪他说话,最好的就是一边写一边说代码思路,不仅可以 让你消除紧张,还可以缓和气氛。B,面试官给你出的题目一般都是算法优化,如果你一看简单就按正常思路 直接利用cpu的快速性直接写程序,恭喜你掉坑了。此时最好想想,一边 说传统方法太耗cpu,可以尝试捷径,如果没有捷径,倘若你还依稀记得 好似这个过程可以数学公式表达,你就和面试说可以使用个公式,但是公 式实在记不住了(面试官估计都不知道有没有公式的)。此时,他估计 会给你提示,你可以循着提示走,如果你实在想不到捷径。不要说我实在 不会了,你就装作很紧张的样子,说这种场合我紧张,平时估计可以想 到,和他说带回去自己看看这个题。说到这,面试官不会为难你的,因 为再为难你,其实就是为难他自己(万一你起杀心呢)。