面试总结之常考题目汇总

以下题目搜集于面试过程中,主要适用于 1-3 年工作经验的开发者,当然个人以为工作3-5年后,还是会问这些个问题,只是面试官会揪着某一个知识点往深入里面问下去,就看被面试者自身的能力。

java 基础类

  • HashMap 和 HashSet 区别?HashMap 和 HashTable 的区别?HashMap 和 TreeMap 以及LinkedHashMap 的区别?各自底层的数据结构是什么?HashMap、ArrayList 等数据结构的扩容倍率?HashMap 底层为什么要用数组?
  • HashMap的数据结构是什么?数组加链表,那取值时如何从链表里面取到希望的value呢?
  • Try…catch…return的返回值判断?执行顺序?return 加在 try 代码块里面之后的顺序?
  • CurrentHashMap的实现原理?与 HashMap 相比而言,改进在哪里?如何实现的?
  • 设计模式用过哪些?单例模式的几种写法?JDK 里面有哪些典型的API 是你刚才列举的常用的设计模式?
  • 单例模式的判断,即给出一个类似单例模式的代码段,指出里面的错误的地方?懒汉 vs 饿汉,两者的区别?
  • JDK 动态代理和 cglib 代理的区别?
  • 关于时间复杂度的计算和推导是否熟悉或者了解,ArrayList的时间复杂度,各种排序算法的时间复杂度是多少?Spring 框架里面有哪些设计模式应用?
  • JVM的结构图?ClassLoader原理以及示例图?两个类是否可以互为父ClassLoader?
    并发和并行区别?
  • 线程之间的通信方式?创建线程的几种方式?wait()和sleep()的区别?
  • 用过哪些多线程API,在什么样的场合下选择使用这个API?还知道其他一些API吗?有什么区别?
  • 关于多线程,ThreadPoolExecutor 的几个重要参数,分别是什么意思?举一个现实中的实例,加以说明最好。
  • synchronized关键字和juc锁的对比区别?
  • 现实问题如OOM或者死锁的排错思路?
  • Checked Exception 和 Unchecked Exception 的区别是什么?已经有 checked exception 的情况下,JDK 为什么还要提供 unchecked exception?
  • 关于序列化,是否implements Serializable,关键字transient,然后是修饰符private和public,问哪个属性可以序列化到文件?
  • 运算符的优先级(不常见)
  • Java堆的划分?
  • 垃圾回收机制以及算法?相互引用的两个独立对象如何被垃圾回收器回收?垃圾回收判断可达的出发点是什么?
  • Equal和==的区别?equals() 和 hashCode() 方法?什么时候需要重写?
  • java.io.* 包的熟悉程度;字节流与字符流的区分(如选择题)?进一步,nio 的理解,其使用场景。
  • SPI的思想?SPI的应用场景?
  • Java调用外部程序的方法?比如dll文件等;
  • 如何用Java自带的API写程序导出Dump文件?(应该是没记错的)
  • 如何查看每一行Java程序代码的内存消耗?
  • 实现一个线程安全的阻塞队列?
  • 网络socket有了解不?进一步,Netty?

JVM

  • 内存屏障?JVM?JMM?
  • Volatile以及CAS原理?

计算机网络

  • 七层网络协议
  • TCP/UDP

框架类

值得一提的是,其中的核心框架,无论是Spring ,还是Spring boot,亦或是Spring cloud,都可以拿出很多问题来考查。

Spring

  • Spring中有哪些设计模式?有没有单例模式?Spring bean 是不是单例模式?或者直接问 Spring 中 bean 的生命周期是什么?
  • 简单论述一下Spring IoC?IoC的种类?IoC容器的启动过程?Spring web的核心作用?Spring的几种bean的作用域?@PostConstruct & @PreDestroy两个注解的作用,结合Spring 来讲?
  • 讲讲 Spring!!spring的启动过程?你对Aop的理解,ApplicationContext 和 BeanFactory 两个类的区别? AOP的使用场景?
  • 对 spring 事务控制的理解?7种传播?4种读的理解?

spring boot

  • spring boot 的优势所在?spring boot 如何做到自动配置的? spring boot 开发中并没有 web.xml 文件,你对这个缺失文件的理解?如何做到的?bootstrap.yml 文件的使用场景?application.properties 和 application.yml 文件的区别?

Spring cloud

  • Spring cloud各组件的基本使用和了解?Feign的重试机制,Eureka的保护机制,Zuul的路由机制等?
  • Spring cloud与Dubbo的区别?与微服务的区别?

ORM

  • ORM的思想?懒加载如何配置以及意义?级联如何配置,什么时候应该使用级联?一级缓存:Session级别的缓存?@Version的使用:数据库的乐观锁?
  • MyBatis 如何实现连接不同的数据库,并且做到统一适配?(不明白什么意图?测试环境使用MySQL数据库,但是生产数据库不仅仅是MySQL,还有oracle等。一套代码!!!不是多数据源。
  • MyBatis如何实现分页?自带的插页功能性能不好,可以使用PageHelper;如果让你设计实现 mybatis 分页,如何实现?那数据库层面的话,是如何支持分页查询?
  • Hibernate 的 get() 和 load() 方法的区别? Hibernate 的 lazyload 和 session 啥的区别?

Tomcat

双亲委托类加载机制,以及相关调优参数。

调度

  • 调度框架你有用过吗?在什么样的场景下会需要使用调度框架?quartz的使用?quartz的数据(需要存储哪些任务job的数据?)存储有几种方式?quartz与spring或者spring boot的集成如何实现?cron表达式可知道?Quartz框架如何实现动态改变Cron表达式,来实现动态执行Spring定时任务?
  • 你们的系统是不是微服务形式,或者是分布式部署形式?那分布式情况下的调度如何实现?
  • 开源的分布式调度中心框架,你知道哪些?可看过源码?

其他

  • SocketTimeOut以及connectionTimeOut的区别?(apache 的http client)

web 开发

HTTP

  • HTTP四种方法?
  • 大致讲解一下 HTTP 协议?
  • HTTPS 和 HTTP 区别,加密算法有哪些?

Nginx

  • 解释反向代理、正向代理。正向代理和反向代理的区别?
  • Apache和Nginx的区别?
  • 常用的负载均衡算法:ip_hash ,轮询,weight,fair。
  • 配置动静分离。

RESTful

  • RESTful API 的理解以及其实现方式?
  • restful http通信与RPC通信的对比?耦合性,通信性能,异构系统的互信各个角度对比。

session & cookie

  • Session与cookie的区别?cookie的作用?cookie存于什么地方?session的创建以及销毁时机?session存在什么地方,能否持久化?session共享是什么意思?

其他

  • 如何防止表单的重复提交?
  • 如何保证表单的前后台编码的统一?

数据库

  • 数据库的横表转纵表,反过来,纵表转横表?对横表和纵表的区别和理解以及使用场景等。
  • 关于数据库索引,如何设计?
  • Union all operator 和union区别?
  • left join,right join等区别?
  • 数据库引擎有哪些,区别是什么?
  • 如何定位一个慢查询?
  • 数据库查询如何建立索引?索引优化?加索引为何能够提高查询速度?存储引擎是什么?SQL 优化手段有哪些?数据库的读写分离?由此带来的延迟问题如何解决?什么情况下会发生索引失效的问题?
  • 给出三张数据库表,如何联合查询?联合主键是什么?
  • 给出一个查询语句:select like '',能不能对索引进行优化?
  • 数据库如何进行版本升级?答:两台IP server,使用内网域名而不是各自的 IP 解耦合,DNS 配置,数据迁移工具,域名指向新的IP。
  • 死锁是什么?死锁的产生条件?如何避免?
  • 乐观锁与悲观锁?

缓存

说到数据库,肯定会问你除了CRUD之外,更进一步索引的设计以及优化,进一步分库分表的实现等,还有哪些问题之类。肯定会提到请求量过大的解决方法,话题就不经意之间转移到缓存这方面来。又是一个相当大的话题!
大而范之,关于缓存的问题:

  • 缓存的应用场景?写缓存的时机?
  • 缓存雪崩,缓存失效,缓存穿透,预热等。

Redis

仅以Redis来说的话,问题包括但不限于:

  • Redis的常用数据结构。
  • Redis的持久化策略,RDB和AOF的使用场景,如何实现持久化的?
  • Redis的发布订阅。
  • 列举Redis的使用场景;除了主要功能缓存之外,还包括session共享,基于Redis的分布式锁,简易的消息队列等。
    Redis的集群和哨兵机制。
  • Redis实现流量控制?
  • Redis开源客户端:Jedis,redission……

消息中间件

  • MQ的使用场景?
  • 使用多哪些消息中间件?
  • RabbitMQ?
  • Kafka?

分布式

  • 分布式了解不?锁并发的理解?分布式锁的实现方式以及优缺点?Redis分布式锁如何实现?和数据库锁有何区别?
  • 分布式最根本的问题?一致性
  • CAP和BASE原理。
  • 一致性哈希算法?
  • 分布式,最基本的节点?节点的角色?节点如何实现负载均衡?服务提供者如何实现高可用?
  • 节点之间的传输协议是什么,http/tcp/udp?tcp和udp的区别?
  • RPC框架的性能的关键点是什么?
  • 分布式链路跟踪。Dapper论文,Trace,Span,Annotation,埋点等基本概念的含义?Zipkin,Spring Cloud Slueth?
  • 分布式事务。二阶段提交,三阶段提交,Paxos,TCC?分布式事务框架?
  • 熔断与降级的概念和对比?Hystrix可有了解?

数据结构与算法题

  • 100000张试卷,抽取试题,每套试题100道,单套试题不能有重复的题目,两套试题之间最多有一个试题允许重复,问实现结果的数量级?如何最优化实现?
  • Top k 问题的解决思路?进一步,如果限制内存 256M,对一个4G 的文本文件进行排序,如何实现?你这个方法的时间复杂度是多少?参考
  • 给定一个字符串,如何实现倒序输出?输入字符串,空格切割,反转单词组成的字符串?
  • 如何 trim 字符串里面两个以上的空格?
  • 时间复杂度和空间复杂度的计算?给定任一算法,分析其复杂度?
  • 给定一个数组,实现这样的排序:奇数在前,偶数在后;改进算法有没有?改进时间、空间复杂度等;
  • 已排序数组的给定数字的第一个索引的出现位置?
  • 给定一个表达式,如何校验其有效性?提示:可以考虑前缀、中缀、后缀表达式?逆波兰啥的?
  • 给定中序遍历和后序遍历,求前序遍历;编程算法实现呢?
  • 有环的链表,两个指针,不同步长,问最少需要共同走多少步才能相遇;深入一点,如何判断一个链表有环?编程算法实现呢?
  • 链表的反转;
  • 已排序数组求出其中某个数字(出现不止一次,也可以0次;当然考题不会说明得这么详细,这是编码设计时应该要考虑到的)的起始终止索引;
  • 哈夫曼树;
  • 递归实现二项分布;
  • 二叉树的反转?
  • 求矩阵的平均值?比如给定一个3*3的二维矩阵,元素值是灰度值0或1,求平均值,如左上角的平均值是周围四个元素的平均值。
  • 三个连续的整数,其中两个是质数,证明第三个是6的倍数。参考
  • 遗传算法,粒子群算法讲讲?

编码题

  • 给出一大串集合操作,将其转换为 java8 的 stream 流式操作。
  • 取一个给定路径下面的最大的n个文件的全路径名;
  • 实现一个消费者-生产者模型,producer、consumer。
  • SmartPhone,iPhone,Android,Windows Phone,以及由此而生的带有brand信息的Phone,怎么设计?

Linux

  • 平时用Linux多吗?最基本的Linux命令行可知道?
  • 一个系统访问日志,比如nginx.log,统计访问次数最高的10个IP?
  • 对文本进行排序并取前十个?sort xx.txt | tail -n 10
  • Linux下的IO模型,epoll和poll的区别等;

微服务

  • 微服务定义与概念?设计原则?与SOA的区别是什么?SOA的设计原则?
  • 服务的注册中心是什么?如何实现一个注册中心?

docker

  • docker的概念?优势何在?为什么如此火?如何看待这门新技术(可以作为开放性问题考查)

kubernetes

  • Kubernetes异常状态有哪些?

论述题

可以说是简单题,有让写纸上的,也有直接口述的,也有让画设计图或者架构图之类的,等等。

  • 设计一个高并发的抢红包系统,确保金额的快速即时从A账户转到B1,B2,Bn等?
  • 抛一枚硬币,正面朝上的概率是60%,反面朝上的概率是40%,问如何实现50-50的概率,即抛多少次才能实现?
  • 如何设计秒杀系统?如何设计限时购系统?限时购与秒杀的区别?
  • 购物车设计?锁库存如何实现的?如何避免库存超卖的问题?
  • 系统登录模块的用户名/密码验证?简单系统和复杂系统的登录模块的区别是什么?SSO知道吗?LDAP知道吗?SSO与LDAP的区别是什么?放在微服务环境下,如何做鉴权?再者,401 和 403的错误码是什么意思,两者的区别是什么?

非技术性问题

  • 怎么看待加班问题?
  • 给你一个小模块,你能不能独立完成实现功能?
  • 讲述项目经历,如何解决一个困难的问题?
  • 看过哪些开源项目?可否讲解一下其核心原理?为什么选择这个开源项目等?
  • 项目遇到什么问题?怎么解决?
  • 近在看什么书?
  • 业余时间学习什么技术?这个技术有没有反过来用于工作中?
  • 有没有对产品提出什么建议或者意见?
  • 如何看待新技术?你知道现在开发领域有哪些新的技术吗?无论是语言,开发工具,框架,还是践行方式理念等?

你可能感兴趣的:(面试)