java基础-java核心知识库

本人从事java开发6年左右,主要从事互联网相关的开发,目前还是奋战在一线的码农,痛并快乐着。受互联网产品热潮的影响,关注高性能低成本架构,互联网开发框架,以下是我认为作为一个资深java程序员应该掌握的技术。

集合里面那些对象的原理
扩容原理,特别是map的底层
Hashmap、Hashtable和cocurrentHashMap的区别,要讲出它们各自的实现原理才行,比如Hashmap的扩容机制、cocurrentHashMap的段锁原理、多线程安全性。
几种造线程池的方法,区别
线程有哪几种状态,他们是如何转换的
Rpc原理,以及大致流程
Nio和netty的区别,为什么netty的性能高,nio,bio,aio的区别
阻塞io,和非阻塞io的区别
redis的集群
各种锁的区别,原理使用,并发包的熟悉程度
Redis和数据库结合的使用场景
Memached过程和原理
Redis做队列的原理
zk做订阅的原理,底层,zk的选举算法,是怎么处理的
Hash碰撞的解决办法
treemap红黑树(问的少)
jvm调优经验
jvm内存模型,jvm双亲委派,jvm常用参数,你平时调优怎么设置的,举例子。
类加载器机制
数据库索引使用
手写递归,手写二分查找,手写生产者,消费者模型
Java 的序列化做什么用的 序列化id会出现哪些问题?
深入理解java中的ThreadLocal
Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?
在Java中Executor和Executors的区别?
为什么使用Executor框架比使用应用创建和管理线程好?
怎么通过linux命令去分析jvm里面那个线程阻塞了
Java中用到的线程调度算法是什么?
什么是多线程中的上下文切换?
classloader结构,是否可以自己定义一个java.lang.String类,为什么? 双亲代理机制。
有没有做过jvm内存调优,如何做的,举例子,用过哪些工具?
介绍Java中垃圾回收机制,程序员平时需要关注这个吗?为什么?请举例说明。
数据库隔离级别介绍、举例说明。
override和overload的区别。
求二叉树的最大距离(即相距最远的两个叶子节点),写代码。
两个栈实现一个队列,写代码。
数据库sql调优,慢sql定位
索引有哪几种,区别,使用场景
mysql存储引擎,哪几种,区别使用场景
linux shell脚本的使用,统计,排序等等
linux 常用命令,例如top命令查看进程的后每个参数的意义
乐观锁和悲观锁
nginx的配置
你遇到的OOM问题,怎么解决的。
你在项目中遇到过那些高并发的问题
谈谈常见的负载均衡策略 分别有什么优缺点
jdk\bin下的工具

算法基础

写java的基本上都是做应用系统的,用到算法的机会几乎没有,所以一般不会考。但是如果工作年限比较长,保不齐面试官怀疑你的编程能力,故意要考考,所以快排、堆排、逆转链表、遍历二叉树之类的基础还是复习复习吧。
如果面的是bat核心部门,担心碰见装逼人士的话,也可以提前复习下《编程之美》之类的。
算法问题,写不出代码,但是如果说出思路会有加分

java基础

hashmap一定要搞明白原理。
treemap知道就可以,应该没人闲的蛋疼考红黑树。
threadlocal面试官也喜欢考,要搞明白原理
反射、动态代理、ioc、aop
nio、aio几乎都会问,抽空写写例程,知道netty mina
class loader: 知道双亲委派,如果知道tomcat、jetty class loader异同更佳

gc

面试前背熟各种gc算法的区别,理解原理。
G1很多面试官自己都不明白,没时间就不用管。

高并发

传统IT一般接触不到高并发,不过没关系按下面说的做,应付面试问题不大
把java.util.concurrent下面所有的包和类通读一遍,理解原理、记住核心代码、写例程,网上有很多concurrent相关类原理解析的文章,对着文章看源代码理解起来问题不大。
有些类代码很复杂比如aqs,看不明白就算了,也不用太花功夫,记住原理即可,因为大部分面试官也不明白。
一定要写例程,例程最好跟你的业务能扯上一点点关系,这样面试的时候就是你实际项目里面的代码了。
常用类有:ConcurrentHashMap、读写锁、Condition、线程池、Barrier、CountDownLatch、Callable、BlockingQueue

hdfs和mr

传统IT一般也接触不到,如果不想准备就算了,如果想准备的话,就在自己的开发机上撘3个linux虚机, 按照网上的教程自己一步一步撘一个hadoop环境出来,然后找几个实际业务中生成出来的log,写几个map reduce程序处理一下。
面试的时候就可以很谦虚的说,实际项目里面用过,但是用的不多

application server

主要是tomcat,jetty,如果再懂点jboos更好,至于商业的weblogic和WebSphere还是算了
有时间的话,看看tomcat和jetty的源代码,重点看线程模型和io,以及tomcat中用到的一些模式。

服务器集群与负载均衡。

db

oracle、mysql,postgresql,最好还懂点nosql
理解myisam和innodb的区别 2、理解关系型数据库索引的原理,理解一些简单的索引优化的原则。
面试官很喜欢给出一堆where子句,考索引、复合索引什么情况下起作用
导致数据库索引失效的场景有哪些
not in 与 not exists 有什么区别? in查询不对null进行处理
like 是否走索引?什么情况下走 什么情况下不走

框架知识

mvc框架

数据持久化框架

上一篇:ASP.NET MVC 5 入门指南汇总


下一篇:bzoj1901