Java面试题收集(三)

2023-10-27

目录

1、Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

2、Spring的AOP关于拦截private。

3、项目中的数据字典缓存实现方式:

4、分布式缓存

5、如何保证分布式数据最终一致性

6、spring层面做事务和数据库层面做的区别,各种的实现方式

7、Spring事务管理(详解+实例)

8、Mysql默认的事务隔离级别:可重复读

9、项目中的加密算法对比(DES,AES,RSA,MD5,SHA1,Base64)

10、Spring框架IOC和AOP的实现原理,AOP在Spring框架中的应用

11、Java动态代理之JDK实现和CGlib实现

12、什么时候索引失效

13、索引什么时候最高效

14、Mysql中的char,varchar,text区别

15、为什么说Redis是单线程的以及Redis为什么这么快!

16、从内存划分说到了GC算法、分代思想,CMS和G1 collector,到类加载模型,tomcat的非双亲委派、线程上下文加载器,到JVM调优的策略,gc参数设置策略,如何找死锁,读快照,发现内存泄漏

17、tomcat类加载机制与JVM的类加载机制

18、java并发编程时需要注意事项:

19、线程同步方式(7种)及各个同步方式之间的区别

20、线程之间的通信(wait、notify、notifyAll进行线程之间的通信)

21、悲观锁与乐观锁的区别,底层实现原理

22、单例的七种写法及多线程使用的时候注意

23、常见的内存泄漏及防止

24、Java的内存调优

25、识别2的n次方,写个函数。(最快的是用位操作,大家应该都知道n&(n-1)可以去掉二进制最右的1,那2的n次幂&之后便为0)

26、http的相关知识

27、redis底层实现

28、海量数据的查找最大、重复数据等

29、Java中的IO、(同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO)

30、arraylist.sort怎么实现:(Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法)

31、100亿个数找最大1000个(说了分片,用堆,再归并)

32、hibernate 缓存 mybatis 缓存对比

33、SpringMVC和Struts对比

34、线程池的实现原理(ThreadPoolExcuter)

35、算法:手写字符串的正则匹配,实现*和.的功能,用的递归(写了一半他说时间差不多了,思想大概了解了)。

36、举例说说在什么情况下会出现性能瓶颈,如何优化(答了用NIO的方式)

37、NIO的实现netty(Netty实现原理浅析)

38、讲讲Spring中怎么对初始化的bean做其他操作。(这里有三种方式,@PostConstruct注解方式,init-method的XML配置方式,InitializingBean接口方式)

39、关于加密的私钥和公钥各自如何分配(客户端拿公钥,服务器拿私钥)


1、Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

http://www.importnew.com/28263.html

2、Spring的AOP关于拦截private。

private方法 在Spring使用纯Spring AOP(只能拦截public/protected/包)都是无法被拦截的 因为子类无法覆盖;包级别能被拦截的原因是,如果子类和父类在同一个包中是能覆盖的。 
在cglib代理情况下, execution(* *(..)) 可以拦截 public/protected/包级别方法(即这些方法都是能代理的)。

友情链接:https://www.cnblogs.com/protected/p/6652188.html

3、项目中的数据字典缓存实现方式:

1、通过全局HashMap实现:https://blog.csdn.net/bujibo/article/details/73811207

2、通过redis实现:http://www.cnblogs.com/leechenxiang/p/6115719.html

3、分布式系统缓存实现:https://blog.csdn.net/tangkund3218/article/details/50915007

4、一种基于“哨兵”的分布式缓存设计:http://blog.lichengwu.cn/architecture/2015/06/14/distributed-cache/

4、分布式缓存

友情链接:https://www.cnblogs.com/softidea/p/5555578.html

5、如何保证分布式数据最终一致性

友情链接:https://blog.csdn.net/hxpjava1/article/details/79409459

6、spring层面做事务和数据库层面做的区别,各种的实现方式

本质上其实是同一个概念,spring的事务是对数据库的事务的封装,最后本质的实现还是在数据库,假如数据库不支持事务的话,spring的事务是没有作用的.数据库的事务说简单就只有开启,回滚和关闭,spring对数据库事务的包装,原理就是拿一个数据连接,根据spring的事务配置,操作这个数据连接对数据库进行事务开启,回滚或关闭操作.但是spring除了实现这些,还配合spring的传播行为对事务进行了更广泛的管理.其实这里还有个重要的点,那就是事务中涉及的隔离级别,以及spring如何对数据库的隔离级别进行封装.事务与隔离级别放在一起理解会更好些。

Spring事务的实现方式(三种:XML配置,注解,AOP实现):https://www.cnblogs.com/WJ-163/p/6035462.html

数据库事务的实现原理:https://www.cnblogs.com/takumicx/p/9998844.html

7、Spring事务管理(详解+实例)

友情链接:http://www.mamicode.com/info-detail-1248286.html

8、Mysql默认的事务隔离级别:可重复读

9、项目中的加密算法对比(DES,AES,RSA,MD5,SHA1,Base64)

加密技术通常分为两大类:"对称式"和"非对称式"。

对称性加密算法:对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。(AES、DES、3DES

非对称算法:非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。(RSA、DSA、ECC

散列算法:散列算法,又称哈希函数,是一种单向加密算法。在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名。(MD5、SHA1、HMAC

友情链接:https://www.cnblogs.com/sochishun/p/7028056.html

10、Spring框架IOC和AOP的实现原理,AOP在Spring框架中的应用

IoC(Inversion of Control)

AOP(Aspect Oriented Programming)

https://www.cnblogs.com/cyhzzu/p/6644981.html

11、Java动态代理之JDK实现和CGlib实现

二者的区别:

  1. cglib实现原理是通过集成被代理类来实现动态代理的,因而类的修饰符不能含有final修饰符,并且方法同样不能使用static和final等修饰符,若含有就不能实现增强方法
  2. jdk实现原理:代理对象和被代理对象必须同时实现同一接口(即含有同一套规范).

代理模式、JDK、CGlib:https://blog.csdn.net/qq_27717967/article/details/73561179

静态代理和动态代理、JDK动态代理与CGlib动态代理:http://www.cnblogs.com/ygj0930/p/6542259.html

Spring在选择用JDK还是CGLiB的依据:https://www.cnblogs.com/bigmonkeys/p/7823268.html

12、什么时候索引失效

https://www.cnblogs.com/areyouready/p/7802885.html

1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.
 由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.
 错误的例子:select * from test where tu_mdn=13333333333;
 正确的例子:select * from test where tu_mdn='13333333333';
 2. 对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
 错误的例子:select * from test where id-1=9;
 正确的例子:select * from test where id=10;
 3. 使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
 错误的例子:select * from test where round(id)=10; 说明,此时id的索引已经不起作用了
 正确的例子:首先建立函数索引,create index test_id_fbi_idx on test(round(id));然后 select * from test where round(id)=10; 这时函数索引起作用了
 4. 以下使用会使索引失效,应避免使用;
 a. 使用 <> 、not in 、not exist、!=
 b. like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理)
 c. 单独引用复合索引里非第一位置的索引列.应总是使用索引的第一个列,如果索引是建立在多个列上, 只有在它的第一个列被where子句引用时,优化器才会选择使用该索引。
 d. 字符型字段为数字时在where条件里不添加引号.
 e. 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
 5. 不要将空的变量值直接与比较运算符(符号)比较。
 如果变量可能为空,应使用 IS NULL 或 IS NOT NULL 进行比较,或者使用 ISNULL 函数。
 6. 不要在 SQL 代码中使用双引号。
 因为字符常量使用单引号。如果没有必要限定对象名称,可以使用(非 ANSI SQL 标准)括号将名称括起来。
 7. 将索引所在表空间和数据所在表空间分别设于不同的磁盘chunk上,有助于提高索引查询的效率。
 8. Oracle默认使用的基于代价的SQL优化器(CBO)非常依赖于统计信息,一旦统计信息不正常,会导致数据库查询时不使用索引或使用错误的索引。

 一般来说,Oracle的自动任务里面会包含更新统计信息的语句,但如果表数据发生了比较大的变化(超过20%),可以考虑立即手动更新统计信息,例如:analyze table abc compute statistics,但注意,更新   统计信息比较耗费系统资源,建议在系统空闲时执行。
 9. Oracle在进行一次查询时,一般对一个表只会使用一个索引.
 因此,有时候过多的索引可能导致Oracle使用错误的索引,降低查询效率。例如某表有索引1(Policyno)和索引2(classcode),如果查询条件为policyno = ‘xx’ and classcode = ‘xx’,则系统有可能会使用索   引2,相较于使用索引1,查询效率明显降低。
 10. 优先且尽可能使用分区索引

13、索引什么时候最高效

表的主关键字

自动建立唯一索引

如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)

表的字段唯一约束

ORACLE利用索引来保证数据的完整性

如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)

直接条件查询的字段

在SQL中用于条件约束的字段

如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)

select * from zl_yhjbqk where qc_bh=’<????甼曀???>7001’

查询中与其它表关联的字段

字段常常建立了外键关系

如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)

select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’

查询中排序的字段

排序的字段如果通过索引去访问那将大大提高排序速度

select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)

select * from zl_yhjbqk where qc_bh=’7001’ order by cb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)

查询中统计或分组统计的字段

select max(hbs_bh) from zl_yhjbqk

select qc_bh,count(*) from zl_yhjbqk group by qc_bh

14、Mysql中的char,varchar,text区别

友情链接:https://www.cnblogs.com/chenpingzhao/p/4714411.html

15、为什么说Redis是单线程的以及Redis为什么这么快!

https://www.cnblogs.com/qwangxiao/p/8535202.html

16、从内存划分说到了GC算法、分代思想,CMS和G1 collector,到类加载模型,tomcat的非双亲委派、线程上下文加载器,到JVM调优的策略,gc参数设置策略,如何找死锁,读快照,发现内存泄漏

17、tomcat类加载机制与JVM的类加载机制

https://www.cnblogs.com/aspirant/p/8991830.html

18、java并发编程时需要注意事项:

1、上下文切换会带来额外的开销

2、避免死锁的情况

3、计算机资源会限制并发(误区:不是线程越多越好)

https://www.cnblogs.com/ldq2016/p/9104218.html

19、线程同步方式(7种)及各个同步方式之间的区别

https://www.cnblogs.com/XHJT/p/3897440.html

1、synchronized修饰方法,修饰静态方法是同步整个类。
2、synchronized修饰代码块
3、使用特殊域变量(volatile)实现线程同步)
4、使用重入锁实现线程同步(ReentrantLock)
5、使用局部变量实现线程同步 (ThreadLocal )
6、使用阻塞队列实现线程同步(LinkedBlockingQueue等)
7、使用原子变量实现线程同步(AtomicInteger等)

20、线程之间的通信(wait、notify、notifyAll进行线程之间的通信)

https://www.cnblogs.com/Wenxu/p/7979023.html

https://blog.csdn.net/qq_42473704/article/details/81942347

21、悲观锁与乐观锁的区别,底层实现原理

https://blog.csdn.net/qq_34337272/article/details/81072874

22、单例的七种写法及多线程使用的时候注意

https://www.cnblogs.com/Sharley/p/5315959.html

23、常见的内存泄漏及防止

https://blog.csdn.net/wtt945482445/article/details/52483944

24、Java的内存调优

https://www.cnblogs.com/andy-zhou/p/5327288.html

25、识别2的n次方,写个函数。(最快的是用位操作,大家应该都知道n&(n-1)可以去掉二进制最右的1,那2的n次幂&之后便为0)

26、http的相关知识

https://www.cnblogs.com/TomSnail/p/6078395.html

27、redis底层实现

https://blog.csdn.net/wcf373722432/article/details/78678504

28、海量数据的查找最大、重复数据等

https://blog.csdn.net/u010601183/article/details/56481868/

29、Java中的IO、(同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO)

https://www.cnblogs.com/dolphin0520/p/3916526.html

https://www.cnblogs.com/dolphin0520/p/3919162.html

30、arraylist.sort怎么实现:(Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法)

https://blog.csdn.net/qq_22167989/article/details/79236654

31、100亿个数找最大1000个(说了分片,用堆,再归并)

32、hibernate 缓存 mybatis 缓存对比

https://blog.csdn.net/yechuan_smile/article/details/80886235

https://blog.csdn.net/qq441568267/article/details/79566246

33、SpringMVC和Struts对比

34、线程池的实现原理(ThreadPoolExcuter)

https://www.cnblogs.com/zhaojinxin/p/6668247.html

35、算法:手写字符串的正则匹配,实现*和.的功能,用的递归(写了一半他说时间差不多了,思想大概了解了)。

36、举例说说在什么情况下会出现性能瓶颈,如何优化(答了用NIO的方式)

37、NIO的实现netty(Netty实现原理浅析)

http://www.importnew.com/15656.html

38、讲讲Spring中怎么对初始化的bean做其他操作。(这里有三种方式,@PostConstruct注解方式,init-method的XML配置方式,InitializingBean接口方式)

39、关于加密的私钥和公钥各自如何分配(客户端拿公钥,服务器拿私钥)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面试题收集(三) 的相关文章

  • chromebook刷_使用Chromebook编码

    chromebook刷 Chromebooks are awesome They re relatively simple and inexpensive devices that run Chrome OS a stripped down
  • 【linux】基本工具gcc/g++及Makefile

    文章目录 一 程序翻译过程 1 程序的翻译过程 2 理解选项的含义 3 动态链接与静态链接 二 Linux项目自动化构建工具 make Make le 1 背景 2 实例说明 3 原理 4 语法 5 为什么gcc不更新文件 6 推导规则 三

随机推荐

  • eclipse svn 忽略文件夹

    以忽略 target 文件夹为例 window gt preferences gt team gt Ignored Resource gt Add Pattern gt 新建一个 target gt ok 再次同步可见traget下所有文件
  • 2023华为OD机试真题Java实现【食堂供餐/二分法】

    题目内容 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求
  • 假如让你来设计SSL/TLS协议

    前言 说起网络通信协议 相信大家对 TCP 和 HTTP 都很熟悉 它们可以说是当今互联网通信的基石 但是 在网络安全方面 它们却是有着很大安全风险 窃听风险 第三方攻击者可以随意窃听通信内容 比如获取支付账号密码 冒充风险 第三方攻击者可
  • 在 WSL2 上部署 PyTorch

    开发项目需要使用AI 但是我习惯用 VMware 来开发各类项目 于是查到 Enable NVIDIA CUDA on WSL 可以实现 CUDA VGPU 的功能 但是国内对这类资料较少 我就想顺便补个空白 在 WSL2 上部署 PyTo
  • <金融产品>京东金融2015年战略主攻三大方向:股权众筹、农村金融和校园金融...

    导读 2014年是京东金融全力奔跑的一年 2015年京东金融业务将会在三个方面发力 上线股权众筹平台 发力农村金融和校园金融 2014年 凭借京东白条 京保贝 京东众筹等产品 京东金融迅速在互联网金融领域占领一席之地 京东CEO刘强东对京东
  • 阅读论文的方法

    清单一 系统阅读论文的方法 1 试着找个安静的地方呆上几个小时 拿上你最喜欢的饮料 可能是咖啡 茶 或者别的什么东西 我经常在咖啡厅里工作 2 从阅读标题和摘要开始 目的是获得论文的高层次概述 作者的主要目标是什么 以及一些实验结果 摘要通
  • 华为OD机试真题B卷 Java 实现【计算礼品发放的最小分组数目】,附详细解题思路

    一 题目描述 又到了一年的末尾 项目组让小明负责新年晚会的小礼品发放工作 为使得参加晚会的同时所获得的小礼品价值相对平衡 需要把小礼品根据价格进行分组 但每组最多只能包括两件小礼品 并且每个分组的价格总和不能超过一个价格上限 为了保证发放小
  • npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\licc\package.json'

    问题描述 在项目中使用npm安装gulp时报异常 node modle文件夹出不来 异常输出如下 npm WARN enoent ENOENT no such file or directory open C Users licc pack
  • yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo

    目录 前言 环境 导出yolov5s模型 编写Maven项目 编写pom xml文件 引入opencv依赖 下载opencv 获取opencv的jar包和动态链接库dll文件 将lib文件夹添加为Library 将yolov5权重文件放到资
  • C 中strcpy和memcpy的区别

    参考博客 https blog csdn net zcyzsy article details 53190691 https www cnblogs com metootxy p 3185000 html 一 以下是具体使用memcpy这个
  • 浅谈 Computed和Watch的区别

    computed 计算属性 类似于过滤器 对绑定到试图的数据进行处理 并监听变化进而执行对应的代码 基于它的依赖缓存 只有相关依赖发生改变时才会重新取值 而使用methods时 在重新渲染的时候 函数总会重新调用执行 computed属性默
  • Linux 虚拟化网络技术 — 虚拟网线(Veth-pair)

    虚拟网线 Veth pair Veth pair 不是一个设备 而是一对设备 作为虚拟网线用于连接两个虚拟网络设备 veth pair 是根据数据链路层的 MAC 地址对网络数据包进行转发的过程来实现的 本质是反转通讯数据的方向 需要发送的
  • C++Easyx教程(一)——如何在DEV-C++里安装Easyx库

    本文作者 C 橙羊 本文代码适合编译环境 DEV C 温馨提示 此文乃作者心血 如要转载请标注版权 否则视为抄袭 今天就算是我们Easyx教程的第一篇博文的诞生日了 那么今天橙羊就教大家如何在DEV C 里安装Easyx图形库 这里我用的是
  • 电子学会青少年C语言一级通过

    复习一级时 看了很多printf格式 整型 浮点型之类的问题 这就是考级 什么都考 覆盖面广 但考完不一定常用 计划继续报二级 主要考数组和字符串 三级开始考算法 其实可以考虑跨级报考 因为感觉每个级的内容相对独立 有人考了一级就考四级 五
  • 蛋白质结构域的概念_怎么查询蛋白质的全部信息 UniProKB数据库

    今天给大家介绍一个数据库 UniProKB数据库 网址http www uniprot org 这个数据库对于查询蛋白质相关信息还是很全面的 比如我们想要查询人类p53蛋白的主要功能 结构域 翻译后的修饰和参与的代谢途径 以及与它相互作用的
  • HTTP1.0和HTTP1.1

    什么是HTTP http是一个超文本传输协议 它是基于TCP协议的应用层传输协议 简单点说就是客户端和服务端进行数据传输的一种规则 http是一个无状态协议 它本身不会对发送过得请求和响应的通信状态进行持久化处理 这样做的目的是为了保持ht
  • 高效扩展性的全新Apple Mac Pro:专为专业工作流程与编程而设计

    随着科技的不断发展和专业工作需求的增加 全新的Apple Mac Pro应运而生 这款Mac Pro具备卓越的性能和出色的扩展功能 为专业人士提供了一个强大的工作平台 本文将探讨Mac Pro的特点 并提供一些适用于专业工作流程和编程的源代
  • 原生js实现分页功能

    原生就是实现分页功能 代码如下 var pagination function option fun this parentId option id 容器 this pageSize option pageSize 1 每页显示多少条 th
  • 参数校验(javax.validation)学习

    一 应用场景 页面表单有很多字段需要提交 因此使用注解校验的方式针对pojo的属性进行校验 因此使用javax标准以及org hibernate的validator的注解校验 二 依赖
  • Java面试题收集(三)

    目录 1 Java7 8 中的 HashMap 和 ConcurrentHashMap 全解析 2 Spring的AOP关于拦截private 3 项目中的数据字典缓存实现方式 4 分布式缓存 5 如何保证分布式数据最终一致性 6 spri