JAVA 面试随笔(笔试题)

 

  • String类为什么是final的?

主要是为了考虑String类的安全性与效率,被final进行修饰后String类就不能被继承,所以就不会被修改,这也就避免了因为继承所引起的安全隐患,还有一个原因就是String类在java程序中被频繁使用,如果在它每次出现的地方都进行final的修饰,无疑会降低效率,所以就在类上加上了final进行修饰。

 

  • session和cookie的区别和联系是什么?

区别:1、存储位置:session存储在服务器,而cookie存储在     客户的浏览器上。

安全性:因为session是存储在服务端的数据相对来说数据是比较安全的,而cookie因为存储在客户端很容易遭到cookie欺骗。

联系:服务器可以通过session与cookie中保留的信息任意筛选并经常维护这些信息,充分利用其各自的特性,优化各个服务,调整为最佳状态。

 

  • spring注入有哪几种方式?

常见的注入方式有三种:

1、构造方法注入

2、属性setter方法注入

3、接口注入

而spring只支持前两种注入

 

  • spring如何实现事务管理的?

Spring实现事务分为两种。一种为编程式事务管理,一种是声明式事务管理;

编程式事务管理我们需要在代码中调用commit(),rollback()等事务相关的方法,这种事务管理操作事务的逻辑与业务代码混在一起,不提倡使用。

声明式事务管理是基于AOP动态代理的,本质是对方法的前后进行拦截添加事务从而完成事务的管理,这种事务管理的优点是不与业务代码掺杂,只需要在配置文件中配置即可,但也有缺点,就是声明式事务只能作用于方法上无法像编程式事务一样可以作用到代码块上,声明式事务有两种配置方法,一种是xml的配置,一种是基于@Transactional注解的方法。

 

  • spring cloud 断路器的作用是什么?

当一个服务调用另一个服务由于网络原因或者自身原因出现问题时,服务的调用者就会等被调用者的响应,当更多的服务请求到这些资源时,导致更多的请求等待,这就造成了连锁效应,服务之间的雪崩问题是很好的例子,断路器就是解决这一问题的。--当大量的服务请求某一服务阻塞时,断路器就会打开,进行服务降级,这样就不会影响程序的核心服务,如果短时间内有恢复的迹象,则断路器就会将部分请求放开,如果阻塞又达到了一定的阈值,也会在打开,这一阶段为熔断器的半开状态,如果请求正常,熔断器则处于关闭状态。

 

  • Spring cloud如何实现服务的注册?

使用Spring Cloud 的Eureka注册中心组件,当服务发布时,指定对应的服务名称,包括服务ip与端口将服务注册到Eureka中,而Eureka底层为一个双层map的结构第二层的map的key就是服务注册的名称,value为服务的实例,在服务端添加 @EnableDisscoveryClient注解 表示服务的注册客户端。 

  • 什么是Spring Cloud Gateway?

Spring Cloud Gateway是spring提供的一种微服务框架中简单有效统一的API路由管理方式,它不仅提供了统一的路由方式,并且基于filter链的方式提供了网关的基本的功能,如安全,监控,限流。

 

  • java synchronized对static及非static方法的差异是什么?

如果synchronized修饰在非static方法上,线程之间互无关系,可任意执行自己对象的锁,如果在static方法上修饰synchronized表示锁定了class类.多个线程都是相同的一把锁,即取得的锁都是对象锁,哪个线程先执行代码,哪个线程就持有该方法所属的对象锁,其他对象就无法执行。

 

  • hash算法的有哪几种,优缺点,使用场景是什么?

Hash算法有:1. 加法Hash;2. 位运算Hash;3. 乘法Hash;4. 除法Hash;
5. 查表Hash;6. 混合Hash;

优点:容易执行寻址、插入、删除操作 效率高,不论哈希表中有多少数据,插入和删除只需要接近常量的时间的时间级
缺点:哈希表被基本填满时,性能下降得非常严重,没办法顺序遍历hash表
应用:
1. 安全加密。日常用户密码加密通常使用的都是 md5、sha等哈希函数,因为不可逆,而且微小的区别加密之后的结果差距很大,所以安全性更好。
2. 场景二:唯一标识。比如 URL 字段或者图片字段要求不能重复,这个时候就可以通过对相应字段值做 md5 处理,将数据统一为 32 位长度从数据库索引构建和查询角度效果更好,此外,还可以对文件之类的二进制数据做 md5 处理,作为唯一标识,这样判定重复文件的时候更快捷。
3.数据校验。比如从网上下载的很多文件,都会包含一个 MD5 值,用于校验下载数据的完整性,避免数据在中途被劫持篡改。
4. 散列函数。PHP 中的 md5、sha1、hash 等函数都是基于哈希算法计算散列值
5.负载均衡对于同一个客户端上的请求,尤其是已登录用户的请求,需要将其会话请求都路由到同一台机器,以保证数据的一致性,这可以借助哈希算法来实现,通过用户 ID 尾号对总机器数取模,取多少位可以根据机器数定,将结果值作为机器编号。
6.分布式缓存。分布式缓存和其他机器或数据库的分布式不一样,因为每台机器存放的缓存数据不一致,每当缓存机器扩容时,需要对缓存存放机器进行重新索引或者部分重新索引,这里应用到的也是哈希算法的思想。

 

  • redis和memcache的区别是什么?

区别:

1、在存储方式上,redis可以将一部分的数据持久化到硬盘上,进而实现数据的持久化,而memcache只会保存在内存中,如果突然断电或者是服务器宕机,那么数据全部丢失。

2、在数据支持方面,redis支持多种数据类型比memvache要多的多。

3、使用的底层模型不同,redis新的版本直接自己构建vm机制,这样的话会浪费一定的时间去移动与请求。

4、运行的环境不同。

 

  • MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

先计算一下redis20w数据需要多少内存空间,然后限定Redis占用的内存,当redis内存超出设置的最大内存时,会触发redis的淘汰机制,设置淘汰机制为allkeys-lru在所有的key中 redis会删除最近最少使用的key或者设置volatile-lru属性在所有的设置过期时间的key中删除最近最少使用的key。

 

  • 自己用户哪些MQ,其优缺点是什么?各MQ的连接是线程安全的吗?

常见的MQ有:ActiveMQ,RabbitMQ,RocketMQ,Kafka

使用过Rabbit MQ。

优点:把同步变异步,更好的解耦,削峰填谷,rabbitmq采用信道通信。

缺点:系统可用性降低,系统复杂性提高。

不是线程安全的。

 

  • Mysql数据库会死锁吗?举一个死锁的例子。

会死锁。

例:用户A访问A表时锁住了A表的同时,又去访问B表,此时用户B也在访问B表,也把B表锁住了,同时用户B也企图访问A表。这样AB双方都没有释放锁,就产生了死锁。

 

  • 举一个或几个在之前工作中所解决技术问题中,让自己印象非常深刻的例子。

前段时间做的一个商品的项目,有一个索引库和静态页与数据库的数据不一致问题,当时使用的是Rabbit MQ的消息队列通过消息队列来同步索引库静态页与数据库的数据同步问题,还有就是在生成的静态化页面时进行了优化,因为用户访问商品时即要渲染单品页,又要生成静态化页面,就产生了耗时操作,此时,我是将串行执行改为了并行执行,异步的去生成了商品静态页面,极大的减少了响应的时间,给用户最好的体验。

 

  • 从JAVA软件工程师的角度,谈谈自己对软件工程的理解。

自我感觉软件工程的核心是软件开发,而软件开发不仅仅是编写软件程序,更重要的是学习软件编程的思想,对软件开发有好的逻辑与思考,同时只有对软件开发有好的认识,才能编写出好的软件程序。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃李醉春风SVIP

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值