殁舞

导航

 

java的基本数据类型有哪些?各占多少字节?

byte1字节,char2字节,short2字节,int4字节,Long8字节,float4字节,double8字节,boolean1字节

http协议的头里面有哪些?

一般有请求的域名、代理、请求的格式编码、body的大小、支持的压缩算法、cookie

http和https的区别?

https协议是在http协议加了一层安全协议,一般有ssl和tls,现在主流用的应该是tls1.2,他主要工作在tpc/ip传输层的上面,http应用层的下面,可以给应用层的数据进行加密,简单来说客户端会先校验服务端证书,没问题后会用服务端公钥加密一个随机数传给服务端,服务端用私钥解密后再加上之前传的2个随机数会生成一个对称秘钥,客户端也会用这3个随机数生成对称密钥,后续会话就会使用这个对称密钥交互。

Map的key能直接使用对象吗?使用的话会有什么问题?

可以使用对象,需要注意对象的equal和hash有没有被重写,如果重写过了是否符合业务场景的语义,另外要注意内存泄漏问题,像threadlocal就把自己作为map的key存在线程的threadLocalMap里,然后加了个弱引用,map里的key没人引用就会被回收后续会通过事件机制触发清理对应的value,可以降低泄漏风险,当然常规操作需要我们手动remove,这样才能确保不发生泄漏

hashmap的底层数据结构;

hash表+双向链表+红黑树

hashMap的key能不能存null;

可以存,null作为key在hashmap中有特殊处理,直接放到hash表0下标位置,但是一般不建议,业务上容易有歧义,concurrentHashMap中key、value=null,直接抛异常了,,因为并发场景下key或者value为空都会造成二义性

concurrentHashMap怎么实现线程安全的,CAS用在哪步操作,Synchronized锁的哪一步?

concurrentHashMap主要通过对每个hash槽做cas和加锁操作来实现线程安全的,这样并发度比较高,总的来说一般是在put操作时当槽为空节点是会利用cas设置节点,如果槽下面已经挂了节点就会用sychronized锁住执行,扩容过程中也是一样的,当然还有其他地方很多地方也用到了。

线程创建有哪些方式?

本质上java中创建线程只有一种方式,就是执行thread的start方法,他会调用本地方法向操作系统申请一个线程资源。具体到我们代码实现这个层面,一般可以用继承thread类实现run方法、或者实现runable、callable接口,然后作为thread构造参数去执行,更常用的是自定义线程池,然后通过回调函数去执行我们的业务代码,线程池帮我们维护了thread的生命周期

心算下13的二进制是多少?

按2、4、8、16拆分下高位就可以了,不到16说明最多4位,8就是1000,+4=1100,+1=1101

线程有哪些状态;

线程状态有new、runnable、blocked、waiting、timed_waiting、terminated,new就是thread创建后的时机,runnable就是线程进行可执行状态,具体执不执行代码由cpu分配时间片,blocked就是阻塞状态,一般来说使用sychronized就是阻塞,还有类似等待io,这种可以自行恢复执行的就属于阻塞状态,waiting则一般是主动等待,并且需要他人唤醒,像wait\notity,lockSupport.park,unpark,join等,timed_wating类似,多了一个超时机制,比如sleep等待超时时间的。

completableFuture是怎么实现的;

completableFuture实现了future和completionStage接口,所以可以看做一个增强型的future并且具有任务编排的能力异步工具,实现的大致思路是每个future都有一个result和stack,实际为链表的栈,用来存放依赖的任务,每个依赖的任务又是一个completableFuture,如果有thenApply之类的就会放到栈里,这样就可以形成一个类似多叉树的结构了,执行的时候就遵循栈特性,后进先出的执行。
https://blog.csdn.net/m0_62375467/article/details/130769382?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-5-130769382-blog-125930251.235^v43^pc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-5-130769382-blog-125930251.235^v43^pc_blog_bottom_relevance_base8&utm_relevant_index=10

Linux命令会不会?

常用命令
ps -ef|grep xxx,ls,sudo,curl,top -X ,free ,df,chmod,chgrd,cat,less,more,tail -f,vim,netstat,awk

一个线程池我设置最大线程数1000,里面调用一个第三方接口要求限制QPS为10,怎么实现

可以用信号量或者滑动窗口来限流

posted on 2024-05-27 16:55  殁舞  阅读(1)  评论(0编辑  收藏  举报