Java面试,我应该准备哪些知识呢?

又是新的一年了,去年的绩效也出来了,总是几家欢乐几家愁。绩效好的机会多的老板信任的,在新的一年会更加有干劲。绩效不好的,老板不看好的,可能新的一年就会有离职的冲动。 如果你有离职的想法,那么还是需要花一些时间准备一下,毕竟现在外面好的互联网公司对程序员的要求还是蛮高的,需要你有各种能耐。

这篇文章主要是介绍一下我自己从毕业到现在碰到的一些面试题。

JAVA 基础

int 占用几个字节

答案: 4个

不用第三个变量,如何交换两个变量的值

public class TestSwitchVar {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        a = a + b;
        b = a - b;
        a = a - b;
        System.out.println(a);
        System.out.println(b);
    }
}1
2
3
4
5
6
7
8
9
10
11

JAVA动态代理使用什么技术实现的

答案: 反射

JAVA类加载器的原理

答案: 学习Java类加载器

集合类

HashSet的add方法是如何实现的,如何去重的;

答案: HashSet的底层是使用HashMap来实现的,调用add方法的时候,底层也是用HashMap的put方法来实现的。HashSet之所以具备去重的能力,也是因为HashMap的put方法中,如果发现key已经存在了,会覆盖key对应的值,但是对于HashSet来说,还是原来那个key。也就是说Key set并没有任何变动。

HashMap的实现原理;

答案:

看我之前写的HashMap的put和get方法原理和 HashMap扩容以及HashMap多线程下发生死循环的原因

JDK 1.7 ConcurrentHashMap的实现原理

答案:

ConcurrentHashMap学习

ConcurrentHashMap在JDK 1.8的实现跟JDK7有什么不同; ArrayList是线程安全的吗

答案:

线程不安全的ArrayList

CopyOnWriteArrayList是如何实现线程安全的;

答案:

CopyOnWriteArrayList的使用场景貌似很少很少

NIO

描述JAVA NIO的工作原理,相比JAVA IO有什么优势

答案:

学习NIO

线程和并发

sleep方法和wait方法有什么区别

答案: 1、wait方法释放锁,sleep方法不释放锁 2、wait方法必须在同步代码块里,比如synchronize关键里,但是sleep方法没有这限制

wait()方法调用后,到底发生了什么事情

答案:

Object wait方法

除了使用synchronized关键字之外,还有其他同步的做法吗

答案: volatile关键字 lock()和unlock()

什么是daemon 线程 如果有多个线程要并发操作一个文件,如何做到线程安全,请写出伪代码 什么是线程安全 volatile关键字有什么用

答案:

浅析volatile关键字

悲观锁和乐观锁的区别 有哪些并发模型,用过哪些并发模型,选择这些模型有什么依据(比如说Master-Worker模式) 用过ThreadLocal吗?什么场景下用过 线程有哪几种状态 CAS的原理

答案:

学习一下CAS

写一个发生死锁的JAVA代码,并描述一下如何避免死锁? 线程要进入阻塞状态,操作系统是如何操作的(涉及到用户态和内核态) 谈谈如何进行”锁”的优化 什么叫可重入锁

JVM

垃圾回收算法有哪几种?各种有什么特点

答案:

JVM专栏

什么时候触发young gc,什么时候触发full gc

答案: 新生代中的Eden满了就就行young gc,老年代满了,就进行full gc。

如果JAVA进程突然挂掉了,怎么查看挂掉的原因

答案: java进程挂掉后,会产生core dump 文件,可以使用jstack 命令输出线程堆栈信息。


 

JVM监控工具有哪些,各有什么用途,简单介绍一下用法 描述一下JVM的内存模型 怎么知道是哪行代码导致系统CPU高

mysql

使用什么关键字来分析SQL的性能 建立索引有什么注意点

Mysql 索引知识点

什么是覆盖索引

Mysql 索引知识点

什么情况下,需要建立复合索引

Mysql 索引知识点

索引原理是什么,底层用什么数据结构

Mysql B+树学习

应用的数据库是如何做容灾的 如何做到动态增加业务字段,而代码无需改动 行锁和表锁的区别,innodb引擎用的是哪种锁 innodb myisam的区别

索引知识点

mysql批量插入数据的时候,怎么优化 你参与的项目,有做分库处理吗,路由到分库的规则是什么?

nosql

用过哪些NoSQL数据库,简单介绍一下

缓存

memcache的原理 memcache和redis的区别 系统有用本地缓存吗?是如何做命中率的统计的 选择堆外缓存和堆内缓存的依据是什么 从堆外缓存获取数据需要反序列化,有办法避免吗?说一下思路即可

算法

一致性hash算法的原理 使用JAVA实现快速排序 使用JAVA实现二分查找 使用JAVA进行二叉树的遍历(前序/中序/后序,写一种即可) 红黑树的原理

HTTP

如何用JAVA代码解析一个HTTP请求,描述一下实现的思路 HTTP 1.0 HTTP1.1 HTTP 2.0的区别

答案:

HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值