目前一线城市的薪资程度在 13 到 40k 之间,然而找工作的时候并不仅仅有工作教训就行了,还须要肯定的专业知识。如果你野心更大,想要进阿里美团头条等等这些大厂的话,那就须要更多的专业知识。那么,一个三年工作教训的 Java 程序员应该要具备哪些常识呢?
我整顿了之后发现,程序员须要懂好多的常识。
一、我的项目教训
我的项目教训是程序员们最重要的财产,也是面试中必问的问题。个别面试官都会借着我的项目教训来考查应聘者的沟通能力和思考能力。三年工作教训的程序员个别都会有两个以上的我的项目教训,但理论咱们大部分的状况都是做产品的一个性能或一个模块。尽管咱们能很好的实现工作上的要求,然而对于面试这必定是不够的。对于面试来说,咱们还要实现以下四点。
· 晓得你的我的项目到底是做什么的,有哪些性能。
· 晓得你做的我的项目在整个我的项目中所处的地位及作用,并能清晰地论述模块间的调用关系。
· 晓得你我的项目的整体架构和应用到的中间件,并对中间件的原理有肯定的理解。
· 能流畅地论述本人在我的项目中解决过的比较复杂的问题。
二、Java 的基础知识
技术常识这块面试还是蛮常见的。不过大多问的比较简单。这是我列举的一些我曾被问到的问题,大家私下参考一下。
· 栈和队列的区别
· 接口和抽象类的区别
· Int 和 Integer 的区别和主动拆箱 / 装箱的相干问题
· 常量池相干问题
三、汇合框架
汇合框架的底层原理,是面试很常见的问题。无论去大公司面试,还是去小公司面试都会问。只不过问深问浅的区别。
· ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurrentHashMap 的底层实现原理
· 1.7 版本和 1.8 版本的 HashMap 的区别
· HashMap 能不能排序?HashMap 的长度为什么要是 2 的幂次方?
不过不论怎么样,大家去面试的话,都要把上述的问题都尽量弄懂。最低的要求就是把 hashmap 的底层原理弄懂。
四、多线程
· 创立线程的几种形式?Wait,sleep 别离是谁的办法,区别?线程间的通信形式?
· 介绍下什么是死锁,遇见过死锁吗?你是怎么排查的。(能够通过 jps 排查)
· 创立线程池的几种形式,线程池有什么益处。
· 线程继承和接口的区别,接口有什么益处。
· Synchronized、Lock、ReentrantLock 的区别,用法及原理。
· ThreadLocal 的用法和原理
· Volatile 关键字的作用和原理
· 乐观锁和乐观锁
· 对偏心锁,非偏心锁,可重入锁,自旋锁,读写锁的了解
· CAS 是什么及底层原理
· ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue 等等梗塞队列的了解
· ThreadPoolExecutor 的传入参数及外部工作原理
· 给你一个具体的业务场景,让你应用 ThreadPoolExecutor 创立一个适宜的线程池
· 分布式环境下,怎么保障线程平安
多线程个别是高级程序员面试中的重点。当初的我的项目高并发很多,所以面试多线程这块还是挺多的。个别大厂会问得很深。从第十点开始就蛮难的了,大家能够依据本人的状况酌情学习。
五、JVM 相干问题
· JVM 内存机制
· 介绍下垃圾收集机制,垃圾收集有哪些算法,各自的特点
· 聊聊 GC,谈谈 Major GC,FullGe 区别,垃圾收集器有哪些,他们的区别?
· OutOfMemeryError 这个谬误你遇到过吗?你是怎么解决解决的?
· JVM 调优有哪些参数,介绍下,线上环境上,你是怎么查看 JVM 的参数并进行调优的?
· 能不能自己写一个类叫 java.lang.String(类加载的过程,双亲委派模型)
JVM 这块始终是高级程序员面试中的重点。想拿高薪这块肯定得懂。而且不仅懂,还要有肯定的实战经验。
六、框架相干问题
· Spring 用了哪些设计模式?Spring 注入 bean 的形式?对 SpringIOC 和 SpringAOP 的了解?
· Spring 事务隔离级别和流传机制?
· Mybatis 的缓存机制(一级缓存和二级缓存),Mybatis 的 mapper 文件中 #和 $ 的区别
· SpringMVC 的流程
· Spring 和 SpringBoot 的区别?
· 对 SpringBoot 的了解
· RPC 框架有哪些,他们的区别?
· Dubbo 的应用和了解
· Spring Cloud 的应用和组件,谈谈你的了解
框架这块始终都是面试的重点,不过依据我的教训,框架这里个别不会问的很深,很少碰到让你说源码,次要还是考查你对框架的设计了解和框架的流程。
七、消息中间件
· 你们公司是如何进行消息中间件的技术选型?
· 如何保障消息中间件的高可用?
· 如何保障消息中间件反复发送音讯?
· 音讯队列积压了大量的音讯,你该怎么解决?
· 如何保障消费者生产音讯是有程序的?
· 让你来开发一个消息中间件,你会怎么架构?
消息中间件还是蛮重要的,无论对面试还是工作来说都是重点。大家肯定要对这块多钻研,多理解。
八、Redis
· 你们公司为什么要应用 Redis?Redis 有几种数据类型?
· Redis 长久化机制?Redis 的过期策略?
· 怎么保障 Redis 的高可用?
· 什么是缓存穿透?如何防止?什么是缓存雪崩?如何防止?
· 如何保障缓存与数据库的双写一致性?
· Redis 单线程模型原理,为什么能撑持高并发?
· Redis 哨兵架构的了解和底层原理
当初高并发场景越来越多,根本面试必问缓存,只是或深或浅而已。比拟常问的就是 1 到 5,6、7 想挑战大厂的能够去钻研。
九、数据库
· 工作中你是怎么优化 sql 的?
· 什么状况下,索引会生效?
· 数据库的存储引擎,比方:MySQL 的 MyISAM 和 InnoDB 区别?
· 索引的最左准则
· 索引的底层原理
· 你们公司是怎么进行分库分表?分库分表的计划
数据库的优化个别都会问,波及索引的中央会问的多些,还会问到难度比拟高的用库分表,这里网上都有计划,个别都是主从库或 Mycat,大家能够去学习理解一下。
十、其余
· 分布式事务是怎么解决的?
· 分布式 session 计划?
· 设计一个秒杀场景
· 怎么避免表单屡次提交
· Linux 的基本操作命令
· ElasticSearch 的应用和原理
· Zookeep 的应用和原理
这块次要是问你一些常见的业务场景,比拟开放式,还会依据你本人的简历来问。比方你的简历我的项目外面有 ElasticSearch,那么面试官就会问你这些中间件的应用和原理。如果你胜利地通过了所有的技术面,那么祝贺你,你离收到 offer 有限靠近了。