首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2024-01-03日学习笔记

今年想做的事情课太多了,长这么大,从来没这么努力过,希望年底的时候能对得起自己的付出,新的一年,加油呀!

dubbo负载均衡策略

轮询

随机:会有问题,单节点卡慢

最少活跃:使请求响应慢的节点任务更少

一致性Hash:相同参数请求总是请求到指定的节点

loadbalance 配置

dubbo线程模型

dispatcher

all:所有请求都发到线程池

direct:所有消息都不派发到线程池

message:只有请求响应消息派发到线程池,其他连接断开,心跳等消息,直接再IO线程上执行

excution:只有请求派发到线程池,不含响应,响应和断开,心跳等消息直接在IO线程上执行

connection:再IO线程上,将连接断开事件放入队列,其它消息派发到线程池

threadPool

fixed:固定大小

cached:缓冲线程池

limited:可伸缩线程池,线程只会增长不会收缩,防止大流量引起性能问题

eager:优先创建worker线程池,超过maximum丢到阻塞队列中

put元素,如何计算hash值

首先通过hashcode计算,然后通过CRC16计算

put和get方法的实现

put

判断是否超过(负载因子*最大容量)阈值,超过阈值会出发扩容

扩容默认是2倍

计算hash值,然后判断值大小

如果值大于8且数组大小大于64,会转为红黑树;如果数组小于64或者值小于6会转为链表

在对应的数据结构上添加数据

get

计算hash值,查看对应的值是什么数据结构

根据对应的数据结构查找值

hashmap什么时候会转为红黑树

数组大于64

链表长度大于8

线程安全的Map

concurrentHashMap

collections工具类

hashtable

hashmap是线程安全的吗

不是

put元素,如何计算hash值

首先通过hashcode计算,然后高16位异或运算

JDK7和8中HashMap区别

jdk7采用头插法,8采用尾插法

7使用链表,8使用链表+红黑树

JDK7和8中concurrenthashmap区别

7使用分段锁8使用CAS+Node

JVM安全点和安全区域是什么

安全点

JVM清理垃圾的时候会暂停所有线程运行,即STW。安全点就是JVM设置的一些点位,当STW的时候,代码执行到点位的时候就会暂停执行,等待STW结束。

方法执行前

方法执行后

循环的末位

安全区域

某些运算比较复杂的方法或者执行时间较长的代码段不能立马结束,JVM就将这块特殊的区域标记为安全区域。安全区域中的代码执行完之后会查看是否STW结束了,如果结束了,就继续执行。如果没有结束,就等待。

常见的序列化协议有哪些

json

JDK原生

protobuff

JDK自带序列化方式

实现Serilialable接口即可,实际就是WriteObject和ReadObject方法

无序性

值得是内部元素没有先后顺序区分

不可重复性

指的是内部元素不能重复

ArrayList扩容机制

默认扩容1.5倍

直接创建一个新的数组,然后将原来的数组拷贝过去,然后修改引用指针

如何自定义类加载器

继承ClassLoader,重写loadClass,findClass方法

类加载器

启动类加载器 加载lib下类

扩展类加载器 加载lib/ext下类

应用类加载器 加载用户

new一个HashMap的时候会发生什么

这里主要看两个参数,负载因子和容量,他们的乘积就是扩容阈值,默认扩容2的n次,实际就是2倍默认大小16,默认负载因子0.75

copyonwritelist缺点

只能保证最终一致性,不能保证全程一致性

占用内存

什么是字节码

一种二进制文件,是通过Javac命令生成的一种文件,JVM能识别这种文件并实现跨平台特性。

受检异常和非受检异常有什么区别

受检异常:启动前必须显示处理,不然编译报错非受检异常:可以不处理

Java中的Unsafe

Unsafe是Java提供的一个类,可以直接控制直接内存。

Vector和stack区别

Vector是数组,支持动态扩容stack是栈,先进后出

linkedlist为什么不能实现randomaccess接口

randomaccess指的是随机读写,linkedlist底层是链表,无法实现

linkedlist插入和删除元素时间复杂度

插入:O(n) 删除:O(n)

ArrayList 与 LinkedList 区别

底层实现不同 数组 链表

使用场景不同 查询 增删

java随机访问流

randomaccessfile

Java字节流

input/outputstream

BIO

阻塞IO模型,值得是客户端发送请求后等待服务端响应,同一个线程同时只能处理一个请求。对应Java中的实现就是,socket编程。

image

imagejavap命令

查看二进制文件

jclasslib

一个idea插件,查看字节码

三色标记的大致流程可以讲一下吗

三色标记算法是一种查找垃圾的算法假设三种颜色

白色:初始状态

灰色:当前类存在关联类未标记

黑色:当前类及其关联类全标记

流程

初始状态:所有对象标记位白色

并发标记:所有从GC ROOTS开始查找的对象标记为灰色

最终标记:将灰色节点标记位黑色,开始查找关联节点标记位灰色

重复上述流程

最终白色的就是垃圾

ArrayList 和 Array(数组)的区别?

可变

javaIO设计模式之装饰器模式

装饰器实际就是对某个类增强,

类的生命周期

加载:将字节码转为jVM中的符号引用

校验 :校验语法

初始值:分配空间

引用:将符号引用转为直接引用

初始化:初始化值

使用

销毁

帧数据

帧数据实际就是栈数据,每个线程会分配一个栈帧,包含程序计数器,局部变量表,操作数栈,引用链接等

CMS收集器

是基于标记-整理算法实现的垃圾收集器,常用于老年代。存在的问题主要是容易产生浮动垃圾

回收过程

初始标记:从GCROOTS开始查找所有对象(STW)

并发标记:从这些对象开始查找关联的对象

最终标记:标记上个阶段产生的垃圾

清除阶段:清除垃圾

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OpHmWQJdyeuJ9htOgLi_uVug0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券