为了有针对性的准备面试,锁屏面试题百日百刷开始每日从各处收集的面经中选择几道经典面试题分享并给出答案供参考,答案中会做与题目相关的扩展,并且可能会抛出一定问题供思考。这些题目我会标注具体的公司、招聘类型(校招、社招、实习)以及面试阶段。这些面试题会收录到锁屏面试题app和小程序中并整理归类好。其他面试题也同样在持续更新中,多谢使用和支持。下面是今日面试题:

====HashMap为什么线程不安全?ConcurrentHashMap的原理?[字节跳动][校招][面]

HashMap不安全的地方:

HashMap在new的时候并不会初始化,而是在第一次 put 的时候,会进行哈希数组的初始化,如下图:

(resize方法这里不说,建议去了解下,因为这个涉及到面试的另一个常问点,HashMap的原理。)

要是两个线程做put操作,且恰好判断tab(如上图)的长度为空,则会存在两次对 HashMap 进行初始化,这样就会有两个哈希数组。所以说线程不安全的。

另外在HashMap中put、remove等方法因为没有添加锁,也存在线程安全问题。

ConcurrentHashMap的原理:

在1.8中,ConcurrentHashMap使用数组+单向链表+红黑树的数据结构保存数据,采用Node + CAS + Synchronized实现分段锁的形式来保证并发操作安全进行。

这里扩展讲一下ConcurrentHashMap实现初始化hash表的过程,其他的put、remove等操作在后面的面试题中遇到再讲,感兴趣的可以看一看ConcurrentHashMap源码。

如与HashMap中一样,ConcurrentHashMap也是在put中做初始化hash表的操作,它首先设置了一个sizeCtl变量,这个变量的默认值是0,当我们做初始化hash表操作时,通过CAS操作(图中代码U.compareAndSwapInt(this, SIZECTL, sc, -1))将其置为-1,然后我们再进行初始化(初始化完成后,我们需要在 finally 代码块中把 sizeCtl 设置回 0 的值),设置这个sizeCtl为-1的原因是所有的线程在判断hash表为空的时候,要想初始化hash表得判断这个sizeCtl

不小于0,如果小于0说明有其他线程在初始化hash表,就会使用Thread.yield()让当前线程放弃时间片就算当前线程又抢到了时间片,它还是会在这个while中(我们称为自旋),知道hash表初始化完成,也就不用再进行初始化了,while条件也不再成立,但是得注意变量table(hash表)和sizeCtl必须为volatile,保证其可见性。

1.7中,ConcurrentHashMap采用Segment + HashEntry的结构,Segment是一种可重入锁(ReentrantLock),在ConcurrentHashMap里扮演锁的角色;HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组。Segment的结构和HashMap类似,是一种数组和链表结构。一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素,每个Segment守护着一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得与它对应的Segment锁,如下图所示。

====讲下https?[shopee][校招][面]

http(Hyper Text Transfer Protocol)协议是对客户端和服务器端之间数据之间实现可靠性的传输文字、图片、音频、视频等超文本数据的规范,格式简称为“超文本传输协议”,http协议属于应用层。

https实现的原理:

一、首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;

二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);

三、消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;

四、发送给服务端,此时只有服务端(RSA私钥)能解密。

五、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。

更多面试题或学习资源可查看我主页或评论获取

锁屏面试题百日百刷-java大厂八股文(day2)相关推荐

  1. 锁屏面试题百日百刷-tomcat优化相关

    锁屏面试题百日百刷,每个工作日坚持更新面试题.锁屏面试题app.小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage.已收录了每日更新 ...

  2. 锁屏面试题百日百刷-CSS篇(一)

    你了解的浏览器的重绘和回流导致的性能问题 重绘(Repaint)和回流(Reflow) 重绘和回流是渲染步骤中的一小节,但是这两个步骤对于性能影响很大. 重绘是当节点需要更改外观而不会影响布局的,比如 ...

  3. 锁屏面试题百日百刷-VUE篇(一)

    vue 中父组件如何触发子组件的函数,子组件如何触发父组件的函数 父组件中获取子组件函数:children.children.children.refs 子组件中获取父组件函数:$on vue-rou ...

  4. 锁屏面试题百日百刷-网络篇(一)

    ====什么是网络编程? 网络编程的本质是多台计算机之间的数据交换.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据.现在的网络编程基本上都是基于请求 ...

  5. 锁屏面试题百日百刷-面试必问三次握手

    锁屏面试题百日百刷,每个工作日坚持更新面试题.锁屏面试题app.小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage.已收录了每日更新 ...

  6. java 挂机锁屏 源码_挂机界面 - java代码库 - 云代码

    [java]代码库//挂机 package com.view; import java.awt.Color; /** * 挂机界面 * @author Administrator * */ publi ...

  7. java锁屏,【刷新JAVA锁屏软件 V1.11 (2007-04-02)】-Moto E6手机论坛-ZOL中关村在线

    刷新JAVA锁屏软件 V1.11 (2007-04-02) 首先感谢大家对本软件的支持和宽容:) V1.11修改了刚刚一些机友提出的V1.1的问题(原下载链接作废),主要是某种情况下造成的黑屏的问题. ...

  8. android锁屏流程_Android开机锁屏流程分析

    Android开机锁屏流程: 首先:手机开机时,在SystemServer类的init2()方法中会启动线程类ServerThread的run方法如下: WindowMan Android开机锁屏流程 ...

  9. Android6.0 keyguard锁屏加载流程分析

    锁屏界面的加载通常在android中有两种方式触发:android系统开机和screenOff(灭屏)后,再screenOn; 先来看 android系统开机时候的锁屏加载流程: 首先在系统启动过程中 ...

最新文章

  1. C语言从51单片机led数组,51单片机之C语言-4.2数组
  2. 【Python-ML】神经网络-深度学习库Keras
  3. SQLServer性能优化之查询提示
  4. erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...
  5. wxPython实现在浏览器中打开链接
  6. C语言编写——抢30游戏
  7. 认识activiti与flowable的区别---工作流工作笔记001
  8. PDA连接远程SQL 2005数据库
  9. 智慧社区智能化管理系统搭建
  10. 13个开源GIS软件
  11. 【potplayer安装及设置LAV Splitter】
  12. 编译原理-递归子程序法
  13. Gavin老师Transformer直播课感悟 - BERT多任务Fine-tuning案例实战
  14. 请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图,求大佬指点
  15. window php ice安装,bootice怎么添加win10引导
  16. import绝对路径问题
  17. 学校运动会广播稿计算机,学校运动会广播稿
  18. 迷你酷狗播放器 v1.017
  19. encodeURIComponent()有什么用?
  20. 寂然解读设计模式 - 单一职责原则

热门文章

  1. 不错的ChatGPT Prompts/调教指南
  2. 刚体转动的定律及定理
  3. js将一句英文中每个单词的首字母大写,其余字母小写
  4. 树莓派小程序服务器,微信小程序实现树莓派(raspberrypi)小车控制.pdf
  5. java schtasks 不生效,自动化测试之Windows计划定时任务命令schtasks及语法
  6. 关于如何读书,我们一起聊聊
  7. 第十次作业 - 项目测评
  8. javaweb电影院在线购票系统
  9. 建立单词词典python_如何用Python,制作一个属于自己的、独一无二的英文字典?...
  10. 《FFmpeg Basics》中文版-02-显示帮助和功能