架构师

您现在的位置是:首页 > 工作面试 > 企业面试

企业面试

南京瑞易智能科技有限公司:面试题题库,涵盖初中高级工程师

架构师小跟班 2019-07-28企业面试
一.java 基础八种基本数据类型的大小,以及他们的封装类引用数据类型Switch能否用string做参数equals与==的区别*自动装箱,常量池Object有哪些公用方法Java的四种引用,强弱软虚,用


一.java 基础

八种基本数据类型的大小,以及他们的封装类

引用数据类型

Switch能否用string做参数

equals与==的区别*

自动装箱,常量池

Object有哪些公用方法

Java的四种引用,强弱软虚,用到的场景

Hashcode的作用*

HashMap的hashcode的作用*

为什么重载hashCode方法?*

ArrayList、LinkedList、Vector的区别*

String、StringBuffer与StringBuilder的区别*

Map、Set、List、Queue、Stack的特点与用法。

JDK7与JDK8中HashMap的实现*

HashMap和ConcurrentHashMap的区别,HashMap的底层源码*

ConcurrentHashMap能完全替代HashTable吗?

为什么HashMap是线程不安全的*

多并发情况下HashMap是否还会产生死循环*

TreeMap、HashMap、LindedHashMap的区别*

Collection包结构,与Collections的区别

try?catch?finally,try里有return,finally还执行么

Excption与Error包结构,OOM你遇到过哪些情况,SOF你遇到过哪些情况

Java(OOP)面向对象的三个特征与含义

Override和Overload的含义去区别

Interface与abstract类的区别

Static?class?与non?static?class的区别

foreach与正常for循环效率对比

Java?IO与NIO*

java反射的作用与原理*

泛型常用特点

解析XML的几种方式的原理与特点:DOM、SAX

Java1.7与1.8,1.9,10 新特性

设计模式:单例、工厂、适配器、责任链、观察者等等

JNI的使用*

AOP是什么*

OOP是什么

AOP与OOP的区别*

二.多线程

什么是线程?

什么是线程安全和线程不安全?

什么是自旋锁?*

什么是Java内存模型?*

什么是CAS?*

什么是乐观锁和悲观锁?

什么是AQS?*

什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?

什么是Executors框架?*

什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?*

什么是Callable和Future?*

什么是FutureTask?*

什么是同步容器和并发容器的实现?*

什么是多线程?优缺点?

什么是多线程的上下文切换?*

ThreadLocal的设计理念与作用?*(需要在深入下源代码原理)

ThreadPool(线程池)用法与优势?

Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。

synchronized和ReentrantLock的区别?

Semaphore有什么作用?*

Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优势?

Hashtable的size()方法中明明只有一条语句”return count”,为什么还要做同步?

ConcurrentHashMap的并发度是什么?*

ReentrantReadWriteLock读写锁的使用?

CyclicBarrier和CountDownLatch的用法及区别?

LockSupport工具?

Condition接口及其实现原理?*

Fork/Join框架的理解?*

wait()和sleep()的区别?*

线程的五个状态(五种状态,创建、就绪、运行、阻塞和死亡)?*

start()方法和run()方法的区别?

Runnable接口和Callable接口的区别?

Java中如何获取到线程dump文件?

线程和进程有什么区别?*

线程实现的方式有几种(四种)?*

高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?*

如果你提交任务时,线程池队列已满,这时会发生什么?

锁的等级:方法锁、对象锁、类锁?

如果同步块内的线程抛出异常会发生什么?

并发编程(concurrency)并行编程(parallellism)有什么区别?*

如何保证多线程下 i++ 结果正确?

一个线程如果出现了运行时异常会怎么样?

如何在两个线程之间共享数据?*

生产者消费者模型的作用是什么?*

怎么唤醒一个阻塞的线程?*

Java中用到的线程调度算法是什么*

单例模式的线程安全性?

线程类的构造方法、静态块是被哪个线程调用的?

同步方法和同步块,哪个是更好的选择?

如何检测死锁?怎么预防死锁?*

三.设计模式

装饰器模式

工厂模式

单例模式*

观察者模式*

动态代理模式*

模板模式

策略模式

四.JVM

内存模型以及分区,需要详细到每个区放什么?*

对象创建方法,对象的内存分配,对象的访问定位。*

GC的两种判定方法:引用计数与引用链。*

GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?*

GC收集器有哪些?CMS收集器与G1收集器的特点。

Minor?GC与Full?GC分别在什么时候发生?*

几种常用的内存调试工具的解释:jmap、jstack、jconsole。

类加载的五个过程:加载、验证、准备、解析、初始化。

双亲委派模型:Bootstrap?ClassLoader、Extension?ClassLoader、ApplicationClassLoader。*

分派:静态分派与动态分派。

五.数据结构与算法

链表与数组的解释。

队列和栈,出栈与入栈。

链表的删除、插入、反向。

字符串操作。

Hash表的hash函数,冲突解决方法有哪些。

各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。

快排的partition函数与归并的Merge函数。

对冒泡与快排的改进。

二分查找,与变种二分查找。

二叉树、B+树、AVL树、红黑树、哈夫曼树。

二叉树的前中后续遍历:递归与非递归写法,层序遍历算法。

图的BFS与DFS算法,最小生成树prim算法与最短路径Dijkstra算法。

KMP算法。

排列组合问题。

动态规划、贪心算法、分治算法。(一般不会问到)

大数据处理:类似10亿条数据找出最大的1000个数.........等等

算法的话其实是个重点,因为最后都是要你写代码,所以算法还是需要花不少时间准备,这里有太多算法题,写不全,我的建议是没事多在OJ上刷刷题(牛客网、leetcode等),剑指offer上的算法要能理解并自己写出来,编程之美也推荐看一看

六.数据库

事务四大特性(ACID)原子性、一致性、隔离性、持久性*

数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别*

innodb和myisam存储引擎的区别*

MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景

查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序

数据库的优化(从sql语句优化和索引两个部分回答)*

索引有B+索引和hash索引,各自的区别

B+索引数据结构,和B树的区别

索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效*

聚集索引和非聚集索引区别。

有哪些锁(乐观锁悲观锁),select时怎么加排它锁*

关系型数据库和非关系型数据库区别

数据库三范式,根据某个场景设计数据表(可以通过手绘ER图)

数据库的读写分离、主从复制*

使用explain优化sql和索引

long_query怎么解决*

内连接、外连接、交叉连接、笛卡儿积等

死锁判定原理和具体场景,死锁怎么解决*

varchar和char的使用场景。*

mysql并发情况下怎么解决(通过事务、隔离级别、锁)

数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)

查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序

七.Spring

IOC和DI是什么?

Spring IOC 的理解,其初始化过程?*

BeanFactory 和 FactoryBean的区别?*

BeanFactory和ApplicationContext的区别?*

ApplicationContext 上下文的生命周期?*

Spring Bean 的生命周期?*

Spring AOP的实现原理?

Spring 是如何管理事务的,事务管理机制?*

Spring 的不同事务传播行为有哪些,干什么用的?*

Spring 中用到了那些设计模式?*

Spring MVC 的工作原理?*

Spring如何解决循环依赖?

Spring 如何保证 Controller 并发的安全?*

八.Netty

BIO、NIO和AIO*

Netty 的各大组件*

Netty的线程模型*

TCP 粘包/拆包的原因及解决方法*

了解哪几种序列化协议?包括使用场景和如何去选择*

Netty的零拷贝实现*

Netty的高性能表现在哪些方面*

九.缓存

Redis用过哪些数据数据,以及Redis底层怎么实现*

Redis缓存穿透,缓存雪崩*

如何使用Redis来实现分布式锁*

Redis的并发竞争问题如何解决

Redis持久化的几种方式,优缺点是什么,怎么实现的*

Redis的缓存失效策略*

Redis集群,高可用,原理

Redis缓存分片

Redis的数据淘汰策略

十.技术框架

看过哪些开源框架的源码

为什么要用Redis,Redis有哪些优缺点?Redis如何实现扩容?

Netty是如何使用线程池的,为什么这么使用*

为什么要使用Spring,Spring的优缺点有哪些*

Spring的IOC容器初始化流程*

Spring的IOC容器实现原理,为什么可以通过byName和ByType找到Bean

Spring AOP实现原理

消息中间件是如何实现的,技术难点有哪些

十一.技术深度

事务的实现原理

有没有看过JDK源码,看过的类实现原理是什么。

HTTP协议

TCP协议:面向连接的、可靠的、基于字节流的传输层通信协议

一致性Hash算法*

JVM如何加载字节码文件*

类加载器如何卸载字节码

IO和NIO的区别,NIO优点

Java线程池的实现原理,keepAliveTime等参数的作用。

HTTP连接池实现原理

数据库连接池实现原理

数据库的实现原理

十二.分布式

什么是CAP定理

CAP 理论和 BASE 理论

CAP 理论

CAP 理论和最终一致性

最终一致性实现方式

一致性 Hash

分布式事务,两阶段提交。

如何实现分布式锁*

如何实现分布式Session*

如何保证消息的一致性*

负载均衡

正向代理(客户端代理)和反向代理(服务器端代理)*

CDN实现原理

怎么提升系统的QPS和吞吐量*

Dubbo的底层实现原理和机制*

描述一个服务从发布到被消费的详细过程*

分布式系统怎么做服务治理

接口的幂等性的概念

消息中间件如何解决消息丢失问题*

Dubbo的服务请求失败怎么处理

重连机制会不会造成错误

对分布式事务的理解

如何实现负载均衡,有哪些算法可以实现?

Zookeeper的用途,选举的原理是什么?

数据的垂直拆分水平拆分。

zookeeper原理和适用场景*

zookeeper watch机制

redis/zk节点宕机如何处理*

分布式集群下如何做到唯一序列号*

用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗*

MQ系统的数据如何保证不丢失

列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询

十三.系统架构

如何搭建一个高可用系统

哪些设计模式可以增加系统的可扩展性

介绍设计模式,如模板模式,命令模式,策略模式,适配器模式、桥接模式、装饰模式,观察者模式,状态模式,访问者模式。

抽象能力,怎么提高研发效率。

什么是高内聚低耦合,请举例子如何实现*

什么情况用接口,什么情况用消息

如果AB两个系统互相依赖,如何解除依赖*

如何写一篇设计文档,目录是什么

什么场景应该拆分系统,什么场景应该合并系统

系统和模块的区别,分别在什么场景下使用

实战能力

有没有处理过线上问题?出现内存泄露,CPU利用率标高,应用无响应时如何处理的。

开发中有没有遇到什么技术问题?如何解决的

如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能。

新浪微博是如何实现把微博推给订阅者

Google是如何在一秒内把搜索结果返回给用户的。

12306网站的订票系统如何实现,如何保证不会票不被超卖。

如何实现一个秒杀系统,保证只有几位用户能买到某件商品。

十四.LINUX

硬链接和软连接区别

kill用法,某个进程杀不掉的原因(进入内核态,忽略kill信号)

linux用过的命令

系统管理命令(如查看内存使用、网络情况)

管道的使用 |

grep的使用,一定要掌握,每次都会问在文件中查找

shell脚本

find命令

awk使用

十五.TCP/IP

OSI与TCP/IP各层的结构与功能,都有哪些协议。*

TCP与UDP的区别。*

TCP报文结构。

TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。

TCP拥塞控制。

TCP滑动窗口与回退N针协议。

Http的报文结构。

Http的状态码含义。

Http?request的几种类型。*

Http1.1和Http1.0的区别*

Http怎么处理长连接。*

Cookie与Session的作用于原理。

电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP。

Ping的整个过程。ICMP报文是什么。

C/S模式下使用socket通信,几个关键函数。*

IP地址分类。

路由器与交换机区别。

十六.软能力

如何学习一项新技术,比如如何学习Java的,重点学习什么

有关注哪些新的技术

工作任务非常多非常杂时如何处理

项目出现延迟如何处理

和同事的设计思路不一样怎么处理

如何保证开发质量

职业规划是什么?短期,长期目标是什么

团队的规划是什么

能介绍下从工作到现在自己的成长在那里

说说你认为的服务端开发工程师应该具备哪些能力

网络必备,高并发,JVM必会,各种分布式技术,看源码的能力。

说说你认为的架构师是什么样的,架构师主要做什么。

十七.自我问答总结

1.JDK,JRE,JVM(掌握)

2.主从数据库切换

3.  Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口,Bean获取它所在的Spring容器,可以通过这个上下文环境对象得到Spring容器中的Bean。

4.  ehcache:

5. StringBuffer是线程安全的,每次操作字符串,String会生成一个新的对象,而StringBuffer不会;StringBuilder是非线程安全的

6.关系型数据库和非关系型数据库种类和关系

7. Vector ,ArrayList 和LinkedList的区别?

8.注解

9.反射

10.加载器

11.ajax

12.final, finally, finalize 的区别

13.重载和重写的区别

14. 抽象类和接口有什么区别

15. statement

16. 数据库基础查询

17.使用Spring框架的好处是什么?

18. ~8等于多少?8>>>2等于多少?

19. 子类能否重写父类的静态方法

20. 什么是线程?

21. 线程和进程有什么区别?

22. 如何在Java中实现线程?

23. Java 关键字volatile 与 synchronized 作用与区别?

24.不同的线程生命周期?     

25. 程优先级的理解是什么?

26.是死锁(Deadlock)?如何分析和避免死锁?

27.么是线程安全?Vector是一个线程安全类吗? 

28.Java中如何停止一个线程?

29.什么是ThreadLocal?

30.Sleep()、suspend()和wait()之间有什么区别?

31.什么是线程饿死,什么是活锁?

32.什么是Java Timer类?如何创建一个有特定时间间隔的任务?

33.Java中的同步集合与并发集合有什么区别?

34.同步方法和同步块,哪个是更好的选择?

35.么是线程池? 为什么要使用它?

36.java中invokeAndWait 和 invokeLater有什么区别?

37. 多线程中的忙循环是什么?

38. Array不可以用泛型?

39. AJAX有哪些有点和缺点?

40.集合解析

41.线程解析

42. Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

43.说说线程安全问题

44.悲观锁 乐观锁

十八.数据存储分析

1.mysql索引使用技巧及注意事项

2.索引的使用及注意事项

十九.Redis 如何实现持久化

1. snapshotting(快照)

 2. Append-onlyfile(缩写aof)的方式        

3.Redis 为什么是单线程的

4.使用传统的 Socket 开发挺简单的,我为什么要切换到 NIO 进行编程呢?

文章评论