Java后端面试
Java基础
- Java Primitive Types
8 bits = 1 byte
2.equals和==的区别
a) 对象类型不同 equals是超类Object的方法,而==是操作符
b) 比较类型不同 equals用来检测两个对象是否相同,即两个对象的内容是否相等,==比较引用数据类型和基本数据类型时具有不同的功能。
==比较的是变量(栈)内存中存放的对象的内存地址,用来判断两个对象的地址是否相同,即是否指向同一对象,
比较的是真正意义上的指针操作,而equals用来比较的是两个对象的内容是否相同,适用于所有对象。
c) 注意:如果没有对该对象进行覆盖的话,调用的仍然是超类Object的方法,而Object中的equals方法返回的是==的判断。
-
自动拆装箱和常量池
a) Java自动将原始数据类型值转换成对应的对象,比如将int类型的变量转换成Integer类型,自动装箱时调用valueOf将原始数据类型转换成对应的对象。
b) 反之,将Integer对象装换成int类型值,这个过程叫拆箱,自动拆箱通过调用类似intValue、doubleValue这类的方法将对象转换成对应的原始数据类型。
c) Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。
i. 静态常量池:即.*class文件中的常量池,class文件中的常量池不仅仅包含字符串,还包含类、方法的信息,占用class文件绝大部分空间。
ii. 而运行时常量池:则是jvm虚拟机在完成类装载过程后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池就是指方法区中的运行时常量池。 -
接口和继承
-
Java中public、private 、protect、default的区别?
-
脏读、不可重复读、幻读
-
红黑树
-
排序算法
-
Statement和preparestatement的区别?
a) 代码的可读性和可维护性preparestatement更好。
b) Preparestatement尽最大可能提高性能。
c) 提高安全性,preparestatement防止sql注入。 -
CAS机制
-
Object类有哪些方法
Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法?1.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法
final方法,获得运行时类型。3.toString方法
该方法用得比较多,一般子类都有覆盖。4.finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。5.equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。6.hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
7.wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8.notify方法
该方法唤醒在该对象上等待的某个线程。9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
原文:http://blog.csdn.net/k678mh/article/details/8594769 -
有哪 6 种常见的线程池?什么是 Java8 的 ForkJoinPool?
https://blog.csdn.net/Rinvay_Cui/article/details/110993243 -
关于线程池的五种实现方式,七大参数,四种拒绝策略
https://blog.csdn.net/qq_45401061/article/details/107992794 -
线程创建的四种方式https://blog.csdn.net/m0_37840000/article/details/79756932
-
Spring Bean的生命周期
https://www.cnblogs.com/zrtqsk/p/3735273.html
https://zhuanlan.zhihu.com/p/108198655 -
线程有哪些状态,相互之间是如何转换的?
https://blog.csdn.net/hebeind100/article/details/84808484 -
sleep()和wait()的区别
https://blog.csdn.net/qq_40531768/article/details/89306532 -
JAVA中线程同步的方法(7种)汇总
https://www.cnblogs.com/duanxz/p/3709608.html -
Synchronized与ReentrantLock区别总结
https://blog.csdn.net/zxd8080666/article/details/83214089 -
MySQL事务隔离级别和实现原理
https://zhuanlan.zhihu.com/p/117476959 -
数据库死锁问题
https://blog.csdn.net/w174504744/article/details/8016860 -
数据库索引
https://blog.csdn.net/qq_36071795/article/details/83956068 -
网络七层模型
https://blog.csdn.net/a369189453/article/details/81193661
https://www.cnblogs.com/sunsky303/p/10647255.html -
TCP 和 UDP 的区别
https://blog.csdn.net/zhang6223284/article/details/81414149 -
Linux
https://blog.csdn.net/luansj/article/details/97272672 -
面向对象和面向过程的区别和联系
http://c.biancheng.net/view/7811.html -
面向对象三大特性-----封装、继承、多态
https://www.cnblogs.com/hulizhong/p/11227509.html -
代理模式(Spring AOP深入理解)
https://blog.csdn.net/Reallycold/article/details/82144454 -
设计模式
https://www.runoob.com/design-pattern/observer-pattern.html -
扩展类加载器加载什么
https://zhuanlan.zhihu.com/p/73359363 -
通俗易懂的双亲委派机制
https://blog.csdn.net/codeyanbao/article/details/82875064 -
Java如何打破双亲委派机制
https://www.jianshu.com/p/a03668aaf5a5 -
联合索引的最左前缀匹配原则介绍
https://blog.csdn.net/u013568373/article/details/93891531 -
什么是JMM ,volatile关键字
https://zhuanlan.zhihu.com/p/258393139 -
线程池的原理及实现
https://blog.csdn.net/hsuxu/article/details/8985931 -
CMS垃圾回收器详解
https://blog.csdn.net/zqz_zqz/article/details/70568819 -
AQS详解
https://blog.csdn.net/mulinsen77/article/details/84583716 -
ArrayList、LinkedList、HashMap如何保证多线程安全
https://blog.csdn.net/u011582840/article/details/107480825 -
Spring事务失效的2种情况
https://www.cnblogs.com/heqiyoujing/p/11221093.html -
Mybatis中#{}与${}的区别
https://blog.csdn.net/qq_44543508/article/details/97106696 -
进程和线程的区别(超详细)
https://blog.csdn.net/ThinkWon/article/details/102021274 -
进程间8种通信方式详解
https://blog.csdn.net/violet_echo_0908/article/details/51201278 -
解决哈希冲突的三种方法(拉链法、开放地址法、再散列法)
https://www.cnblogs.com/rsapaper/p/10019505.html -
红黑树的时间复杂度分析
https://blog.csdn.net/l_o_s/article/details/105703296 -
JUC线程框架深度解析
https://blog.csdn.net/androidsj/article/details/80167501 -
Java中new一个对象是一个怎样的过程?JVM中发生了什么?
https://www.cnblogs.com/gjmhome/p/11401397.html -
区分-JVM内存分区和Java内存模型(Java Memory Model)
https://blog.csdn.net/qq_41297896/article/details/89949632 -
数据库索引的实现原理
https://blog.csdn.net/kennyrose/article/details/7532032 -
B+树和B树的区别
https://www.jianshu.com/p/ace3cd6526c4 -
死锁的四个必要条件?如何避免与预防死锁?
https://www.cnblogs.com/bopo/p/9228834.html -
事务ACID理解
https://blog.csdn.net/dengjili/article/details/82468576 -
红黑树和AVL树(平衡二叉树)区别
https://blog.csdn.net/u010899985/article/details/80981053 -
Java写一个简单的Web服务器Socket实现
https://blog.csdn.net/HaHa_Sir/article/details/80594982 -
JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
https://www.cnblogs.com/aspirant/p/8662690.html -
jvm如何运行以及内存如何分配
-
如果发送一个url请求,首先url转换为文件名,此时文件名需要通过cache缓存判断处理后方可发送到服务器,那么cache缓存的数据结构应该是什么,如果使用这种数据结构时间复杂度又是多少呢,cache满的情况下应该怎么办。(涉及缓存以及数据结构相关问题)
-
讲一下MyBatis的底层实现。(涉及MyBatis的底层实现,在前面的博文中我有详细介绍,大家有兴趣的可以去查看了解哈)
-
理解事务的4种隔离级别
https://blog.csdn.net/qq_33290787/article/details/51924963 -
面向对象的四大特征
https://blog.csdn.net/qq_42429369/article/details/84929377 -
java中接口和抽象类的区别
https://blog.csdn.net/zhangquan2015/article/details/82808399 -
JAVA关键字
https://www.cnblogs.com/yan-linxi/p/7977947.html
https://www.nowcoder.com/discuss/experience?tagId=639&order=3&companyId=0&phaseId=1
https://www.nowcoder.com/ta/job-code-high
https://www.nowcoder.com/discuss/579641