资讯专栏INFORMATION COLUMN

JAVA面试题(45)

Allen / 1002人阅读

摘要:本文首发于的博客转载请注明出处与的区别作用对象是类的静态方法,作用于当前线程是类的成员方法,作用于对象本身作用调用方法,线程进入休眠状态调用方法,线程进入阻塞状态锁的释放不会释放持有的锁会释放锁唤醒自然唤醒或者显式调用方法调用或者方法调用不

    本文首发于cartoon的博客
    转载请注明出处:https://cartoonyu.github.io/c...

java

sleep与wait的区别

作用对象

sleep是Thread类的静态方法,作用于当前线程

wait是Object类的成员方法,作用于对象本身

作用

调用sleep方法,线程进入休眠状态

调用wait方法,线程进入阻塞状态

锁的释放

sleep不会释放持有的锁

wait会释放锁

唤醒

自然唤醒或者显式调用interrupt方法

调用notify或者notifyAll方法

调用

sleep不需要在同步代码中调用

wait需要在同步代码中调用,否则抛出IllegalMonitorStateException

使用场景

sleep作用于周期性任务的执行

wait作用于互斥资源的使用

hashMap的扩容机制

相关成员属性

HashMap是JAVA集合框架的一个存储key-value对的实现类,有关于扩容机制的成员属性主要有三个

默认值为16的capicity

默认值为0.75的loadFactory

默认值为0的size

触发时机

插入元素时

实现

JDK 1.7

传入newCapicity参数

新建newCapicity长度的Entry数组

将原数组元素重新hash放入新数组

将原有数组引用指向新数组

JDK 1.8之后

如果节点的链表元素个数大于8时,原有的数组链表会转换成数组红黑树的逻辑结构进行使用

如果当前size大于loadFactory*capicity的阈值,触发扩容机制

新建一个newCap的int变量,大小为2*oldCapicity

新建一个大小为newCap的数组

原数组元素索引进行2次幂的计算放入新数组

将newCap赋值给原有的capicity

返回新数组

ReentantLock的了解

存在位置

ReentantLock是JDK的一个显式锁的API,具体通过AQS队列实现功能

锁的种类

ReentantLock是可重入的锁,内部通过判断state当前占有线程进行重入的判断

ReentantLock可以实现公平锁以及非公平锁,在构造对象时显式传入fair

同步机制

ReentantLock是同步非阻塞式的,采用乐观并发策略

ReentantLock需要显式控制锁的获取与释放,而且可以响应中断

List实现类的比较

底层实现

Arraylist为数组

LinkedList为链表

线程安全

ArrayList,LinkedList为线程不安全

Vector为线程安全

实现时间

ArrayList,LinkedList为JDK1.2开始实现

Vector为JDK1.1开始实现

NIO的了解

NIO是java中用于实现数据的输入/输出的API,是同步非阻塞式的

核心对象

selector,选择器,用于对channel的选择

channel,通道,用于连接java程序与对象的通道

buffer,缓冲区,用于数据的暂时存放

工作步骤

java程序与操作对象建立channel

数据放入buffer中

selector轮询channel,监控IO状况,控制输入输出

ConcurrentHashMap同步的实现(JDK1.7 1.8)

JDK1.7实现

ConcurrentHashMap中数据存放在Segment(默认为16个)中

ConcurrentHashMap为区域锁,锁定对象是Segment

在写数据时,会经过计算得出使用的Segment,并检查是否持有Segment的锁

JDK1.8实现

ConcurrentHashMap中数据存放在数组链表/红黑树中

ConcurrentHashMap是行级锁,锁定对象是链表的头结点或者红黑树的根结点

在写数据,计算访问的数据索引,检查锁,访问链表或者红黑树

JVM

G1的工作流程

初始标记

并发标记

最终标记

筛选回收

CMS的工作流程

初始标记(stw现象)

并发标记

重新标记(stw现象)

并发清理

重置线程

Spring

spring bean的生命周期

对象被实例化

Spring进行IOC的注入

可选

传入对象

实现BeanNameAware接口,传入bean的ID

实现ApplicationFactoryAware接口,传入Spring工厂

实现ApplicationContextAware接口,传入Spring上下文

初始化

实现BeanPostProcessor接口,对bean内容进行修改

使用

清理

网络

输入域名到返回页面的过程

浏览器部分

利用DNS进行域名解析

检查本地host文件

组装http报文

http报文经过OSI底层包装发送请求

http请求在第三次tcp握手上发送

传输

路由器根据IP进行选择转发到目标主机

目标主机

后端进行报文的拆解获取真实请求

根据请求返回相应页面

传输

路由器根据IP进行选择转发到目标主机

源主机

拆解报文,获取实部数据

交给浏览器渲染页面

算法

两数之和(leetcode 1)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75597.html

相关文章

  • Java面试】常见算法总结

    摘要:常见算法种常见排序算法冒泡排序简单选择排序直接插入排序希尔排序归并排序快速排序堆排序种常见排序算法种常见排序算法的时间复杂度辅助空间以及稳定性对照表。 常见算法 ...

    K_B_Z 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    BicycleWarrior 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    Mr_houzi 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    tommego 评论0 收藏0
  • JAVA面试(32)

    摘要:本文首发于的博客转载请注明出处和的区别是什么内存分配字节字节范围到和到到和到在显示时会发生精度缺失,不会的内连接左连接右连接有什么区别内连接关键词特点返回两个表中符合条件的交集左连接关键词特点返回全部数据以及符合条件的的数     本文首发于cartoon的博客    转载请注明出处:https://cartoonyu.github.io/c... float 和 double 的...

    neroneroffy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<