搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
寸_铁
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
RespeakPro对口型数字人使用教程_在线数字人对口型
2
图像处理与视觉感知复习--概述_灰度级数通常取l=
3
c#中的类数组数据集合_c# 类数组
4
Python生成excel文件的三种方式_python新建excel表格
5
windows10配置sqlserver2014允许远程连接
6
Apache IoTDB 2021年度总结:在持续开源的路上勇往直前
7
Git-将某次commit从一个分支转移到另一个分支_git将某个分支的代码某次提交,再提交到另外一个分支
8
Linux常见面试题,一网打尽!
9
医疗AI新突破!多模态对齐网络精准预测X光生存,自动生成医疗报告!
10
anywhere无法获取服务器响应,使用Chat Anywhere可能出现的问题与解决方法
当前位置:
article
> 正文
java面试常见问题及总结_java面试中常见问题
作者:寸_铁 | 2024-08-09 05:35:18
赞
踩
java面试中常见问题
string stringbuffer stringbuilder
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
equals和hashcode
equals一定相等,hashcode是用hash码进行比较。
线程池相关
newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool
创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
newSingleThreadExecutor
创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
newScheduleThreadPool
创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。
newWorkStealingPool:创建持有足够线程的线程池来支持给定的并行级别,并通过使用多个队列,减少竞争,它需要穿一个并行级别的参数,如果不传,则被设定为默认的CPU数量。
ForkJoinPool:支持大任务分解成小任务的线程池,这是Java8新增线程池,通常配合ForkJoinTask接口的子类RecursiveAction或RecursiveTask使用。
hashmap的底层的实现
数组加链表
redis分布式锁
String result = jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
setnx方法 如果不存在 加锁 如果存在 不做任何操作
redis和memcahed区别
Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
redis数据分片
支持多台机器内存共享,范围分片或者哈希分片
Http 缓存
浏览器缓存,具体原理不清楚
spring事务
编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中
Threadlocal原理
线程级别上下文,ThreadLocalMap为当前线程的一个副本。
服务治理,服务注册和发现的实现
阿里的dubbo没用过。结合用zk实现谈一下
JVM内存区域划分
程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap) 直接内存
类加载机制
jvm类加载机制
加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)
Spring AOP 实现方式及原理
基于接口的动态代理(Dynamic Proxy)
基于子类化的CGLIB代理
JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。
设计模式
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
线程池原理及参数
ThreadPoolExecutor mExecutor = new ThreadPoolExecutor(corePoolSize,// 核心线程数
maximumPoolSize, // 最大线程数
keepAliveTime, // 闲置线程存活时间
TimeUnit.MILLISECONDS,// 时间单位
new LinkedBlockingDeque<Runnable>(),// 线程队列
Executors.defaultThreadFactory(),// 线程工厂
new AbortPolicy()// 队列已满,而且当前线程数已经超过最大线程数时的异常处理策略
);
限流算法
线程池等待 zk日志算法
MySQL 索引数据结构
B+树
ORACLE数据库事务隔离级别
1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。
线程池shuntdown
1、shutdown()
问:shutdown()有什么功能?
答:阻止新来的任务提交,对已经提交了的任务不会产生任何影响。当已经提交的任务执行完后,它会将那些闲置的线程(idleWorks)进行中断,这个过程是异步的。
问:如何阻止新来的任务提交?
答:通过将线程池的状态改成SHUTDOWN,当再将执行execute提交任务时,如果测试到状态不为RUNNING,则抛出rejectedExecution,从而达到阻止新任务提交的目的。
问:为何对提交的任务不产生任何影响?
答:在调用中断任务的方法时,它会检测workers中的任务,如果worker对应的任务没有中断,并且是空闲线程,它才会去中断。另外的话,workQueue中的值,还是按照一定的逻辑顺序不断的往works中进行输送的,这样一来,就可以保证提交的任务按照线程本身的逻辑执行,不受到影响。
2、shutdownNow()
问:shutdownNow()有什么功能?
答:阻止新来的任务提交,同时会中断当前正在运行的线程,即workers中的线程。另外它还将workQueue中的任务给移除,并将这些任务添加到列表中进行返回。
问:如何阻止新来的任务提交?
答:通过将线程池的状态改成STOP,当再将执行execute提交任务时,如果测试到状态不为RUNNING,则抛出rejectedExecution,从而达到阻止新任务提交的目的.
问:如果我提交的任务代码块中,正在等待某个资源,而这个资源没到,但此时执行shutdownNow(),会出现什么情况?
答:当执行shutdownNow()方法时,如遇已经激活的任务,并且处于阻塞状态时,shutdownNow()会执行1次中断阻塞的操作,此时对应的线程报InterruptedException,如果后续还要等待某个资源,则按正常逻辑等待某个资源的到达。例如,一个线程正在sleep状态中,此时执行shutdownNow(),它向该线程发起interrupt()请求,而sleep()方法遇到有interrupt()请求时,会抛出InterruptedException(),并继续往下执行。在这里要提醒注意的是,在激活的任务中,如果有多个sleep(),该方法只会中断第一个sleep(),而后面的仍然按照正常的执行逻辑进行。
事务隔离级别
隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:
TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。
TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
事务传播行为
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:
TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
CMS算法
初始标记(CMS-initial-mark) -> 并发标记(CMS-concurrent-mark) -> 重新标记(CMS-remark) -> 并发清除(CMS-concurrent-sweep) ->并发重设状态等待下次CMS的触发(CMS-concurrent-reset)。
其中的1,3两个步骤需要暂停所有的应用程序线程的。第一次暂停从root对象开始标记存活的对象,这个阶段称为初始标记;第二次暂停是在并发标记之后, 暂停所有应用程序线程,重新标记并发标记阶段遗漏的对象(在并发标记阶段结束后对象状态的更新导致)。第一次暂停会比较短,第二次暂停通常会比较长,并且 remark这个阶段可以并行标记。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/寸_铁/article/detail/951638
推荐阅读
article
springboot
/
java
/php/
node
/python
个人
记账
服务
系统
【计算机毕设】...
这种自我管理和自我约束的过程,有助于培养人们的财务自律性,减少不必要的开支,提高资金的使用效率。通过对大量用户数据的分析...
赞
踩
article
java
/
php
/
node
.js/
python
企业
出纳系统
的
设计
与实现【2024年毕设】_
php
出纳...
本系统带文档lw万字以上文末可领取本课题的JAVA
源码
参考。_
php
出纳
源码
php
出纳
源码
...
赞
踩
article
java
-
php
-
python
-家庭记账
系统
计算机
毕业设计
_
python
开发个人记帐
系统
...
前端技术:Layui、HTML、CSS、JS、JQuery等技术。
java
-
php
-
python
-家庭记账
系统
计算机
毕业...
赞
踩
article
Spark
常用机器学习
算法
(
scala
+
java
)...
kmeansScala程序import org.apache.spark.{
Spark
Conf,
Spark
Contex...
赞
踩
article
java
class
数组
_
java
的类
数组
- 青小羊的
个人空间
-
OSCHINA
- 中文开源技...
新建一个羊类,然后在建一个羊类
数组
,然后对每个羊进行赋值,分类。最后显示输出。import
java
.util.Scan...
赞
踩
article
java
-
HuTools
_
hutools
long
加减...
本文介绍了如何使用Java工具类如IoUtil进行文件流操作,以及DateUtil中的方法来计算时间差和生成时间范围列表...
赞
踩
article
Java
使用
正则表达式
判断
是否是邮箱_
判断
是不是邮箱
java
...
使用
Java
判断
是否是邮箱正确格式public static boolean isEmail(String email)...
赞
踩
article
Java
使用
正则表达式
判断
合法
的 E-
mail
地址_
java
邮箱
判断
合法
正则表达式
...
正则表达式
中的元字符 元字符
正则表达式
中的写法 意义 . . 代表任意一个字符 \d \\d ...
赞
踩
article
《剑
指
Offer
》笔记&题解&思路&技巧&优化
Java
版本——新版
leetcode
_
Part
_2_...
1. LCR 129. 字母迷宫——矩阵中的路径2. LCR 130. 衣橱整理——机器人的运动范围3. LCR 131...
赞
踩
article
[附源码]计算机
毕业设计
农村
养老
保险
信息管理系统
(JSP+
java
+
springmvc
+
mysql
+...
本文介绍了开发一个农村
养老
保险
信息管理系统
的过程,涉及Java、
MyBatis
、Maven、MySQL等技术,以B/S模...
赞
踩
article
力扣
:
3128.
直角三角形
(
Java
)...
如果 grid 中 3 个元素满足
:
一个元素与另一个元素在 同一行,同时与第三个元素在 同一列 ,那么这 3 个元素称为...
赞
踩
article
LeetCode
:3128.
直角三角形
(
枚举
Java
)
_
二维
数组
boolean
构建
直角三角形
...
比较简单,
枚举
直角的交叉点,交叉点对应行和对应列的 1 的个数相乘求和就是答案。当然要减去交叉点,所以 - 1 再相乘。...
赞
踩
article
重磅推荐
:
很全的
Java
权限
认证
框架
!...
来源
:
GitHub上sa-token项目今天给大家推荐的这个开源项目超级棒,可能是史上功能最全的
Java
权限
认证
框架
...
赞
踩
article
Zookeeper
Java
客户端
Curator
使用_zk 3.7.2 对应的
curator
-...
文章目录1.
Curator
1.
Curator
添加依赖
org.apache...
赞
踩
article
Java
:
注释
...
Java
:
注释
Java
:
注释
注释
1. 单行
注释
使用...
赞
踩
article
Java
注释
(
Java
Doc
Comment
)与
注解
(
Annotation
)_
java
注释
和
注解
...
注解
(
Annotation
):又称为 标注,即
Java
标注,是 JDK5.0 引入的一种
注释
机制。
注释
(Note):...
赞
踩
article
java
块
注释
_
java
的
注释
...
最近在做
java
项目开始关注和注意一些
java
规范,目的只是为了让自己和别人更容易理解自己写的代码和复用。一个重要的原则...
赞
踩
article
Java
:
注释
规范(配合
EasyYapi
使用
)。_
yapi
枚举应该如何
注释
...
Java
注释
规范(配合
EasyYapi
使用
)_
yapi
枚举应该如何
注释
yapi
枚举应该如何
注释
...
赞
踩
article
Java
文档注释_
java
文档注释...
Java
支持三种注释方式。前两种分别是//和/* */,第三种被称作说明注释,它以/**开始,以*/结束。_
java
文...
赞
踩
article
java
问题解决:
IDEA
java
警告 源
发行版
17
需要
目标
发行版
17
_
java
:
警告...
jdk和你实际安装的jdk不匹配。_
java
:
警告
:
源
发行版
17
需要
目标
发行版
17
java
:
警告
:
源
发行版
...
赞
踩
相关标签
java
spring boot
php
课程设计
开发语言
大数据
人工智能
java class数组
正则表达式
笔记
leetcode
mysql
算法