牛客还愿,分享我的秋招过程。

首先,先感谢牛客网在我秋招过程中给予的巨大帮助。祝愿牛客网在以后的日子里面越办越好,祝愿给位牛友在2020的春招以及秋招中获得自己的满意的offer!

本人面试的java后端开发,所以本帖子会将自己的整理的java面试的相关知识和一些面试经历分享给大家。

闲话少说,直接上干货。

1、知识点部分

知识点主要分为:java基础知识、多线程、spring、数据库计算机网络、JVM手撕代码7大部分。

1.1 java基础知识
  1. String、StringBuilder、StringBuffer的区别
  2. Java核心数据结构(List、Map、Set)
2.1 List
  • ArrayList、LinkedList、vector、CopyOnWriteArrayList的区别
  • CopyOnWriteArrayList的原理
2.2Map
  • Map的实现
  • hashmap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap的区别及实现原理
  • Hashmap的原理、底层、扩容机制
  • Hashtable的原理、底层、扩容机制
  • ConcurrentHashMap的原理、底层(重点)
2.3Set
  • Set的实现
  • HashSet、LinkedHashSet、TreeHashSet的区别及原理
3.零散的知识点
  1. 封装、继承、多态(面向对象编程的三大特性)
  2. 重载和重写的区别
  3. final、finally、finalize
  4. Static关键字
  5. i++与++i
  6. equals()与"=="的区别?
  7. 重写equals()方法为什么要同时重写hashcode()方法
  8. this和super的区别
  9. 自动装箱与自动拆箱
  10. 异常
  11. Java中throw和throws的区别
1.2 多线程
  1. 进程与线程的区别
  2. 多线程的实现(Thread、Runnable、callabe+futuretask、线程池四种方法的区别、实现原理、适用场景)
  3. 线程的启动(start()和run()的区别)
  4. 线程传递参数(1.向run()方法进行传参;2.获取子线程的返回值)
  5. Runnable与callable的区别
  6. 线程状态(新建、执行、无限等待、限期等待、阻塞、终止6种状态变换过程
  7. sleep()和wait()的区别
  8. Notify()和NotifyAll()
  9. Yield ()
  10. 线程的停止
  11. 线程之间的转换
  12. 线程不安全的原因
  13. Synchronized关键字
  14. Synchronized和ReentrantLock的对比、区别、适用场景
  15. 锁的种类:公平锁与非公平锁、乐观锁与悲观锁、独享锁与共享锁、可重入锁、分段锁、锁的状态(无锁、偏向锁、轻量级锁、重量级锁、自旋锁、适应自旋锁)相关的知识点和对比。
  16. CAS(Compare and Swap )原理
  17. AQS(AbstractQueuedSynchronized)原理
  18. 死锁含义、成立条件
  19. 如何有效避免死锁
  20. 银行家算法
  21. Volatile关键字
  22. 线程之间的通信
  23. Java线程池
  24. 为什么使用线程池
  25. 线程池的创建、核心参数
  26. 线程池的种类
  27. 线程池任务执行方法(submit() 、execute()两种的区别)
  28. 线程池关闭
  29. 线程池常用等待队列
1.3 spring
  1. Spring概述
  2. AOP
  3. AOP的实际例子
  4. AOP的***模式
  5. IOC
  6. DI(依赖注入)
  7. Bean的Scope作用域
  8. Bean的生命周期
  9. Spring的事务
  10. Spring事务隔离级别
  11. SpringMVC
  12. Spring的过程
1.4 数据库
  1. 范式(最好记住几个例子)
  2. 索引(索引的含义、优缺点)
  3. 索引的数据结构(底层)
  4. 索引为什么使用B+树不用B树
  5. 索引的分类
  6. 聚簇索引与非聚簇索引
  7. 建立索引的考虑因素
  8. 使用索引的注意事项
  9. 事务(ACID)
  10. 多事务并发会造成的问题(脏读、不可重复读、幻读)
  11. 事务隔离性
  12. 读锁与写锁
  13. 高并发控制数据库
  14. Mysql的工具分析
  15. MyBatis一级缓存
  16. MyBatis二级缓存
  17. Mybatis中的#和$的区别
  18. 高并发数据库设计(百万级数据库设计)
  19. 数据库优化
  20. 主从复制
  21. Mysql数据引擎的选用
  22. 数据库连接池
1.5 计算机网络
  1. OSI七层模型、五层模型、TCP/IP四层模型
  2. 三次握手(为什么不是两次、为什么不是四次)
  3. 四次挥手(为什么是四次挥手不是三次)
  4. 保活计时器
  5. 确认应答机制(ACK)
  6. 滑动窗口
  7. 超时重传机制(去重机制、快重传)
  8. 流量控制
  9. 拥塞控制(慢启动、拥塞窗口)
  10. TCP可靠性保证的机制
  11. TCP与UDP的区别
  12. Post与get区别
  13. http与https
  14. http常见返回码
  15. http请求的过程
  16. 怎么防止http请求的攻击
  17. 对称加密与非对称加密
  18. Cookie和session 的区别
1.7JVM
  1. JVM的组成(类加载器、运行数据区、解释器、本地接口各自的含义与作用)
  2. java程序在JVM中的执行过程
  3. 类加载的时机
  4. 类加载器的种类(Bootstrap 、Extension 、App 、自定义四个类加载器的工作责任)
  5. 类加载器的工作过程(双亲委派机制)
  6. 类加载的详细过程(加载-连接-初始化-使用-卸载 五个步骤的含义)
  7. JVM内存模型(程序计数器、堆、虚拟机栈、本地方法栈、方法区)
  8. GC(垃圾回收机制)
  9. 判断对象存活的方法(引用计数法和可达性分析的区别)
  10. 可达性分析中可以作为GC Roots的对象
  11. 垃圾回收算法(标记/清除算法、复制算法、标记/整理算法的区别以及适用环境)
  12. GC时间
  13. 什么情况下回出现内存溢出,内存泄漏?
  14. GC回收器
1.8 手撕代码
在面试过程中,肯定是逃不过手撕代码这个环节的。我在面试中遇到的手撕代码如下:
  1. 线程安全的单例模式(多种写法)
  2. 快排(三种,其中美团考了一个单链表的快排)
  3. 二叉树的前中后序遍历(递归和非递归)
  4. 多个线程的交替打印
  5. 两个栈实现队列
  6. 链表反转
  7. 二分查找
  8. 逆波兰表达式
  9. 斐波那契数列(青蛙跳台阶):递归和非递归两种方法
手撕代码只有不断的训练才能变得更加熟悉。本人在面试准备的过程中主要刷了《剑指offer100题》和leetcode热体100道。在刷题过程中,主要做的是初级难度和中级难度的题,对于高级难度的题有时候只是看了看具体解题思想,很多高级难度的题并没有真正的解。

下面给出一些经常访问的知识点网址:
程序员必知的八大排序:https://www.cnblogs.com/crazylqy/p/7640829.html
JVM内存模型理解:https://www.jianshu.com/p/76959115d486
各大公司java面试题总结:https://www.cnblogs.com/itcx1213/p/10963809.html
在此向上述博客的作者和网站表示衷心的感谢!

上面的知识点只是一些最基础的知识点,在有时间的条件下还可以去了解:Redis、docker、SpringCloud、Dubbo、SpringBoot、分布式原理、设计模式等高级知识

上面只是简单的罗列了一些重要的知识点,并没有给出答案。没有给出答案是因为我认为寻找答案也是学习的过程,能够加深对知识点的理解和记忆。同时还能在寻找答案的过程中扩大自己的知识面,让自己不仅仅局限于上面罗列的知识点。

2、求职
1、前期准备工作
我个人认为前期的准备工作是:
1.1 记忆知识点、耍算法题。
1.2 确定自己的目标公司,并针对目标公司常考的知识点进行总结。
1.3 准备自己的简历,个人认为简历中比较重要的是你的项目经历和你掌握的开发技能。其他的可以不写或者少写。写在简历上的项目自己心里面一定要有把握,没有把握的项目最好不要写。一般面试时,面试官都会让你选择一个你最熟悉或者他感兴趣的项目让你讲一讲。
1.4 多投简历,多参加面试,把一些不重要或者不是很想去的公司放在前面进行面试,找找面试的感觉。当你觉得准备的差不多了,再向自己心仪的公司投递简历,这样获得offer的可能性更大。
1.5注意招聘的截止时间,这一点可以每天上牛客网上来看看,牛客的求职板块列出了各大公司的招聘开始时间和结束时间

2、面试
在面试过程中我有几点意见:
1、尽量参加现场面试,远程面试虽然方便,但是我个人觉得现场面试可能会发挥的更好,同时还能给面试官传达一些除了面试内容之外的个人气质。
2、面试时的手撕代码是肯定逃不了的,所以在面试前一天,多手写代码。
3、面试时如果遇到不会的问题,可以委婉的拒绝回答这个问题,比如“这方面我正准备进行学习,目前还不是很了解”;如果遇到自己会但不是很清楚的问题时,可以简单的回答对应的问题后,引导面试官去询问你了解的知识点,转移面试官的知识点。
4、一定要多说,把问题回答完成后,可以把该问题相关的知识点、或者有关联的知识点都阐述给面试官听。

以上就是我在2019年秋招过程中准备的知识点和面试经历。若有表述错误或者不合适的地方希望各位牛友进行指正,我会进行修改。
最后祝愿牛客越来越好,祝愿各位牛友都拿到自己喜欢的offer!
#Java工程师##笔记#
全部评论
感谢分享
3 回复 分享
发布于 2020-02-08 01:24
感谢分享🙏
点赞 回复 分享
发布于 2020-02-07 21:39
优秀
点赞 回复 分享
发布于 2020-02-08 08:31
感谢分享
点赞 回复 分享
发布于 2020-02-08 16:18
感谢分享,请问Javaweb部分不需要准备吗。
点赞 回复 分享
发布于 2020-02-10 00:17
很有用 十分感谢!
点赞 回复 分享
发布于 2020-02-10 21:21

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
评论
40
267
分享
牛客网
牛客企业服务