一、Redis
1.redis 和 memcached 什么区别?
2.为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?
3.redis 主从复制如何实现的?
4.redis 的集群模式如何实现?
5.redis 的 key 是如何寻址的?
6.使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别?
7.知道 redis 的持久化吗?底层如何实现的?有什么优点缺点?
8.redis 过期策略都有哪些?LRU 算法知道吗?写一下 java 代码实现?
9.缓存穿透、缓存击穿、缓存雪崩解决方案?
10.在选择缓存时,什么时候选择 redis,什么时候选择 memcached
11.缓存与数据库不一致怎么办?
12.主从数据库不一致如何解决
13.Redis 常见的性能问题和解决方案
14.Redis 的数据淘汰策略有哪些?
15.Redis 当中有哪些数据结构?
16.假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?
二、京东篇(40道)
1.给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 01 概率一样。
2.10 亿个 url,每个 url 大小小于 56B,要求去重,内存 4G。
3.把一个 bst 转化成一个双向链表。
4.http 和 https 区别,https 在请求时额外的过程,https 是如何保证数据安全的。
5.IP 地址子网划分。
6.POST 和 GET 区别。
7.硬链接和软连接区别。
8.DNS 解析过程。
9.kill 用法,某个进程杀不掉的原因(进入内核态,忽略 kill 信号)。
10.linux 用过的命令。
11.系统管理命令(如查看内存使用、网络情况)。
12.管道的使用。
13.grep 的使用,一定要掌握,每次都会问在文件中查找。
14.shell 脚本。
15.find 命令。
16.awk 使用。
17.Linux 下的一些指令,(进程id), (进程 id),(进程id),?(上一条命令退出时状态),怎么查看进程,按照内存大小,CPU 占用排序等等。(大写 M 和大写 P)。
18.http 的 get 和 post 方法。
19.介绍下你所了解的 epoll。
20.数据库 sql 的了解程度。
21.项目中遇到的问题,自己咋解决的等等。
22.手写一个全排列。
23.B树和B+树。
24.介绍一下 Hash,怎么解决冲突。
25.进程间的通信,共享内存方式的优缺点。
26.说下你平时看的一些技术博客,书籍。
27.linux 下的一些指令。
28.工作中你觉得最不爽的事情是什么。
29.说下你的优缺点。
30.有没有想过去创业公司。
31.写个 strcpy 函数。
32.说说你自己的性格。
33.给你一个系统(面试官好像是无人车部门的),后台的逻辑已经实现了,但是前端加载很慢,怎么检测。
34.以后可能要学习很多新技术,你怎么看。
35.项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚)。
36.系统的量级、pv、uv 等。
37.应对高并发的解决办法(分布式)。
38.在项目中主要负责了哪些工作。
39.nginx 的负载均衡。
40.分布式缓存的一致性,服务器如何扩容(哈希环)。
三、多线程
1.现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行?
2.在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
3.在 java 中 wait 和 sleep 方法的不同?
4.用 Java 实现阻塞队列
5.用 Java 写代码来解决生产者——消费者问题
6.用 Java 编程一个会导致死锁的程序,你将怎么解决?
7.什么是原子操作,Java 中的原子操作是什么?
8.Java 中的 volatile 关键是什么作用?怎样使用它?在 Java 中它跟 synchronized 方法有什么不同?
9.什么是竞争条件?你怎样发现和解决竞争?
10.你将如何使用 threaddump?你将如何分析 Thread dump?
11.Java 中你怎样唤醒一个阻塞的线程?
12.为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
13.在 Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
14.什么是不可变对象,它对写并发应用有什么帮助?
15.你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?
16.使用synchronized修饰静态方法和非静态方法有什么区别。
17.简述ConcurrentLinkedQueue和LinkedBlockingQueue的用处和不同之处。
18.导致线程死锁的原因?
19.怎么解除线程死锁。
20.非常多个线程(可能是不同机器),相互之间需要等待协调,才能完成某种工作,问怎么设计这种协调方案。
21.用过读写锁吗,原理是什么,一般在什么场景下用。
22.开启多个线程,如果保证顺序执行,有哪几种实现方式,或者如何保证多个线程都执行完再拿到结果。
23.延迟队列的实现方式,delayQueue和时间轮算法的异同。