MY-Java高级面试题

1. jdk1.7 jdk1.8 Map 发生了什么变化 ( 底层 )?
1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组 + 链表结构变成数组 +
+ 红黑树。也就是说在 JVM 存储 hashMap K-V 时仅仅通过 key 来决定每一个 entry 的存
储槽位( Node[] 中的 index )。并且 Value 以链表的形式挂在到对应槽位上( 1.8 以后如果 value
长度大于 8 则转为红黑树)。
但是 hashmap1.7 1.8 中都没有任何同步操作,容易出现并发问题,甚至出现死循环
导致系统不可用。解决方案是 jdk ConcurrentHashMap ,位于 java.util.concurrent 下,专门
解决并发问题。
2. ConcurrentHashMap
思路与 hashMap 差不多,但是支持并发操作,要复杂很多
3. 并行跟并发有什么区别?
并发:指应用交替执行不同的任务,多线程原理
并行:指应用同时执行不用的任务
区别:一个是交替执行,一个是同时执行。
4. jdk1.7 jdk1.8 java 虚拟机发生了什么变化 ?
JVM 中内存份为堆、栈内存,及方法区。
栈内存主要用途: 执行线程方法,存放本地临时变量与线程方法执行是需要的引用对象
的地址。
堆内存主要用途: JVM 中所有对象信息都存放在堆内存中,相比栈内存,堆内存大很多
所以 JVM 一直通过对堆内存划分不同功能区块实现对堆内存中对象管理。
堆内存不够常见错误: OutOfMemoryError
栈内存溢出常见错误: StackOverFlowError
JDK7 以及其前期的 JDK 版本中,堆内存通常被分为三块区域 Nursery 内存 (young
generation) 、长时内存 (old generation) 、永久内存 (Permanent Generation for VM Matedata)
显示如下图:
在最上面一层是 Nursery 内存,一个对象被创建以后首先被房到 Nuersery 中的 Eden 存中,如果存活周期超过两个 Survivor (生存周期)之后会被转移到 Old Generation 中。
永久内存中存放对象的方法、变量等元数据信息。永久内存不够就会出现 以下错误:
java.lang.OutOfMemoryError:PermGen
但是在 JDK1.8 中一般都不会得到这个错误,原因在于: 1.8 中把存放元数据的永久内存
从堆内存中已到了本地内存( native Memory )中, 1.8 JVM 内存结构变成了如下图:
这样永久内存就不占用堆内存,可以通过自增长来避免永久内存错误。
-XX:MaxMetaspaceSize=128m 这只最大的远内存空间 128
JDK1.8 移除 PermGen ,取而代之的是 MetaSpace 源空间
MetaSpace 垃圾回收 :对僵死的类及类加载器的垃圾回收机制昂在元数据使用达到
MaxMetaSpaceSize ”参数的设定值时运行。
MetaSpace 监控: 元空间的使用情况可以在 HotSpot1.8 的详细 GC 日志输出中得到。
更新 JDK1.8 的原因:
1. 字符串存在永久代当中,容易出现性能问题和内存溢出
2. 类及方法的信息比较难确定其大小,因此对永久代的大小制定比较困难,太小容易出
现永久代溢出,太大则容易导致老年代溢出。
3. 永久代会为 GC 带来不必要的复杂度,并且回收效率偏低
4.Oracle 可能会想 HotSpot JRockit 合并。
5. 如果叫你自己设计一个中间件 , 你会如何设计 ?
我会从以下几点方面考虑开发:
1) 远程过程调用
2) 面向消息: 利用搞笑的消息传递机制进行平台无关的数据交流,并给予数据通信来
进行分布式系统的集成,有一下三个特点:
i)
通讯程序可以在不同的时间运行
ii) 通讯晨旭之家可以一对一、一对多、多对一甚至是
上述多种方式的混合
iii) 程序将消息放入消息队列会从小吸毒列中取出消
息来进行通讯
3) 对象请求代理: 提供不同形式的通讯服务包括 同步、排队、订阅发布、广播等
可构筑各种框架如: 事物处理监控器、分布数据访问、对象事务管理器 OTM 等。
4) 事物处理监控有一下功能:
a) 进程管理 ,包括启动 server 进程、分配任务、监控其执行并对负载进行平衡
b) 事务管理 ,保证在其监控下的事务处理的原子性、一致性、独立性和持久性
c) 通讯管理 ,为 client server 之间提供多种通讯机制,包括请求响应、会话、
排队、订阅发布和广播等
6. 什么是中间件?
中间件是处于操作系统和应用程序之间软件,使用时旺旺是一组中间件集成在一起,构
成一个平台(开发平台 + 运行平台),在这组中间件中必须要有一个通信中间件,即中间件 =
平台 + 通信。该定义也限定了只有勇于分布式系统中才能称为中间件
主要分类:远程过程调用、面向消息的中间件、对象请求代理、事物处理监控。
7. ThreadLock 用过没有 , 说说它的作用 ?
ThreadLock 为本地线程,为每一个线程提供一个局部变量,也就是说只有当前线层可以
访问,是线程安全的。原理:为每一个线程分配一个对象来工作,并不是由 ThreadLock
完成的,而是需要在应用层面保证的, ThreadLock 只是起到了一个 容器 的作用。原理为
ThreadLock set() get() 方法。
实现原理:
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null)
return (T)e.value;
}
return setInitialValue();
}
8. Hashcode ()和 equals ()和 == 区别 ?
(1) hashcode() 方法跟 equals() java 中都是判断两个对象是否相等
(2) 两个对象相同,则 hashcode 至一定要相同,即对象相同 ----> 成员变量相同
---->hashcode 值一定相同
(3) 两个对象的 hashcode 值相同,对象不一定相等。总结: equals 相等则 hashcode 定相等, hashcode 相等, equals 不一定相等。
(4) == 比较的是两个引用在内存中指向的是不是 同一对象(即同一内存空间)
9. mysql 数据库中 , 什么情况下设置了索引但无法使用 ?
(1) 索引的作用 :在数据库表中对字段建立索引可以大大 提高查询速度。
(2) Mysql 索引类型:
a) 普通索引
b) 唯一索引:唯一索引列的值必须唯一允许有空值,如果是组合索
引,则列值的组合必须唯一:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16)
NOT NULL, UNIQUE [indexName] (username(length)) );
c) 主键索引:一种特殊的唯一索引,不允许有空值,一般在创建表
的时候创建主键索引:
CREATE TABLE mytable(
ID INT NOT NULL,
username
VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
d) 组合索引: CREATE TABLE mytable( ID INT NOT NULL, username
VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT
NOT NULL );
为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是
name, city, age 建到一个索引里:代码如下 :
ALTER TABLE mytable ADD INDEX name_city_age
(name(10),city,age);
(3) 什么情况下有索引,但用不上?
a) 如果条件中有 OR ,即使其中有部分条件带索引也不会使用。
:要想使用 or ,又想让索引生效,只能将 or 条件中的每个列
都加上索引。
b) 对于多了索引, 不是使用的第一部分 ,则不会使用索引。
c) Like 查询以 % 开头,不使用索引
d) 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是
字符串,那一定要在条件中将数据使用引号引用起来 , 否则不使
用索引
e) Where 子句里对索引列上有数学运算,用不上索引
f)
Where 子句中对索引列使用函数,用不上索引
g) Mysql 估计使用全表扫描要比用索引快,不使用索引
(4) 什么情况下不推荐使用索引?
a) 数据唯一性差的字段不要使用索引
b) 频繁更新的字段不要使用索引
c) 字段不在 where 语句中出现时不要添加索引,如果 where 后含
IS NULL/IS NOT NULL/LIKE ‘% 输入符 %’ 等条件,不要使用索引
d) Where 子句里对索引使用不等于( <> ),不建议使用索引,效果 一般
10. mysql 优化会不会 ,mycat 分库 , 垂直分库 , 水平分库 ?
(1) 为查询缓存优化你的查询
(2) EXPLAIN select 查询: explain 的查询结果会告诉你索引主键是如何被利用的
(3) 只需要一行数据时使用 limit1
(4) 为搜索字段添加索引
(5) 在关联表的时候使用相当类型的例,并将其索引
(6) 千万不要 ORDER BY RAND()
(7) 避免 select*
(8) 永远为每张表设置一个 ID
(9) 使用 ENUM 而不是 VARCHAR
(10) PROCEDURE ANALYS() 提取建议
(11) 尽可能的使用 NOT NULL
(12) Java 中使用 Prepared Statements
(13) 无缓冲的查询
(14) IP 地址存成 UNSIGNED INT
(15) 固定表的长度
(16) 垂直分库:“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以
降低表的复杂度和字段的数目,从而达到优化的目的。
(17) 水平分库:“水平分割”是一种把数据库中的表按行变成几张表的方法,这样可以
降低表的复杂度和字段的数目,从而达到优化的目的。
(18) 越小的列会越快
(19) 选择正确的存储引擎
(20) 使用一个对象关系映射器
(21) 小心永久链接
(22) 拆分大的 DELETE INSERT 语句
11. 分布式事务解决方案 ?
(1) 什么是分布式事务?
a. 什么情况下需要用到分布式事务?
a) 当本地数据库断电、机器宕机、网络异常、消息丢失、消息乱序、
数据错误、不可靠 TCP 、存储数据丢失、其他异常等需要用到分
布式事务。
b) 例如:当本地事务数据库断电的这种秦光,如何保证数据一致
性?数据库由连个文件组成的,一个 数据库文件 和一个 日志文
件, 数据库任何写入操作都要先写日志,在操作前会吧日志文件
写入磁盘,那么断电的时候及时才做没有完成,在重启数据库的
时候,数据库会根据当前数据情况进行 undo 回滚活 redo 前滚,
保证了数据的强一致性。
c) 分布式理论:当单个数据库性能产生瓶颈的时候,可能会对数据
库进行分区(物理分区),分区之后不同的数据库不同的服务器
,此时单个数据库的 ACID 不适应这种清苦啊,在此集群环
境下很难达到集群的 ACID ,甚至效率性能大幅度下降,重要的 再很难扩展新的分区了。 此时就需要引用一个新的理论来使用
这种集群情况: CAP 定理
d) CAP 定理 : 由加州肚饿伯克利分销 Eric Brewer 教授提出,指出 WEB
服务无法同时满足 3 个属性
a. 一致性:客户端知道一系列的操作都会同时发生
(生效)
b. 可用性:每个操作都必须以可预期的响应结束
c. 分区容错性:及时出现单组件无法可用,操作依然
可以完成。
具体的将在分布式系统中,在任何数据库设计中,一个 WEB
至多只能同时支持上面两个属性。设计人员必须在一致性和可用
性之间做出选择。
e) BASE 理论:分布式系统中追求的是可用性,比一致性更加重要,
BASE 理论来实现高可用性。核心思想是: 我们无法做到羟乙酯,
单每个应用都可以根据自身的业务特点,采用适当的方式使系
统达到最终一致性。
f)
数据库事务特性: ACID
i.
原子性
ii. 一致性
iii. 独立性或隔离性
iv. 持久性
(2) 分布式系统中,实现分布式事务的解决方案:
a. 两阶段提交 2PC
b. 补偿事务 TCC
c. 本地消息表(异步确保)
d. MQ 事务消息
e. Sagas 事务模型
(3)
12. sql 语句优化会不会 , 说出你知道的 ?
(1) 避免在列上做运算,可能会导致索引失败
(2) 使用 join 时应该小结果集驱动大结果集,同时把复杂的 join 查询拆分成多个 query
不然 join 越多表,会导致越多的锁定和堵塞。
(3) 注意 like 模糊查询的使用,避免使用 %%
(4) 不要使用 select * 节省内存
(5) 使用批量插入语句,节省交互
(6) Limit 基数比较大时,使用 between and
(7) 不要使用 rand 函数随机获取记录
(8) 避免使用 null ,建表时,尽量设置 not nul ,提高查询性能
(9) 不要使用 count id ),应该使用 count *
(10) 不要做无谓的排序,尽可能在索引中完成排序
(11) From 语句中一定不要使用子查询
(12) 使用更多的 where 加以限制,缩小查找范围 (13) 合理运用索引
(14) 使用 explain 查看 sql 性能
13. mysql 的存储引擎了解过没有 ?
(1) MySQL 存储引擎种类:
(2) https://blog.csdn.net/m0_37888031/article/details/80704344
(3) https://blog.csdn.net/m0_37888031/article/details/80664138
(4) 事务处理:在整个流程中出现任何问题,都能让数据回滚到最开始的状态,这种处
理方式称之为事务处理。也就是说事务处理 要么都成功,要么的失败。
14. 红黑树原理?
(1) 红黑树的性质:红黑树是一个二叉搜索树。在每个节点增加了一个存储位记录节点
的颜色,可以是 RED ,也可以是 BLACK ,通过任意一条从根到叶子简单路径上颜色
的约束, 红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:
i.
每个节点颜色不是黑色就是红色
ii. 根节点的颜色是黑色的
iii. 如果一个节点是红色,那么他的两个子节点就是黑色的,
没有持续的红节点
iv. 对于每个节点,从该节点到其后代叶节点的简单路径上,
均包含相同数目的黑色节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全:重要性与应对措施

1. 网络安全的重要性 随着互联网的普及和信息技术的快速发展&#xff0c;网络安全问题已经变得日益突出。网络攻击者可以通过各种手段窃取个人信息、破坏系统、传播病毒等&#xff0c;给个人和社会带来巨大的损失。因此&#xff0c;网络安全已经成为信息化时代的重要问题之一。…

【MySQL】如何判断一个数据库是否出问题

在实际的应用中&#xff0c;其实大多数是主从结构。而采用主备&#xff0c;一般都需要一定的费用。 对于主备&#xff0c;如果主机故障&#xff0c;那么只需要直接将流量打到备机就可以&#xff0c;但是对于一主多从&#xff0c;还需要将从库连接到主库上。 对于切换的操作&a…

百度获评CCIA数据安全和个人信息保护社会责任评价“三星”示范单位

日前&#xff0c;由中国网络安全产业联盟&#xff08;CCIA&#xff09;数据安全工作委员会主办的“促进数据安全合规流通使用”专题研讨会&#xff08;CCIA数安委年度会议&#xff09;成功举办。与会介绍了数据安全和个人信息保护社会责任试点评价工作的开展情况&#xff0c;并…

LangChain-11 Code Writing FunctionCalling 大模型通过编写代码完成需求 大模型计算加法

背景简介 我们知道GPT模型对于内容的输出&#xff0c;是对下一个字符的预测&#xff0c;通过概率选出下一个文本。 而且我们也知道&#xff0c;训练样本是非常庞大的&#xff0c;对于GPT来说&#xff0c;也是有可能学习过1 1 2的。 当我们向GPT询问11 时&#xff0c;完全可以…

FME学习之旅---day21

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式&#xff1a;使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色&#xff0c;而…

电商行业网络安全不可小视,如何保障网商平台的稳定

随着互联网的全面普及&#xff0c;基于互联网的电子商务也应运而生&#xff0c;并在近年来获得了巨大的发展&#xff0c;成为一种全新的商务模式&#xff0c;被许多经济专家认为是新的经济增长点。 作为一种全新的商务模式&#xff0c;它有很大的发展前途&#xff0c;同时&…

基于Java+SpringBoot+vue3+uniapp口红销售/商城管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

java错误记录

文章目录 javaslf4j中log不存在 maven编译出现Non-resolvable import POM: Failure to find类找不到jdk版本不对 java slf4j中log不存在 解决方法&#xff1a;再idea中安装lombok插件。 离线下载地址 https://github.com/mplushnikov/lombok-intellij-plugin/releases&#x…

【二分查找】Leetcode 点名

题目解析 LCR 173. 点名 算法讲解 1. 哈希表 class Solution { public:int takeAttendance(vector<int>& nums) {map<int, int> Hash;for(auto n : nums) Hash[n];for(int i 0; i < nums[nums.size() - 1]; i){if(Hash[i] 0)return i;}return nums.si…

实验模拟gfs 五大逻辑卷

目录 一 实验环境 二 4台服务端准备工作 1&#xff0c;66,77,88,99 四台机器加4块磁盘 2&#xff0c; scan 刷新磁盘供电接口 并查看 3&#xff0c;改主机名&#xff0c;方便后续操作 4&#xff0c;为加快访问速度 写hosts文件 做映射&#xff08;55客户机也写&…

Google Cookie意见征求底部弹窗

关于欧盟 Cookie 通知 根据2024年欧盟的《通用数据保护条例》以及其他相关法规&#xff0c;要求google cookie的使用必须征求用户的同意&#xff0c;才能进行收集用户数据信息&#xff0c;因此跨境独立站&#xff0c;如果做欧洲市场&#xff0c;就必须弹出cookie收集数据弹窗&a…

【MATLAB源码-第183期】基于matlab的图像处理GUI很全面包括滤波,灰度,边缘提取,RGB亮度调节,二值化等。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. RGB颜色亮度调整 1.1 RGB颜色模型 RGB颜色模型是一种加色模型&#xff0c;使用红色&#xff08;R&#xff09;、绿色&#xff08;G&#xff09;、蓝色&#xff08;B&#xff09;三种颜色的不同组合来表示各种颜色。每种…

第9章 文件和内容管理

思维导图 9.1 引言 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。文件和非结构化内容也应是安全且高质量的。 确保文件和内容…

Paper Reading

使用diffusion mode生成synthetic images&#xff0c;用于enhance traning data: 1. FreeMask: Synthetic Images with Dense Annotations Make Stronger Segmentation Models (NurIPS 2024) Challenges: Generating in-domain imagesGenerating high-quality imagesGenera…

【零基础学数据结构】顺序表

目录 1.了解数据结构 什么是数据结构&#xff1f; 为什么要进行数据管理&#xff1f; 2.顺序表 顺序表概要解析&#xff1a; ​编辑顺序表的分类&#xff1a; 差别和使用优先度&#xff1a; 1.创建顺序表 1.1顺序表分为静态顺序表和动态顺序表 1.2顺序表的初始化…

Ps 滤镜:查找边缘

Ps菜单&#xff1a;滤镜/风格化/查找边缘 Filter/Stylize/Find Edges 查找边缘 Find Edges滤镜能够突出图像中的边缘&#xff0c;同时保留原图的颜色信息。 “查找边缘”滤镜通过分析图像的色彩和亮度变化来识别边缘。 这种处理方式使得图像的主要轮廓以一种艺术化的线条形式被…

本地部署google大模型并编写程序调用流式输出

目录 ollamagemma客户端调用 ollama 本地安装ollama gemma 下载并部署模型 本机资源有限&#xff0c;可以下个2b的相对较小的模型 执行命令 ollama run gemma:2b客户端调用 import requests import jsondata {"model": "gemma:2b","messages&quo…

虚拟机网络配置

1. 为什么要配置&#xff1f; 当我们创建好一个虚拟机并在网络方面未作更改由虚拟机自动生成ip地址时&#xff0c;虚拟机的ip地址是处于动态变化的&#xff0c;每次开启都会再随机生成一个新的ip&#xff1b;这不利于我们通过其他设备远程连接该虚拟机&#xff0c;这时候需要我…

C++(13): 智能指针shared_ptr

1. 概述 shared_ptr智能指针&#xff0c;本质是“离开作用域会自动调整(减小)引用计数&#xff0c;如果引用计数为0&#xff0c;则会调用析构函数”。这样一来&#xff0c;就进化成类似于int、float等的一种会被自动释放的类型。 2. 初始化智能指针 初始化一个智能指针的方式比…

1.Spring的核心思想 —— IOC和DI

1. Spring是什么&#xff1f; 简单的说&#xff0c;Spring其实指的是Spring Framework&#xff08;Spring框架&#xff09;&#xff0c;是一个开源框架。 如果要用一句话概括&#xff1a;它是包含众多工具方法的IOC&#xff08;Inverse of Control控制反转&#xff09;容器。…