面试题(java,java web,网络,操作系统,数据库,算法,设计应用,其他)

1.基础知识

1.1.常用类与语法

(1)基本类型之间的类型转化、取值范围,向上转型与向下转型;
(2)接口与类,类只能单继承,接口可以多继承
(3)作用域public, private, protected的区别
(4)内部类,外部类(内部类可以引用它的包含类(外部类)的成员)
(5)匿名内部类、静态类
(6)什么是 异常链。异常,finally执行情况

(7)自己创建异常类的时候应该注意什么
(8)Switch:(int系列,enum,string)
(9)String与StringBuffer的区别
(10)Object有哪些公用方法(tostring,hashcode,equals,finalize,wait,notify,clone)
(11)为什么 Java 中的 String 是不可变的(Immutable)
(12)如何构建不可变的类结构?关键点在哪里
(13)如果main方法被声明为private会怎样(编译正常,运行抛错,找不到main函数)
(14)深拷贝和浅拷贝区别
答:
浅拷贝:被拷贝对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。比如举个例子,一个类A中有另外一个类B类型的变量。在A重写clone函数调用super.clone的时候,创建的新对象和原来对象中的类B类型的变量是同一个,他们指向了同一个B的类型变量。如果在A中对B的变量做了修改,在新的拷贝出来的对象中B的变量也会被同样的修改。
请记住,直接调用super.clone实现的clone方法全部都是浅拷贝。
深拷贝:被拷贝对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
通俗的说,如果说浅拷贝,开始的时候是两条线,如果在最后有一个其他类的变量,那么这两条线最后会合二为一,共同指向这变量,都能对他进行操作。深拷贝则是完完全全的两条线,互不干涉,因为他已经把所有的内部中的变量的对象全都复制一遍了。
深拷贝在代码中,需要在clone方法中多书写调用这个类中其他类的变量的clone函数。
另外,关于串行化拷贝:在框架中,有的时候我们发现其中并没有重写clone方法,那么我们在需要拷贝一个对象的时候是如何去操作的呢?答案是我们经常会使用串行化方法,实现Serializable接口。去寻找其他的方法来替代深拷贝也是无可奈何的事情,如果采用传统的深拷贝,难道你拷贝一个对象的时候向其中追无数层来拷贝完所有的对象变量么?先不谈这么做的时间消耗,仅仅是写这样的代码都会让人望而生畏。串行化深拷贝就是这样一个相对简单的方法。把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序师圈子里又非常形象地称为“冷冻”或者“腌咸菜(picking)”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做 “解冻”或者“回鲜(depicking)”过程。应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝,Java咸菜还可以回鲜。
上面是网上的专业解释,我也不在这里班门弄斧了。在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读出来(把咸菜回鲜),便可以重建对象。
(15)Java四种引用
(1)泛型,泛型的存在是用来解决什么问题
(16)Serializable 与 Externalizable 的区别。Java 序列化及注意事项。
(17)Transient关键字
(18)Final关键字:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
(19)super

1.2.集合

(1)Java集合框架

(2)ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机。
(3)写一段代码在遍历 ArrayList 时移除一个元素(集合快速失败与安全失败,ArrayList的迭代器为单向的,LinkedList的迭代器是双向的)
(4)Priorityqueue的实现(小根堆,非线程安全,使用数组存储数据)
(5)BlockingQueue接口(实现类:ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue等)
(6)简述 ConcurrentLinkedQueue LinkedBlockingQueue 的用处和不同之处
(7)hashmap的实现、treeMap的实现,区别,关于map的扩容。Java的hashmap,头插法和尾插法有什么区别
(8)concurrenthashmap1.8的改动,并发度,实现
(9)WeakHashMap 是怎么工作
(10)EnumSet

1.3 IO

(1)IO流架构,分类,几种常用的类及使用场景
(2)BIO和NIO的区别
(3)ByteBuffer 与 StringBuffer
(4)NIO常用类的使用流程
(5)selector,seletedkey,channel等类的使用流程
(6)单线程处理连接,多线程处理IO请求的好处
(7)NIO的类库或框架
(8)直接缓冲区与非直接缓冲器有什么区别?
(9)怎么读写 ByteBuffer?ByteBuffer 中的字节序是什么
(10)什么是 JdbcTemplate
(11)通过 JDBC 连接数据库有哪几种方式
(12)写一段 JDBC 连Oracle的程序,并实现数据查询
(13)数据连接池的工作机制
(14)JDBC 中如何进行事务处理

1.4 并发

1.4.1.并发-调度、线程状态相关

(1)重排序,内存屏障,happen-before,主内存,工作内存
(2)happen-before原则
(3)如何强制启动一个线程
(4)Java线程调度方式
答:时间片抢占式线程调度+线程优先级机制
(5)Java线程池,创建参数的意义。线程池线程增长模型、任务拒绝策略。4种线程池的各种用途(创建的特点)(FixThreadPool,SingleThreadPool,CachedThreadPool,ScheduledThreadPool)
(6)高并发情况下,如何使用线程池,用哪个,问了一下线程结束要多久,是否在下一个线程结束前完成
(7)线程池的关闭方式有几种,各自的区别是什么(shutdown,shutdownnow)
答:shutdown:
调用之后不允许继续往线程池内继续添加线程;
线程池的状态变为SHUTDOWN状态;
所有在调用shutdown()方法之前提交到ExecutorSrvice的任务都会执行;
一旦所有线程结束执行当前任务,ExecutorService才会真正关闭。
shutdownNow():
该方法返回尚未执行的 task 的 List;
线程池的状态变为STOP状态;
阻止所有正在等待启动的任务, 并且停止当前正在执行的任务;
简单点来说,就是:
shutdown()调用后,不可以再 submit 新的 task,已经 submit 的将继续执行;shutdownNow()调用后,试图停止当前正在执行的 task,并返回尚未执行的 task 的 list
(8)线程池中submit() 和 execute()方法有什么区别?
Void execute(Runnable x):没有返回值。可以执行任务,但无法判断任务是否成功完成。——实现Runnable接口。
Future submit(Callable task)【该函数有多种重载形式,submit(Runnable task)和)submit(Runnable task, T result)】:返回一个future。可以用这个future来判断任务是否成功完成。——实现Callable接口
(9)sleep方法和wait方法
答:
sleep()释放CPU执行权,但不释放同步锁;属于Thread的方法。
wait()释放CPU执行权,也释放同步锁,使得其他线程可以使用同步控制块或者方法。属于object的方法。
(10)说一下线程的状态和状态转换

(11)线程状态,BLOCKED 和 WAITING 有什么区别
(12)什么是线程组,为什么在Java中不推荐使用

1.4.2 并发-通信与锁

(1)Lock 与 Synchronized 的区别?Lock 接口比 synchronized 块的优势是什么
(2)ReadWriteLock是什么
(3)什么是多线程环境下的伪共享(false sharing)
(4)线程通信方式、什么可以避免并发问题
(5)怎么检测一个线程是否拥有锁
(6)ThreadLocal原理
答:Thread类有成员变量ThreadLocal.ThreadLocalMap threadLocals,用于存储本线程相关的ThreadLocal对象。ThreadLocal.ThredLocalMap中的存储是是<ThreadLocal,Value>键值对(key只能是ThreadLocal类型)。初始时,在Thread里面,threadLocals为空,当通过ThreadLocal变量调用get()方法或者set()方法,就会对Thread类中的threadLocals进行初始化。然后在当前线程里面,如果要使用副本变量,就可以通过get方法在threadLocals里面查找。
(7)volatile关键字有什么用,什么场景下可以使用 volatile 替换 synchronized
(8)能创建 volatile 数组吗
(9)悲观锁和乐观锁,说一下Java怎么实现的。如何避免ABA问题
(10)同步块内的线程抛出异常会发生什么
(11)为什么object的wait和notify必须在同步块中使用,不在同步块使用会报错么,编译报错还是运行报错
答:在运行期抛出java.lang.IllegalMonitorStateException异常。wait/notify是线程之间的通信,他们存在竞态,我们必须保证在满足条件的情况下才进行wait。换句话说,如果不加锁的话,那么wait被调用的时候可能wait的条件已经不满足了(如上述)
(12)CyclicBarrier类、CountDownLatch类、Semaphore类
答:CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。
Semaphore类其实和锁有点类似,它一般用于控制对某组资源的访问。如若一个工厂有5台机器,但是有8个工人,一台机器同时只能被一个工人使用,只有使用完了,其他工人才能继续使用。那么我们就可以通过Semaphore来实现
(13)如何实现分布式锁
(14)有哪些无锁数据结构,他们实现的原理是什么
(15)偏向锁

1.4.3 并发-场景编程关

(1)并发juc(java.util.concurrent)了解么,有哪些线程安全的list
(2)设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
(3)用Java写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出
(4)wait-notify 写一段代码来解决生产者-消费者问题
(5)多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现(可用思路:cyclicbarrier或信号量)
(6)有T1,T2,T3三个线程,怎么确保它们按顺序执行?怎样保证T2在T1执行完后执行,T3在T2执行完后执行

1.5.JVM

(1)JVM 内存结构
(2)JRE、JDK、JVM 及 JIT 之间有什么不同
(3)Java中的垃圾回收、gc算法、那些gc root对象,gc root可达性分析、JVM内存分区
(4)串行(serial)收集器和吞吐量(throughput)收集器的区别
(5)Serial 与 Parallel GC之间的不同
(6)CMS 收集器 与 G1 收集器的特点与区别
(7)Gc那些过程是stop the world
(8)jvm常用的参数
(9)OOM和内存泄漏的例子,为什么有GC还会出现内存泄漏和内存溢出呢、各个区那些情况会泄漏
(10)如何建立可预测的gc模型,减少java程序时间抖动
(11)Java类加载模型。自定义类加载器怎么实现,其中哪个方法走双亲委派模型,哪个不走,不走的话怎么加载类(实现findclass方法,一般用defineclass加载外部类),如何才能不走双亲委派。(重写loadclass方法)
(12)Java线程转储(Thread Dump),如何得到它
1.6.其他
(2)什么是反射,反射的作用是什么,反射是如何实现的、反射机制的优缺点、哪里用到反射机制
(3)怎么使用反射:如何通过反射获取和设置对象私有字段的值、通过反射调用对象的方法、反射创建类实例的三种方式是什么
(4)反射中 Class.forName 和 ClassLoader 区别
(5)数值提升是什么
(6)动态代理和静态代理,实现方式
(7)正则表达式

2.网络

2.1.TCP/IP协议

(1)网络分层模型(5层、7层)
(2)HTTP协议、tcp、socket的有什么区别
(3)TCP和UDP的区别,具体使用场景呢。
(4)TCP四次挥手讲一下过程,最后一次ack如果客户端没收到怎么办。
(5)http协议头部
(6)get和post的区别讲一下,底层的实现有区别么,都是基于TCP,那么如何限制get的url长度,在哪一层限制的。
答:浏览器和服务器对url长度都有限制。如IE超过这个限制,则自动截断;apache能接受url长度限制为8192字符,一般返回HTTP code 414(URI超长)
(7)http1.0和2.0的区别
(8)web请求的过程,讲了浏览器到http服务器的过程,再讲了mvc的请求处理过程。
(9)传输层常见编程协议有哪些?并说出各自的特点
(10)HTTPS 的加密方式是什么,讲讲整个加密解密流程
(11)HTTPS和HTTP的区别
(12)HTTP连接池实现原理
(13)HTTP集群方案
(14)浏览器发起http请求过程,越详细越好
(15)DNS解析过程及DNS服务器配置

2.2.Java Web

2.2.1.Servlet

(1)Servlet 的生命周期及其相关的方法
(2)
2.2.2.Spring
(1)Spring,Spring MVC架构,基本处理运行流程;
(2)Spring的ioc和aop思想,实现
(3)AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)
(4)Spring的bean如果要在实例化过程中修改其某一个成员变量,应该怎么做呢。不通过构造方法,并且AOP也并不能实现。
(5)Spring用到了哪些设计模式
(6)Spring的interceptor和filter有什么区别

2.2.3.持久层

(1)持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些
(1)什么是 N+1 难题
答:在orm框架中,比如hibernate和mybatis都可以设置关联对象,比如user对象关联dept。假如查询出某些user,那么需要做n次查询dept(一个特定的user会单独查询该user关联的dept),总共需要发出1(user)+N(dept)数据库查询,而不是使用join一次查询出来。
如何避免:为了解决以上问题,Hibernate提供了其他两种检索策略:延迟检索策略和迫切左外连接检索策略。延迟检索策略能避免多余加载应用程序不需要访问的关联对象,迫切左外连接检索策略则充分利用了SQL的外连接查询功能,能够减少select语句的数目。

2.2.4.性能

(1)服务器如何负载均衡,有哪些算法,哪个比较好
(2)什么是缓存穿透?如何避免
答:一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。那如何避免?
对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤
(3)什么是缓存雪崩?如何避免?
答:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
(4)MESI 协议(缓存一致性)
(5)如何提升QPS和吞吐量
(6)网站性能优化如何优化

2.3.服务器

(1)Web Server、Web Container 与 Application Server 的区别是什么
(2)Tomcat 结构
(3)Tomcat的类加载器
(4)Tomcat的基本原理,了解的是哪一部分,基本架构,connector和container
(5)使用什么命令来确定是否有 Tomcat 实例运行在机器上
(6)Nginx、lighttpd、Apache三大主流 Web服务器的区别

2.4.Web编程

(1)在Web应用开发过程中经常遇到输出某种编码的字符,如从GBK到ISO8859-1等,如何输出一个某种编码的字符串
(2)用Java Socket编程,读服务器几个字符,再写入本地显示
(3)描述 Cookie 和 Session 的作用,区别和各自的应用范围,Session工作原理
(4) Java领域的 Web Service 框架
(5)什么是 restful,讲讲你理解的 restful
(6)网络应用的模式及其特点
(7)请你谈谈SSH整合
(8)socket 选项 TCP NO DELAY 是指什么

2.5.浏览器、网络应用

(1)CDN
(2)避免浏览器缓存

3.算法、程序

3.1.图

(1)图算法:深度优先遍历、广度优先遍历、单源最短路径(迪杰斯特拉算法)、多源最短路径(弗洛伊德算法)、环判定算法(拓扑排序)、关键路径算法
(2)根据图构造最小生成树
(3)有向图判定是否存在环

3.2.树

(1)树算法:遍历算法、小根堆构建算法、查找算法
(2)完全二叉树判断
(3)平衡二叉树
(4)红黑树
(5)二叉树中最长的一条路径
(6)小根堆建堆过程
(7)排序树的插入新节点

3.3.链表

(1)单链表判环

3.4.排序、查找、其他

(1)排序算法、适用场景、复杂度、稳定性。归并算法、快排算法、堆排序、冒泡的实现(递归、非递归)
(2)查找算法(这半查找,树上查找)
(3)找出第K大的数
(4)计算两个日期之间的差距
(5)打印出一个字符串的所有排列
(6)约瑟芬环游戏
(7)一致性哈希算法

3.5.字符串

(1)给定 2 个包含单词列表(每行一个)的文件,编程列出交集
(2)编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”
(3)倒转句子中的单词(StringBuffer.reverse())
(4)写出一个正则表达式来判断一个字符串是否是一个数字、IP地址
(5)有这样一个时间字符串:2008-8-8 20:08:08 , 请编写能够匹配它的正则表达式,并编写Java代码将日期后面的时分秒提取出来,即:20:08:08
(6)随机产生20个不能重复的字符并排序

3.6.数字

(1)找出4字节整数的中位数
(2)一个10000以下的数组,内存够。里面只有1,2,3。排下序
(3)1到N的所有数字,按照字典序打印,怎么做
答:可以先排序再打印,快排或归并排序复杂度为O(nlogn)。或者用树存储,变成树的深度优先遍历,复杂度为O(n)
(4)计算指定数字的阶乘
(5)一个排好序的数组,找出两数之和为m的所有组合
(6)将一个正整数分解质因数。例如:输入90,打印出90=233*5。
(7)有 1 亿个数字,其中有 2 个是重复的,快速找到它,时间和空间要最优
(8)2 亿个随机生成的无序整数,找出中间大小的值
(9)10 亿个数字里里面找最小的 10 个
(10)1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + … + 9 + 1 + 0 + 1 + 1
(11)判断101-200之间有多少个素数,并输出所有素数
(12)用最有效率的方法算出2乘以17等于多少
(13)一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数
(14)假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。找出出现两次的数
答:用和或异或运行做
(15)原地交换两个变量的值
(16)给定一个包含 N 个整数的数组,找出丢失的整数
(17)求100-1000内质数的和
(18)求s=a+a+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
(19)求出1到100的和
(20)算出1到40的质数,放进数组里
(21)删除第[9]个数,再显示删除后的第[9]个
(22)有3n+1个数字,其中3n个中是重复的,只有1个是不重复的,怎么找出来。
(23)有一组数1.1.2.3.5.8.13.21.34。写出程序随便输入一个数就能给出和前一组数字同规律的头5个数

4.数据库

4.1.数据库引擎

(1)MySQL的引擎有几种,有什么区别,使用场景
(2)innodb的读写参数优化
(3)引擎支持的锁

4.2.索引

(1)数据的索引有什么用,分几类,怎么实现
(2)索引什么时候会失效变成全表扫描
(3)使用索引的优缺点、怎么优化
(4)mysql的索引讲一下,一级和二级索引的区别,什么时候可以不用查一级索引
(5)MySQL的索引,B+树性质
答:
索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引。MyISAM和InnoDB存储引擎只支持B+索引,也就是说默认使用B+,不能够更换;MEMORY/HEAP存储引擎:支持HASH和BTREE索引。按照索引与数据的存储方式又可分为聚簇索引(一级索引)和非聚簇索引(二级索引)。另外,按照索引的约束限制,又可分为:普通索引、唯一索引、全文索引、复合索引。
关于B树:
B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;
树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;
B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

4.3.事务

(1)数据库的事务的特性、等级、怎么实现
答:ACID(atomic,consitence,isolation,duration),日志
(2)分布式事务的原理,优缺点,如何使用分布式事务?
(3)数据库的隔离性如何保证,使用悲观锁和乐观锁有何区别。MVCC的设计目的是什么,怎么使用版本号判断数据的可见性。

4.4.日志、备份、分布式、其他

(1)redo和undo日志的作用,有什么区别?
(2) binlog的几种格式
(3)数据库的备份和恢复怎么实现的,主从复制怎么做的,什么时候会出现数据不一致,如何解决
(4)MySQL的复制原理以及流程
(5)分布式数据库
(6)慢查询日志
(7)主从一致性校验
(8)emoji表情

4.5.SQL、优化、设计

(1)查询最新的10条数据
(2)union all和union
(3)MySQL有哪几种join方式,底层原理是什么
(4)mysql大表数据查询,怎么优化,分表,分库。
(5)数据库正则化
(6)sql优化的方式
(7)MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义

5.操作系统

5.1.进程线程

(1)线程和进程的区别
(2)僵尸进程和孤儿进程
(3)管道的类型、进程的通信方式的优缺点
(4)CPU的执行方式
(5)Cgroup
(6)如何分析Thread dump

5.2.内存

(1)虚拟内存是什么
(2)Linux的内存结构、Linux的内存管理算法(分页、缺页中断、页管理分配算法)

5.3.IO、文件系统、磁盘管理

(1)Linux 下 IO 模型有几种,各自的含义是什么。
(2)proc文件系统
(3)Linux的文件系统(inode,具体的文件系统如ext3,/proc文件系统)
(4)Linux的磁盘管理、磁盘分区的作用

5.4.网络

(1)Select,poll,epoll怎么使用、优缺点

5.5.命令、操作、配置

(1)用一行命令输出正在运行的 Java 进程
(2)平时用到哪些 Linux 命令
(3)Linux 系统下你关注过哪些内核参数,说说你知道的
(4)Linux 下用一行命令查看文件的最后五行
(5)死锁是怎么产生的
(6)查看进程状态ps,查看cpu状态 top。查看占用端口的进程号netstat grep
(7)分析dump文件
(8)Linux大文件怎么查某一行的内容。

5.6.其他

(1)操作系统的死锁必要条件,如何避免死锁

6.开源软件、工具

6.1.Hadoop MapReduce

(1)MapReduce流程、combiner,paritition组件的作用
(2)Hadoop分发任务时,有个job失败了,hadoop会怎么处理
(3)hadoop分发任务,如果有一个节点特别慢拉慢了整体速度怎么办
(4)hadoop答得很烂。问了我两个10g文件比较,2g内存,重复率很高,筛选出不同的内容

6.2.Zookeeper分布式配置、管理

(1)分布式系统的全局id如何实现。用zookeeper如何实现的呢?
(2)分布式锁的方案,redis和zookeeper那个好,如果是集群部署,高并发情况下哪个性能更好。
(3)怎么进行服务注册发现,Zookeeper实现具体说说
(4)分布式的paxos和raft算法
(5)什么是 zab 协议

6.3.存储

(1)redis这种nosql和mysql有什么区别,讲了一遍redis
(2)Redis内存数据库的内存指的是共享内存么
(3)Redis的持久化方式
(4)Redis说一下为什么是单线程,这样效率会不会很慢
(5)Redis的IO请求模型,是不是IO多路复用呢
答:是。为什么 Redis 中要使用 I/O 多路复用这种技术呢?
首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的, 但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,所有,Redis是用的I/O 多路复用
(6)Redis怎么部署集群
(7)kafka了解么,了解哪些消息队列

6.4.其他

(1)中间件,dubbo,rocketmq,mycat等
(2)dubbo的基本架构、dubbo的负载均衡怎么做、dubbo的服务容错怎么做,怎么知道服务器宕机、dubbo中的rpc如何实现、dubbo的服务注册与发现。
(3)私有云,docker和k8s。docker和虚拟机讲一下。Docker的硬件和命名空间的隔离机制(namespace,cggoups)
(4)怎么避免DDOS攻击请求打到少数机器

7.设计、应用、其他

7.1.设计模式、理念

(1)里氏替换原则
(2)SOLID 原则
(3)reactor 模型
(4)反模式(Anti-Patterns)
(5)大型网站在架构上应当考虑哪些问题
(6)编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用
单例模式、适配器模式、代理模式、装饰器模式、组合模式、享元模式、访问者模式、模板方法模式是什么?什么时候使用?之前有什么区别,哪些设计模式可以增加系统的可扩展性
(7)开闭原则的设计模式

7.2.应用程序设计

7.2.1.并发

(1)秒杀系统的架构设计
(2)如何设计建立和保持 100w 的长连接
(3)如何设计一套高并发支付方案,架构如何设计
(4)如何实现一个秒杀系统,保证只有几位用户能买到某件商品。
(5)设计一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新
(6)实现一个并发安全的链表
(7)12306网站的订票系统如何实现,如何保证不会票不被超卖
(8)高并发下,如何做到安全的修改同一行数据
(9)如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能
(1)请思考一个方案,实现分布式环境下的 countDownLatch
(10)假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到
(11)一致性等级

7.2.2.数据处理

(1)倒排索引
(2)亿级ip地址过滤
(3)十亿个数的集合和10w个数的集合,如何求它们的交集集合的数字不重复。
(4)十亿和数找到前100个最大的,堆排序,怎么实现,怎么调整。
(5)新浪微博是如何实现把微博推给订阅者
(6)系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)
(7)怎么获取一个文件中单词出现的最高频率
(8)Google是如何在一秒内把搜索结果返回给用户
(9)找一个无序数组的中位数
(10)云音乐的歌单列表,调整顺序后需要保存到数据库,如何让每次保存的数据量最小

7.2.3.其他

(1)布隆过滤器了解么,讲了ip地址过滤的布隆过滤器实现
(2)自己实现rpc应该怎么做
(3)分布式服务,那么你怎么理解分布式服务
(4)实现一个电梯模拟器
(5)你是如何测试一个应用的?知道哪些测试框架
(6)如何实现关键字输入提示
(7)设计模式:单例模式、适配器模式、组合模式、监听者、装饰器模式怎么实现么,有什么用
(8)一致性 Hash 算法
(9)如何把优化递归的代码(使用循环或栈)
(10)设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现
(11)如果AB两个系统互相依赖,如何解除依
(12)如果有人恶意创建非法连接,怎么解决
(13)如何在基于Java的Web项目中实现文件上传和下载
(14)如何搭建一个高可用系统
(15)如何启动时不需输入用户名与密码
(16)请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存
(17)如何设计一个购物车?想想淘宝的购物车如何实现的
(18)单例模式的双检锁,单例模式实现
(19)设计一个LRU的缓存,需要完成超时淘汰和LRU淘汰。

7.3.发布、管理等其他

(1)Maven 和 ANT 有什么区别
(2)版本管理工具?分支(Branch)与标签(Tag)之间的区别在哪里
(3)常用的重构技巧

8.项目、个人问题

(1)项目中做了什么,难点呢
(2)项目中学到最多的东西
(3)平时看什么书,怎么学习、写什么博客兴趣爱好
(4)三年到五年的职业规划
(5)意向公司和城市
(6)经历和收获
(7)最大的困难
(8)为什么换公司
(9)你的缺点和优点
(10)你觉得你比其他人优秀的地方说三个
(11)为什么想来我们部门
(12)最近看什么书,印象最深刻的是什么
(13)在你的职业生涯中,算得上最困难的技术挑战是什么

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值