java并发核心知识体系精讲_不论开放创业还是java工程师 核心秘籍:并发、分布、JVM详读...

现在开放的创业环境,也是很多企业和程序员不断释放自己能力的一个过程,程序员创业、IT人才的创业,各种层出不叠的技术点,变化莫测的技术知识体系,如果掌握了几个重点知识体,能够最快速的掌握java核心,

现在问理工科毕业生、程序员啥最难?莫过于IT企业的java面试官,在过了各种艰难险阻之后,如何去适应各种技术类的java面试题,这里面为大家提供了java面试中常见的几个点,并发、分布、JVM,一百遍应万变,降低面试难度。

9b9e400500d20c319cee919ff1201d3c.png

并发性能调优

1. 每秒钟5k个请求,查询手机号的笔试题,设计算法?请求再多,比如5w,如何设计整个系统?

缓存读取不会形成瓶颈,队列生产不会形成瓶颈,唯一形成瓶颈的点有可能发生在外部运营商接口,因此我们会对实时查询服务做限流和熔断,所以不会压垮运营商,但是用户端的体验就糟些了,所以我们需要把缓存预热的功夫做足,改善体验。

703d0397eb10c65005481b3046ac3771.png

2. 高并发情况下,我们系统是如何支撑大量的请求的?

尽量用缓存技术,同步转换异步,合并多个请求,代码进行优化,同时做好中间件处理。

分布式

1、存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,redis可以持久化其数据

2、数据支持类型 memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 ,提供list,set,zset,hash等数据结构的存储

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

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

5、redis的速度比memcached快很多

6、Redis支持数据的备份,即master-slave模式的数据备份。

JVM

f2ed8ee11b73d837d452bea38217197c.png
1.   程序计数器(PC,Program Counter Register)。在 JVM 规范中,每个线程都有它自己的程序计数器,并且任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行本地方法,则是未指定值(undefined)。(唯一不会抛出OutOfMemoryError)
2.   Java 虚拟机栈(Java Virtual Machine Stack),早期也叫 Java 栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的 Java 方法调用。
前面谈程序计数器时,提到了当前方法;同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,成为新的当前帧,一直到它返回结果或者执行结束。JVM 直接对 Java 栈的操作只有两个,就是对栈帧的压栈和出栈。
栈帧中存储着局部变量表、操作数(operand)栈、动态链接、方法正常退出或者异常退出的定义等。
3.   堆(Heap),它是 Java 内存管理的核心区域,用来放置 Java 对象实例,几乎所有创建的 Java 对象实例都是被直接分配在堆上。堆被所有的线程共享,在虚拟机启动时,我们指定的“Xmx”之类参数就是用来指定最大堆空间等指标。
( 编译器通过逃逸分析,确定对象是在栈上分配还是在堆上分配)
理所当然,堆也是垃圾收集器重点照顾的区域,所以堆内空间还会被不同的垃圾收集器进行进一步的细分,最有名的就是新生代、老年代的划分。
4.   方法区(Method Area)。这也是所有线程共享的一块内存区域,用于存储所谓的元(Meta)数据,例如类结构信息,以及对应的运行时常量池、字段、方法代码等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值