java学习总纲

一、java基础




  1、String类为什么是final的。
从设计安全上讲:1)确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。换言之,如果有一个String的引用,它应用的一定是一个String对象,而不可能是其他类的对象。2)String一旦被创建是不能被修改的,因为java设计者将String为可以共享的。
从效率上讲:1)设计成final,jvm才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率。2)java设计者认为共享带来更高的效率。
总而言之,就是要保证java.lang.String引用的对象一定是java.lang.String的对象,而不是引用它的子孙类,这样才能保证它的效率和安全。

  2、HashMap的源码,实现原理,底层结构。
总的来说,HashMap就是数组+链表的组合实现,每个数组元素存储一个链表的头结点,本质上来说是哈希表“拉链法”的实现。
HashMap的链表元素对应的是一个静态内部类Entry,Entry主要包含key,value,next三个元素。
主要有put和get方法,put的原理是,通过hash%Entry.length计算index,此时记作Entry[index]=该元素。如果index相同就是新入的元素放置到Entry[index],原先的元素记作Entry[index].next
get就比较简单了,先遍历数组,再遍历链表元素。
null key总是放在Entry数组的第一个元素
解决hash冲突的方法:链地址法
再散列rehash的过程:确定容量超过目前哈希表的容量,重新调整table 的容量大小,当超过容量的最大值时,取
Integer.Maxvalue

  3、说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。
https://blog.csdn.net/haelang/article/details/44809645
  4、描述一下ArrayList和LinkedList各自实现和区别。
https://www.cnblogs.com/Alan-Jones/p/6426994.html

  5、Java中的队列都有哪些,有什么区别。
种类:普通队列、阻塞队列、非阻塞队列
区别:
(1)阻塞队列与普通队列区别在于,当队列是空时,从队列中获取元素的操作将被阻塞,或者当队列满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新的元素的线程同样会被阻塞,知道其他的线程使得队列重新变的空闲起来,如从队列中溢出一个或多个元素,或者完全情况队列。
举例说明:阻塞队列(LinkedBlockingQueue)和非阻塞队列(ConcurrentLinkedQueue)的区别
相同点:二者都是线程安全的。
不同点:
(1)阻塞队列:按FIFO排序元素。队列的头部是在队列中时间最长的元素。队列的尾部是在队列中最短的元素。新元素插入队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知性能要低。
注意:A:必须要使用take()方法获取的时候达成阻塞结果
B:使用poll()方法产生非阻塞效果
(2)非阻塞队列:基于链接节点的、无界的、线程安全。按FIFO排序元素。队列的头部是在队列中时间最长的元素。队列的尾部是在队列中最短的元素。新元素插入队列的尾部,并且队列检索操作会获得位于队列头部的元素。当许多线程共享访问一个公共Collection时,ConcurrentLinkedQueue是一个恰当的选择。此队列不允许为null元素。
(3)在并发编程中,一般推荐使用阻塞队列,这样实现可以尽量避
https://blog.csdn.net/bn493235694/article/details/79600634

  6、反射中,Class.forName和classloader的区别
https://blog.csdn.net/bn493235694/article/details/79600850

  7、Java7、Java8的新特性
https://blog.csdn.net/samjustin1/article/details/52268004

  8、Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高
https://blog.csdn.net/a19881029/article/details/22695289

  9、java内存泄露的问题调查定位:jmap,jstack的使用等等
https://blog.csdn.net/gzh0222/article/details/8538727
  10、string、stringbuilder、stringbuffer区别
http://www.cnblogs.com/xudong-bupt/p/3961159.html
  11、hashtable和hashmap的区别
http://www.cnblogs.com/carbs/archive/2012/07/04/2576995.html
  12、异常的结构,运行时异常和非运行时异常,各举例子
https://www.tuicool.com/articles/YVZBNfN
  13、String a="abc" String b="abc String c=new String("abc") String d="ab" + "c". 他们之间用==比较的结果

  14、String类的常用方法
http://www.pc6.com/java/j_50343.html

  15、java的引用类型有哪几种
https://blog.csdn.net/coding_or_coded/article/details/6603549
  16、抽象类和接口的区别
http://www.importnew.com/12399.html
  17、java的基础类型和字节大小
http://www.cnblogs.com/doit8791/archive/2012/05/25/2517448.html
  18、Hashtable,HashMap,ConcurrentHashMap底层实现原理与线程安全问题
https://blog.csdn.net/xuefeng0707/article/details/40834595
  19、如果不让你用java jdk提供的工具,你自己实现一个Map,你怎么做。
http://www.cnblogs.com/xwdreamer/archive/2012/05/14/2499339.html
  20、Hash冲突怎么办?哪些解决散列冲突的方法?
http://xiaolu123456.iteye.com/blog/1485349
  21、HashMap冲突很厉害,最差性能,你会怎么解决?从O(n)提升到log(n)咯,用二叉排序树的思路说了一通
https://www.2cto.com/kf/201505/399352.html
  22、rehash
https://www.tuicool.com/articles/qqyENz
  23、hashCode()与equals()生成算法,方法怎么重写
https://blog.csdn.net/jiangwei0910410003/article/details/22739953
  24、面向对象的特征
https://blog.csdn.net/hu_bo_tao/article/details/79679835
  25、final,finally,finalize的区别
https://blog.csdn.net/cyl101816/article/details/67640843
  26、int和Integer有什么区别
https://blog.csdn.net/qq_27438341/article/details/54602209?locationNum=12&fps=1
  27、重载和重写的区别
https://blog.csdn.net/zhu_apollo/article/details/1852542
  28、抽象类和接口有什么区别
https://blog.csdn.net/fenglibing/article/details/2745123
  29、说说反射的用途以及实现
https://blog.csdn.net/qq_35246620/article/details/75209130
  30、说说自定义注解的场景以及实现
https://blog.csdn.net/yjclsx/article/details/52101922
  31、session和cookie的区别
https://blog.csdn.net/duan1078774504/article/details/51912868
  32、session和cookie的区别
https://blog.csdn.net/duan1078774504/article/details/51912868
 33、session分布式处理
https://blog.csdn.net/yangrui0070/article/details/60572777
 34、jdbc流程
https://blog.csdn.net/weixin_37139197/article/details/78838091
 35、MVC设计思想
https://blog.csdn.net/lvjianyu2007/article/details/31784185
 36、equals与==的区别
https://blog.csdn.net/z10z32/article/details/64129794
 37、List和Set的区别
https://blog.csdn.net/u011562377/article/details/50464507
 38、List和Map的区别
https://blog.csdn.net/qq_35776392/article/details/54880882
 39、Arraylist和LinkedList的区别
https://blog.csdn.net/bjzhuhehe/article/details/72230559
 40、ArrayList和Vector区别
https://blog.csdn.net/tayanxunhua/article/details/10037403
 41、HashMap和HashTable区别
https://blog.csdn.net/ddxxii/article/details/56842354
 42、HashSet和HashMap区别
https://blog.csdn.net/zhushuai1221/article/details/51417691
 43、HashMap和ConcurrentHashMap的区别
https://blog.csdn.net/zldeng19840111/article/details/6703104
 44、HashMap的工作原理及代码实现
https://blog.csdn.net/u012926924/article/details/50451991?locationNum=9
 45、ConcurrentHashMap的工作原理及代码实现
https://blog.csdn.net/u013991521/article/details/53032216



二、Java IO



1、讲讲io里面的常见类,字节流,字符流,接口,实现类,方法阻塞。
https://blog.csdn.net/zxman660/article/details/7875799
2、讲讲NIO。
http://blog.jobbole.com/88984/(一个例子讲清楚NIO)
http://www.importnew.com/19816.html
https://blog.csdn.net/anxpp/article/details/51512200
3、String编码UTF-8和GBK的区别?
https://blog.csdn.net/chruan/article/details/8812110
4、什么时候使用字节流、什么时候使用字符流?
https://blog.csdn.net/zj8692286/article/details/12650731
5、递归读取文件夹下的文件,代码怎么实现?
http://www.cnblogs.com/zhouyalei/p/3324491.html



三、Java Web



1、session和cookie的区别和联系,ssion的生命周期,多个服务器部署时session管理。
https://blog.csdn.net/u012635819/article/details/50678602
2、servlet的一些相关问题
https://blog.csdn.net/chdjj/article/details/18882973
3、webservice相关问题
https://blog.csdn.net/y_love_f/article/details/47176187
4、jdbc连接、forname方式的步骤,怎么声明使用一个事务。举例并具体代码。
https://blog.csdn.net/yangshangwei/article/details/78074933
5、无框架下配置web.xml的主要配置内容。
https://blog.csdn.net/shanliangliuxing/article/details/7458492
https://blog.csdn.net/cslbupt/article/details/60580782
6、jsp和servlet的区别
https://blog.csdn.net/tanga842428/article/details/52687728
7、forward与redirect的区别











四、JVM



1、java的内存模型以及GC算法
http://www.cnblogs.com/AloneSword/p/4262255.html
2、jvm性能调优都做了什么
https://blog.csdn.net/chen77716/article/details/5695893





3、介绍jvm中7各区域,然后把每个区域可能造成内存的溢出的情况说明
http://www.codeceo.com/jvm-memory-overflow.html
4、介绍GC和GC Root不正常引用。
https://blog.csdn.net/fenglibing/article/details/8928927
5、自己从classload加载方式,加载机制说开去,从程序运行时数据区,讲到内存分配,讲到String常量池,讲到JVM垃圾回收机制,算法,hotspot。反正就是各种扩展
类加载机制:http://developer.51cto.com/art/201103/249613.htm
程序运行数据区:http://www.cnblogs.com/lrh-xl/p/5277585.html
内存分配:http://javawebsoa.iteye.com/blog/1558776
String常量池:http://developer.51cto.com/art/201106/266454.htm
hotspot:https://blog.csdn.net/jewes/article/details/42174893
6、jvm如何分配直接内存,new对象如何不分配在堆上而是栈上,常量池解析
7、数组多大放在JVM老年代(不只是设置PertenureSizeThreshold,问通常多
大,没做过一问便知)
https://book.2cto.com/201306/25496.html
8、老年代中数组的访问方式
http://book.51cto.com/art/201107/278927.htm
9、GC算法,永久代对象如何GC,GC有环怎么处理



10、谁会被GC,什么时候GC
程序认为死去的对象,也就是不可达对象
11、如果想不被GC怎么办
不被GC,创建对象的强引用,并一直不释放
12、如果想在GC中生存1次怎么办





五、开源框架



1、hibernate和ibatis的区别
https://blog.csdn.net/cdh1213/article/details/5967405







2、讲讲mybatis的连接池
https://www.tuicool.com/articles/RvqEjeR
3、spring框架中需要引用哪些jar包,以及这些jar包的用途
www.cnblogs.com/BensonHe/p/3903050.html
4、springMVC的原理
http://blog.sina.com.cn/s/blog_7ef0a3fb0101po57.html
5、springMVC注解的意思
http://aijuans.iteye.com/blog/2160141
6、spring中beanFactory和ApplicationContext的联系和区别



7、spring注入的集中方式(循环注入)
http://developer.51cto.com/art/201207/348019.htm
8、spring如何实现事务管理
http://michael-softtech.iteye.com/blog/813835
9、springIOC
https://blog.csdn.net/it_man/article/details/4402245
10、spring AOP的原理
https://blog.csdn.net/moreevan/article/details/11977115
11、hibernate 中的1级和2级缓存的使用方式以及区别原理(Lazy-load的理解)
http://www.jb51.net/article/75161.htm
12、Hibernate的原理体系架构,五大核心接口,Hibernate对象的三种状态转换,事务管理。
http://www.cnblogs.com/shysunlove/archive/2012/11/21/2780240.html
13、说一下Spring的核心模块




14、redis常用的五种数据类型



15、说一下spring中Bean的作用域



16、说一下spring中Bean的生命周期



17、对spring中依赖注入两种方式的认识



18、spring框架中都用到了哪些设计模式?



19、BeanFactory和ApplicationContext的区别


20、spring Bean的生命周期
21、动态代理(cglib与jdk)
22、Spring事务实现方式
23、Spring事务底层原理
24、如何自定义注解实现功能
25、Spring MVC运行流程
26、Spring MVC启动流程
27、Spring的单例实现原理
28、Spring框架中用了哪些设计模式
29、Spring其他产品(Spring Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP等)





六、多线程






1、java创建线程之后,直接调用start()方法和run()的区别
https://www.tuicool.com/articles/7nyEziU
2、常用的线程池模式以及不同线程池的使用场景
http://www.cnblogs.com/dolphin0520/p/3932921.html
3、newFixedThreadPool此种线程池如果线程数量达到最大值后会怎么办,底层实现原理
https://www.oschina.net/question/565065_86540
4、多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关的很多具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。或者一个类的static构造方法加上synchronized之后的锁的影响。
http://www.cnblogs.com/shipengzhi/articles/2223100.html
5、了解可重入锁的含义,以及ReentrantLock和synchronized的区别
http://outofmemory.cn/java/java.util.concurrent/synchronized-locks-Lock-ReentrantLock
6、同步的数据结构,例如concurrentHashMap的源码理解以及内部是实现原理,为什么他是同步的且效率高
http://www.cnblogs.com/ITtangtang/p/3948786.html
7、atomicinteger和Volatile等线程安全操作的关键字的理解和使用
http://www.cnblogs.com/dolphin0520/p/3920373.html
8、线程间通信,wait和notify
http://www.jb51.net/article/40746.htm
9、定时线程的使用
https://www.2cto.com/kf/201502/376021.html
10、场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率。
https://www.tuicool.com/articles/ZvAFny
11、进程和线程的区别
http://www.cnblogs.com/way_testlife/archive/2011/04/16/2018312.html
12、什么叫线程安全?举例说明





13、线程的几种状态
http://blog.51cto.com/lavasoft/99153
14、并发,同步的接口或方法
https://blog.csdn.net/woshisap/article/details/43119569








15、HashMap是否线程安全,为何不安全。ConcurrentHashMap,线程安全,为何线程安全。底层是是是实现是怎样的。
https://blog.csdn.net/xuefeng0707/article/details/40834595
16、J.U.C下的常见类的使用。ThreadPool的深入考察;BlockingQueue的使用。(take,poll的区别,put,offer的区别);原子类的实现。
http://wsmajunfeng.iteye.com/blog/1629354
http://ifeve.com/j-u-c-framework/
17、简单介绍下多线程的情况,从建立一个线程开始。然后怎么控制同步过程,多线程常用的方法和结构
http://www.jb51.net/article/36553.htm
18、volatile的理解
http://www.infoq.com/cn/articles/java-memory-model-4/
19、实现多线程有几种方式,多线程同步怎么做,说说几个线程里常用的方法。
http://www.jb51.net/article/43417.htm
http://www.cnblogs.com/psjay/archive/2010/04/01/1702465.html
https://blog.csdn.net/you_off3/article/details/7572704
20、sleep()、join()、yield()有什么区别
https://blog.csdn.net/xiangwanpeng/article/details/54972952
21、说说CountDownLatch原理
https://blog.csdn.net/qq_15769369/article/details/79543247
22、说说CyclicBarrier原理
https://blog.csdn.net/u011518120/article/details/55252951
23、说说Semaphore原理
https://blog.csdn.net/kusedexingfu/article/details/73047943
24、说说Exchanger原理
https://blog.csdn.net/u010715440/article/details/79531671
25、说说CountDownLatch与CyclicBarrier区别
https://blog.csdn.net/tolcf/article/details/50925145
26、ThreadLocal原理分析
https://blog.csdn.net/zhangerqing/article/details/43095147
27、讲讲线程池实现原理
https://blog.csdn.net/gol_phing/article/details/49032055
28、线程池的几种方式
https://blog.csdn.net/HANLIPENGHANLIPENG/article/details/52108446
29、synchronize实现原理
https://blog.csdn.net/zbuger/article/details/51030772
30、synchronize与lock的区别
https://blog.csdn.net/natian306/article/details/18504111
31、CAS乐观锁
https://blog.csdn.net/m0_37034294/article/details/78931085
32、ABA问题
https://blog.csdn.net/john8169/article/details/52439185
33、乐观锁的业务场景及实现方式
https://blog.csdn.net/lxy344x/article/details/76560243
https://blog.csdn.net/claram/article/details/53959367



七、网络通信



1、http是无状态通信,http的请求方式有哪些,可以自己定义新的请求方式么。
http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html
2、socket通信,以及长连接,分包,连接异常断开的处理。
http://developer.51cto.com/art/201202/318163.htm
3、socket通信模型的使用,AIO和NIO。
aio:http://www.52im.net/thread-306-1-1.html
nio:http://www.cnblogs.com/dolphin0520/p/3916526.html
4、socket框架netty的使用,以及NIO的实现原理,为什么是异步非阻塞。
参考:http://www.importnew.com/15656.html
NIO:http://www.cnblogs.com/dolphin0520/p/3916526.html
5、同步和异步,阻塞和非阻塞
https://blog.csdn.net/hguisu/article/details/7453390
6、OSI七层模型,包括tcp,ip的一些基本知识
参考:https://www.2cto.com/net/201307/232200.html
https://blog.csdn.net/ysdaniel/article/details/6636641
7、http中,get post的区别
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
8、说说http,tcp,udp之间关系和区别
9、说说浏览器访问www.taobao.com,经历了怎样的过程
https://blog.csdn.net/a2796749/article/details/48032341
10、HTTP协议、HTTPS协议,SSL协议以及完整的交互过程;
https://blog.csdn.net/dfsaggsd/article/details/50910999
11、tcp的拥塞,快回传,ip的报文丢弃
http://www.cnblogs.com/newwy/p/3254029.html
12、https处理的一个过程,对称加密和非对称加密
https://my.oschina.net/shede333/blog/359290
13、head各个特点和区别
14、说一下什么是TCP和UDP




15、TCP和UDP的区别

16、TCP和UDP的适用场景:







八、数据库MySQL



http://www.cnblogs.com/wangwanchao/p/5267164.html
1、MySql的存储引擎的不同
http://c.biancheng.net/cpp/html/1465.html
2、单个索引、联合索引、主键索引
https://blog.csdn.net/u011341352/article/details/47731255
3、mysql怎么分表、以及分表后如果想按条件分页查询怎么办(如果不是按分表字段来查询的话,几乎效率地下,无解)






4、分表之后想让一个id多个表是自增的,效率实现
http://www.ttlsa.com/mysql/mysql-table-to-solve-the-increment-id-scheme/
5、MySql的主从实时备份同步的配置,以及原理(从库读主库的binlog),读写分离
http://www.cnblogs.com/alvin_xp/p/4162249.html
6、写sql语句
7、索引的数据结构,B+树
http://www.uml.org.cn/sjjm/201107145.asp


8、事务的四个特性,以及各自的特点(原子,隔离)等等,项目怎么解决这些问题
9、数据库的锁;行锁,表锁;乐观锁,悲观锁


10、数据库事务的几种粒度


11、关系型和非关系型数据库区别
https://my.oschina.net/u/1773689/blog/364548
12、数据库的隔离级别

13、第一范式(1NF)

14、第二范式(2NF)

15、第三范式(3NF)

16、MySQL索引使用的注意事项
https://blog.csdn.net/zhuyucheng123/article/details/52957880
17、说说反模式设计
https://blog.csdn.net/shinepang/article/details/1266516
18、说说分库与分表设计
19、分库与分表带来的分布式困境与应对之策
20、说说Sql优化之道
21、MySQL遇到的死锁问题
22、存储引擎的InnoDB与MyLSAM
23、数据库索引的原理
24、为什么要用B-tree
25、聚集索引与非聚集索引的区别
26、limit20000加载很慢怎么解决
27、选择合适的分布式主键方案
28、选择合适的数据库存储方案
29、Objectld规则
30、聊聊MongoDB使用场景
31、倒排索引
32、聊聊ElasticSearch
33、Redis有哪些类型
34、Redis内部结构
35、聊聊Redis使用场景
36、Redis持久化机制
37、Redis如何实现持久化
38、Redis集群方案与实现
39、Redis为什么是单线程的
40、缓存奔溃
41、缓存降级
42、使用缓存的合理性问题



九、设计模式



1、单利模式;饱汉,饿汉。以及饿汉中的延迟加载,双重检查
https://blog.csdn.net/nsw911439370/article/details/50456231
2、工厂模式、装饰者模式、观察模式。
http://www.cnblogs.com/lyl6796910/p/4337362.html
3、工厂方法模式的优点(低耦合、高内聚、开放封闭原则)
https://blog.csdn.net/chenssy/article/details/8974868



十、算法


















1、使用随机算法产生一个数,要求把1-1000w之间这些数全部生成。(考察高效率、解决产生冲突的问题)
http://www.cnblogs.com/Geometry/archive/2011/01/25/1944582.html
2、两个有序数组的合并排序
http://blog.163.com/l_greatsea/blog/static/204986044201521303816600/
3、一个数组的排序
http://k0441258778983.iteye.com/blog/1177353
4、计算一个正整数的正平方根
5、水白了就是常见的哪些查找、排序算法以及各自的时间复杂度
https://blog.csdn.net/hguisu/article/details/7776068
6、二叉树的遍历算法
http://ocaicai.iteye.com/blog/1047397
7、DFS,BFS算法
http://www.cnblogs.com/developerY/p/3323264.html
8、比较重要的数据结构,如链表,队列,栈的基本理解及大致实现。
https://blog.csdn.net/amork/article/details/7258216
9、排序算法和时空复杂度(快排为什么不稳定,为什么你的项目还在用)
https://blog.csdn.net/hguisu/article/details/7776068
10、逆波兰计算器
https://blog.csdn.net/java2010czp/article/details/8033031
12、Hoffman编码
http://www.cnblogs.com/skywang12345/p/3706833.html
13、查找树与红黑树
http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html



十一、并发与性能调优



1、有个每秒钟5k个请求,查询手机号所属地的笔试题(记得不完整,没列出),如何设计算法?请求再多,比如5w,如何设计整个系统
2、高并发情况下,我们系统是如何支撑大量的请求的






3、集群如何同步会话状态
https://blog.csdn.net/shimiso/article/details/8978922
4、负载均衡的原理
nginx:http://blog.51cto.com/baidutech/1033718
http://blog.51cto.com/virtualadc/615836
5、如果有一个特别大的访问量,到数据库上,怎么做优化(DB设计,DBIO,SQL优化,Java优化)
http://blog.sina.com.cn/s/blog_8fb83eec0101cpg7.html
6、如果出现大面积并发,在不增加服务器基础上,如何解决服务器响应不及时问题
http://www.cnblogs.com/zengjin93/p/5569556.html
https://www.linuxidc.com/Linux/2011-12/50536.htm
7、假如你的项目出现性能瓶颈了,你觉得可能会是哪些方面,怎么解决问题。
8、如何查找造成性能瓶颈出现的位置,是哪个位置照成性能瓶颈。
https://blog.csdn.net/beijiguangyong/article/details/17684797
9、你的项目中使用过缓存机制吗?有没有用用户非本地缓存



十二、其他



1、常用的linux下的命令
http://www.jb51.net/LINUXjishu/43335.html



十三、消息队列



1、消息队列的使用场景
2、消息的重发补偿解决思路
3、消息的幂等性解决思路
4、消息的堆积解决思路
5、自己如何实现消息队列
6、如何保证消息的有序性

















































































































































































































































































































































































































发布了11 篇原创文章 · 获赞 1 · 访问量 828
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览