Java复习大纲

做者:御光飘扬
连接:https://www.nowcoder.com/discuss/57390
来源:牛客网

java

总的经验:知识点准备+数据结构与算法+面试技巧 mysql

1. 知识点准备,主要包括:计算机网络、操做系统、关系型数据库、非关系型数据库、linux、编程语言、项目及实习。这一部分只要是认真准备,通常问题不会太大。 linux

2. 数据结构与算法,这个比较突出硬实力,面过的每一个公司都是须要手撸几个算法题,因此须要尽早刷题准备。(之因此单独列为一项,是由于楼主就是有几家公司死在这里的) ios

3. 面试技巧: 面试

第一点,每一次面试后认真总结,极可能下一次面试又碰上此次不会的原题(亲身经历); 算法

第二点,遇到本身研究比较好的知识点,能够引导面试官问,往底层说(可是千万要本身有把握),这样若是一次面试有1到2个问题能够说的比较深刻,面试官对你的印象会很好(屡试不爽); sql

第三点,放低身段,面对面试官的嘲讽之类的(好比嫌你low、对你的研究方向一片否认),尽可能解释,不要怼面试官,要忍得住;实在忍不住,就怼个痛快(我试过,顺利挂了)。 shell

第四点,自信、自信、自信。相信本身,勇敢的去面试,便是被虐。相信本身,并且面试技巧也都是在一次次被虐中成长起来的。

下面是我本身总结的一点知识点的干货,若low,勿喷:

计算机网络: 数据库

1. OSI七层协议、TCP/IP四层协议 编程

2. 各层对应的网络设备(路由器、交换机、网关、网桥、集线器等等),各层对应的协议

3. 数据链路层的CSMA/CD协议,笔试可能会用到

4. IP地址分类,子网划分(笔试经常使用)

5. TCP和UDP的区别

6. TCP三次握手和四次挥手,为何三次握手,为何四次挥手

7. TCP精髓问题:中止等待协议、连续ARQ协议、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复)

8. 从浏览器输入www.baidu.com到加载出页面发生了什么

9. GET和POST区别

10. HTTP状态码,HTTP1.0和HTTP1.1区别

11. HTTP缓存机制(cache-control、Expires之类的一系列请求与相应报头字段)

12. session和cookie的区别,禁用cookie后怎么办

13. DNS解析的过程

14. 经常使用协议的端口

推荐:计算机网络(谢希仁)、TCP/IP详解、HTTP权威指南,大神能够看一下RCF2616之类的

数据库:

看书结合实践,多看底层原理实现、多动手。会分析比较并设计几种经常使用数据库的实际使用场景,熟练写各类SQL语句。

怎么作:

一、刷题(一遍看书一遍刷)

二、了解常考面试题,理解+背

三、一个一个查而后解决它们

Mysql:

1. 数据库范式

数据库三范式及判断、E-R图

2.数据库事务

事务特性:ACID(原子性、一致性、隔离性、持久性)

事务隔离级别和各自存在的问题(脏读、不可重复读、幻读)和解决方式(间隙锁及MVCC)

MVCC(增长两个版本号)及delete、update、select时的具体控制

3.数据库索引

索引分类(主键、惟一索引、全文索引、覆盖索引等等),最左前缀原则,哪些条件没法使用索引

B树、B+树区别,索引为什么使用B+树

汇集索引与非汇集索引(使用非汇集索引的查询过程)

4.数据库的锁

乐观锁和悲观锁、行锁与表锁、共享锁与排他锁(inndob如何手动加共享锁与排他锁)

死锁断定原理和具体场景

5.数据库的存储引擎

 

innodb和myisam存储引擎的区别

6.MySQL命令

查询缓慢和解决方式(explain、慢查询日志、show profile等)

drop、truncate、delete区别

查询语句不一样元素(where、jion、limit、group by、having等等)执行前后顺序

7.主从复制

mysql优化,读写分离、主从复制

数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)

 

 

Redis:

怎么作:

结合项目去理解,整理面试题,背

 1.发布订阅

2.数据淘汰机制(好几种)

3.字典及渐进式rehash

4.RDB与AOF

5.为什么高效(内存数据库、非阻塞IO、IO多路复用、单线程、hash表、跳表等)

6. Redis的几种数据结构

推荐:MySQL数据库应用从入门到精通(王飞飞,虽然名字很low)、高性能Mysql、Redis设计与实现、Redis实战

数据结构与算法:

1. 数组、链表(单向、双向、双端)、栈和队列、二叉树、红黑树、哈希表、堆(最大和最小)、图

2. 我的经验:栈和队列、哈希表、链表、二叉树的题较多,图的较少

3. 查找:二分查找及其变形

4. 二叉树:前序、中序、后序遍历,按规定方式打印,两个节点之间操做(最近公共祖先、距离)等问题。

5. 最大堆和最小堆:大数量级数据找最大几个等问题、堆如何调整等问题。

6. 图:深度优先、广度优先、单源最小路径Dijkstra,任意两点间最短路径Floyd-Warshall,最小生成树Prime和Kruskal

7. 红黑树:特色及如何调整(基本上没人让你手撸红黑树)

8. 栈和队列:常常做为算法题要用到的数据结构

8. 八大排序:3个简单的:冒泡、选择、插入及其优化,5个高级的:快速排序、归并排序、堆排序、希尔排序、桶排序(快排、归并、堆很重要,常常手撸)

9. 时间复杂度及空间复杂度分析

10. 动态规划dp:这个比较难,背包问题以内的

推荐:数据结构C语言版(严蔚敏)、java数据结构和算法(Robert Lafore)、剑指offer及leetcode刷题、大神能够看一下算法导论

Linux:

1. 经常使用命令:用户控制、权限控制、进程控制、系统状态查询之类的

2. Linux状态分析:CPU(top)、内存(top和free,注意buffer和cache区别)、磁盘(fdisk和df)、IO(iostat)等

3. grep和sed

4. awk(用好awk,脚本写得好)

5. shell脚本

6. Linux目录结构(尤为是/proc很是重要)

7. linux文件系统结构和启动流程

8. 防火墙iptables(这个比较少)

推荐:鸟哥私房菜、视频(马哥的一套 http://pan.baidu.com/s/1pL3HGT1

操做系统:

1. 一个二进制文件运行出结果,操做系统作了什么(这是一个很全面的题)

2. 死锁的条件及银行家算法、资源分配图之类的

3. 进程间通讯方式

4. linux的五种IO方式(阻塞与非阻塞、同步与异步的理解)

5. linux的select、poll、epoll的区别

6. 进程与线程区别、内核级线程与用户级线程

7. 页面置换算法,尤为是lru

8. 进程调度算法

9. linux中断响应机制

10. 虚拟内存机制

推荐:现代操做系统、网易云课堂的北大公开课

基本语言(java):

java:(未接触javaee)

1. java面向对象(一大堆知识点)

2. 多线程实现的几种方式(Thread、Runnable、Callable、线程池)及各自的特色

3. java线程的状态及相互转换

4. 线程同步的几种方式和线程间通讯

5. 生产者消费者模式

6, volatile关键字

7. J.U.C包的JDK源码(CAS、AQS、ConcurrentHashMap、ThreadLocal、CyclicBarrier、CountDownLatch、Atom、阻塞队列等等)

8. String、StringBuffer、StringBuilder

9. 异常处理机制

10.集合框架底层JDK实现(HashMap和Hashtable区别、Set、List等等)

11. IO(writer、reader、InputStream、OutputStream)、NIO等

12. 四种引用及其区别和使用场景

13. 对象序列化与反序列化

14. lambda表达式

15. jvm虚拟机:内存分区、垃圾回收(三种垃圾回收算法、新生代老生代、垃圾回收器、G1优势等等)、内存溢出、内存泄漏排查、JVM调优、类加载机制、双亲委派、内存模型及线程、锁优化

16.设计模式:几种单例模式实现(手撸)、其余几种常见的设计模式(JDK中具体点)、项目中怎么用了

语言这块知识点太多了,基础要扎实。

推荐:设计模式那点事、疯狂java讲义、java并发编程实战、深刻理解java虚拟机、java编程思想

其余:

hadoop:mapreduce、HDFS、yarn等等(推荐:Hadoop权威指南)

hive:很经常使用的处理工具(推荐:Hive编程指南)

消息队列(kafka之类的)、远程过程调用RPC之类,写一些Demo本身试一下,不要被问直接就不知道

负载均衡调度(一致性哈希常常问)等

固然,还有不少其余知识。

Spring
整理有什么?IOC和AOP思想,bean如何初始化,生命周期,动态代理等细节的实现,能看源码最好。没时间看完,IOC和AOP部分看看源码了解一下底层实现。
 

 

设计模式

熟悉几种经常使用的设计模式,尤为单例模式,各类手写都要会,线程安全的、线程不安全的,各类实现方式之间的区别。

 

场景设计

面试通常都会考察一些实际场景的设计题,有时间多看看开源,理解一些人家的设计思路,积累多了遇到这样的问题不会彻底没有思路。

 

项目和实习:

必定要把本身作的东西从头至尾顺一遍。

难点在哪里,怎么解决的,学到了什么,技术亮点在哪里,这些事常常问的。

常问的问题,像并发量多少,怎么优化这些也要早测试早做准备。

千万不要到时候再想,这会让面试官感受你对本身作的都不熟悉。最好能够本身画一下架构图,讲的时候思路更清晰。
每一个细节好好把握,知道项目的扩展点,对于扩展要有设计思路。
 

补充一些内推信息给后来人:
内推渠道:
北邮人论坛的毕业生找工做板块、牛客网的讨论区(通常有置顶)、脉脉上(互联网员工直接发布一些内推信息)
内推时机:
不能太早也不能太晚:太早的话,彻底没有面试经验和准备,被捞起来一面就容易挂了;太晚的话,极可能就死在简历池子里了!
BAT为例:
百度:提早批开始不须要填系统,电子版简历由内推人直达部门,须要早一些内推,否则部门招满,极可能就死在简历池里。
腾讯:内推后,会收到邮件更新信息,可是简历会不少(腾讯楼主内推的比较晚,简历就是校招才捞起来的)。
阿里:内推后,会收到邮件更新信息,我的感受注意不要太早内推(阿里主要java,java须要准备的东西还挺多的,最好充分准备了,否则极可能一面挂;并且阿里虽然校招要人少,但面的应届生超多,通常内推不会死在简历池里)
车票报销的公司(我知道的):
网易、腾讯(内推)、链家、滴滴、招银网络(提早批)
相关文章
相关标签/搜索