Java最常见面试题和多线程使用

一,Redis。

1,Redis是什么,都有哪些使用场景。

Redis是一个使用C语言开发的高速缓存数据库。

Redis使用场景:。

记录帖子点赞数,点击数,评论数。

缓存近期热帖。

缓存文章详情信息。

记录用户会话信息。

2.Redis有哪些功能。

数据缓存功能。

分布式锁的功能。

支持数据持久化。

支持事务。

支持消息队列。

3.Redis和memcache有什么区别。

存储方式不同:memcache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小,Redis有部份存在硬盘上,这样能保证数据的持久性。

数据支持类型:memcache对数据类型支持相对简单,Redis有复杂的数据类型。

使用底层模型不同:它们之间底层实现方式,以及与客户端之间通信的应用协议不一样,Redis自己构建了vm机制,因为一般的系统调用系统函数的话,会长春Java培训浪费一定的时间去移动和请求。

value值大小不同:Redis最大可以达到1gb,memcache只有1mb。

4.Redis为什么是单线程的。

因为cpu不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽,既然单线程容易实现,而且cpu又不会成为瓶颈,那就顺理成章地采用单线程的方案了。

关于Redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求。

而且单线程并不代表就慢nginx和nodejs也都是高性能单线程的代表。

5.什么是缓存穿透,怎么解决。

缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。

解决方案:最简单粗暴的方法如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们就把这长春Java培训哪家好个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

线程的概述。

基本上所有的操作系统都支持同时运行多个应用程序,我们把运行中的每个应用程序称之为进程,同时一个应用程序在运行的过程中又会产生多个子任务程序流,每个子任务程序流就是一个线程,Java作为高级的面向对象语言理所当然支持多线程的开发。

进程是操作系统进行资源分配和调度的一个独立单位,而线程是进程的执行单元,也可以说是线程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程,线程没有自己的系统资源,它与父进程以及其他兄弟线程共享该父进程的全部资源,每一个线程的运行都是独立的,但是由于其使用共同的物理资源,所以很容易实现线程间的通信。

新建状态(new):一个线程类对象被创建即进入新建状态。

就绪状态(Runnable):线程类对象执行start方法即进入就绪状态。

长春Java培训机构运行状态(Running):就绪状态的线程被cpu调度执行线程执行体时即进入运行状态。

死亡状态(Dead):线程执行体执行完成或者执行过程中抛出异常时即进入死亡状态。

阻塞状态(Blocked):线程在运行过程中由于各种原因,失去cpu执行权限时即进入阻塞状态或最终进入就绪状态。

阻塞状态由于其造成阻塞原因的不同分为三种类型:。

1,同步阻塞:线程在执行过程中由于未获取到同步锁,导致线程阻塞,直到获得同步锁,线程进入就绪状态。

2,等待阻塞:线程在运行状态执行了wait方法导致线程阻塞,直到执行notify或者notifyAll方法时,程序进入就绪状态。

  3,其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态,当sleep()状态超时,join()等待线程终止或者超时,或者I/O处理完毕时,线程重新转入就绪状态。

发表评论

电子邮件地址不会被公开。 必填项已用*标注