java常问面试题

java常问面试题

面试官心得

这是目前在职的这家公司工作性质的问题,从去年3月份开始就在这家公司工作,职位挂的是后备项目经理,所以可以接触很多大佬的面试,由于疫情的原因,好多面试都是改为线上面试,所以可以旁听面试,有时候也会给大佬做一部分技术的初面。以下是我整理的一些面试题

Java架构

关于架构,现在很多公司用的都是springcloud:
spring cloud

  1. spring cloud 的核心组件有哪些?
    服务发现(注册中心)——Eureka或者nacos
    客服端负载均衡——Ribbon
    断路器——Hystrix
    服务网关——Zuul或者gateway
    分布式配置——Spring Cloud Config或者nacos\
    spring boot

1. springboot核心注解有哪些?
1、@SpringBootApplication,包含:
@SpringBootConfiguration
声明为配置类(根配置类,首先扫描该类,本身是一个IOC容器的配置类),将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
SpringBoot使用Java Config技术进行配置,Java Config使用注解和Java代码的方式代替xml配置文件
任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。
2、@ComponentScan
自动扫描当前包及子包下被@Component,@Controller,@Service,@Repository注解标记的类,将其作为bean加载到IOC容器中。
不指定范围则默认从注解所在类的包下进行扫描。
3、@EnableAutoConfiguration
核心注解,是自动配置的入口,SpringBoot根据添加的jar包来进行项目的默认配置
4. 简单的介绍 三种设计模式,挑一个说说使用场景,和使用原因 语法;
Spring Boot 中如何实现定时任务 ?
定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。
在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

简历上的项目要描述清楚,一般这几个问题是经常要问的

1、介绍项目,重点介绍负责的内容,所使用到的技术
2、介绍一下上家公司离职的原因
3、现在的项目有投入上线使用吗,每天的数据流量大概是多少

数据库技术

1、表结构的分析与设计、索引
2、存储过程和连接池
3、数据库的优化
*
答案如下:
a. 使用limit 1。在我们知道查询结果只有一条数据时加上LIMIT 1这样MySQL数据库引擎会在查询到一条数据后停止搜索,不在继续查询下一跳符合记录的数据
b. 使用Not Exists代替Not In。在多条件(多表)查询中,需排除某一特定条件时,使用Not Exists,因为Not In不能使用索引查询
c. 尽量不采用不使用索引进行数据操作的操作符。比如:in、not in、is null、is not null、<>等
d. 对mysql进行分库分表操作。

4、Spring基本的数据类型有那些
5、hashmap的底层实现原理
6、多线程的了解有多少,线程的状态

答案如下:
线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。
a、创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。
b、就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
c、运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
d、阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。
e、死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪  
7、数据库的优化
8、数组和链表的区别是什么
9、数据库事务的隔离级别

答案如下:
a. 读未提交,一个事务能够读取到另一个事务未提交的记录。
b. 读已提交,事务只能读取到已经提交的记录, 会出现不可重复读的问题,即同一个事务多次读取到的结果是不相同的。
c. 可重复读,即同一个事务,多次查询读取的记录是 相同的,但是会出现幻读的问题,即在读取结果的一瞬间,另外一个事务突然向数据库里插入了一条记录,
那么前面的事务好像多读取了一条记录的问题。可用mvcc解决幻读的问题,多版本控制。
d.可串行化,是数据库的隔离的最高级别,不会出现脏读、不可重复读、幻读的问题,但性能比较差。
10、mysql的隔离级别会造成什么问题?为什么?mysql做什么去改善这个问题?
11、怎么实现线程池,一般用的是那种方式,为什么用这种方式
12、mysql默认事务处理机制
13、怎么实现线程安全呢
14、hashmap的线程安全吗?

redis最常问的问题

redis问题1:
基本数据类型有哪些?
String
这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。
hash
这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。
list
使用List的数据结构,可以做简单的消息队列的功能,例如限时抢购、秒杀等记录商品数量变化。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。
set
因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。
另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。
sorted set
sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。另外sorted set可以用来做延时任务、范围查找。
redis问题2:
缓存穿透,即黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常。
解决方案:
(一)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试
(二)采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。
(三)提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列合法有效的key。迅速判断出,请求所携带的Key是否合法有效。如果不合法,则直接返回。
缓存雪崩,即缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而导致数据库连接异常。
解决方案:
(一)给缓存的失效时间,加上一个随机值,避免集体失效。
(二)使用互斥锁,但是该方案吞吐量明显下降了。
(三)双缓存。我们有两个缓存,缓存A和缓存B。缓存A的失效时间为20分钟,缓存B不设失效时间。自己做缓存预热操作。

linux常见命令:

简单说说最基本的命令就行,主要想考察对linux是否真的熟悉
cd … 返回上一级目录
ls 查看目录中的文件
mkdir dir1 创建一个叫做 ‘dir1’ 的目录’
rm -f file1 删除一个叫做 ‘file1’ 的文件’
cp file1 file2 复制一个文件
find / -name file1 从 ‘/’ 开始进入根文件系统搜索文件和目录
cat file1 从第一个字节开始正向查看文件的内容
tail -f /var/log/messages 实时查看被添加到一个文件中的内容

项目中基本都会涉及到一个登录、注册等状态,那么面试官可能会问以下的问题

session和cookie 区别
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中。

分割

哈哈哈,先写这么多,纯粹是一个整理哈,有不对的地方,如果那位大佬看见了 轻点喷 哈哈哈哈 后期估计会更新很多开发方面的知识,学习心得,还有笔记等。希望以后能有很多很多钱

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值