面试笔记 8.5

面试常见:

Jvm,高并发,多线程,数据库,redis,框架

1.N I/O有什么核心组件

Java NIO 基本原理以及三大核心组件_java nio核心组件有哪些-CSDN博客

Buffer 缓冲  Channel  一对一 Channel 读取数据 

Selector对应线程池  (环形链表)

2. Select  Poll Epoll区别

用户空间(用户需要的数据)和内核()

select 交换两次

poll 优化大小限制

epoll 交互的次数  0拷贝 直接用户空间和用户空间

http://t.csdnimg.cn/L6jHm

3.Http和Https的区别

HTTP 与 HTTPS 的区别 | 菜鸟教程 (runoob.com)

http超文本传输协议

https超文本传输安全协议 比如银行和金融

http是一个简单的无状态的 https是通过加密的,安全性高

http是免费的

他俩传输协议和端口号不一样

https端口号443 redis端口6379  mysql端口3306  ssh端口21

缺点:

https握手 不完全安全 涉及CA(Certificate Authority,数字证书认证机构) 申请证书

4.Jvm的结构

http://t.csdnimg.cn/tEmGW

5.Java类加载的全过程

http://t.csdnimg.cn/foByX

一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为链接(Linking)。

6.(jvm)一个对象从加载到jvm开始到GC回收,经历的过程是什么

JVM基础 -> ⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?_普通对象到第一次gc经理什么-CSDN博客

⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?

  1. ⾸先类加载器把字节码⽂件内容加载到⽅法区,当然类加载器这中间用双亲委派机制加载

  2. 然后再根据加载完方法区中的类信息在堆区为对象分配内存丶初始化零值丶设置对象头执行 init 方法

    1. 分配内存: 确定大小的内存从 Java 堆中划分出来
    2. 初始化零值: 将分配到的内存空间都初始化为零,这样对象只定义,不初始化也可以用
    3. 设置对象头: 对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等
    4. 执行 init 方法: 最后就是调用构造方法了,初始化对象,完成创建
  3. 对象⾸先会分配在堆内存中新⽣代的Eden

    • 小对象分配在新⽣代的Eden。然后经过新生代GC,对象如果存活,就会进⼊S区。
      • 在后续的每次GC中,如果对象⼀直存活,就会在S区来回拷⻉,每移动⼀次,年龄加1。
      • 多⼤年龄才会移⼊⽼年代? 年龄最⼤15, 超过⼀定年龄后,对象转⼊⽼年代。
    • 对象够大,分配在老年代
      • JDK 6 之前存在空间担保 -> 老年代保证我会保留一个连续内存大小的内存空间
        • 如果内存不够,你就可以FullGC,还不够内存溢出
        • 如果内存够,那就存进去
      • JDK 6 之后 -> 老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小(动态年龄)
        • 如果内存不够,你就可以FullGC,还不够内存溢出
        • 如果内存够,那就存进去
  4. 当创建对象的⽅法执⾏结束后,栈中的指针会先移除掉了,对象就没有GC Roots根节点的引用了

  5. 然后GC根据可达性分析法,判断对象是否可以被回收

  6. 最后GC线程调用合适的GC算法清理掉可回收的对象

总结

1.创建对象的时候,jvm在方法区寻找对象相关信息,然后创建对象

2.在堆里面创建对象,是半初始化状态

3.对象首先会分配在堆内存中新生代Eden

4.当创建对象的⽅法执⾏结束后,栈中的指针会先移除掉了,对象就没有GC Roots根节点的引用了

5.然后GC根据可达性分析法,判断对象是否可以被回收

6.最后GC线程调用合适的GC算法清理掉可回收的对象

7.怎样确定这个对象是否被回收

Java垃圾回收机制(如何判断一个对象是否该回收)_3.java垃圾收集机制,并描述垃圾收集器如何判断一个对象是否能被收集。-CSDN博客

1.引用计数法 

计数器为0,等于垃圾,被回收

给对象增加一个计数器,当有引用它时,计数器就加一,当引用失效时,计数器就减一;

2.根可达性分析法

Java则是用了这种方法来判断是否需要回收对象;

此算法的核心思想为 : 通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称之为"引用链",当一个对象到GC Roots没有任何的引用链相连时(从GC Roots到这个对象不可达)时,证明此对象是不可用的;

8.Jvm有哪些垃圾回收算法   

JVM的4种垃圾回收算法、垃圾回收机制与总结_jvm垃圾回收机制有几种-CSDN博客

1.标记清除算法

2.标记复制算法(拷贝算法)

3.标记整理算法

4.分代收集算法

5.增量收集算法

6.分区算法

9.什么是STW,我们能避免它吗?

不能避免,可以进行优化

STW,即Stop-The-World的缩写,指的是系统在执行特定操作时需暂停(停止)所有应用程序线程。

JVM的4种垃圾回收算法、垃圾回收机制与总结_jvm垃圾回收机制有几种-CSDN博客

JVM对垃圾回收站进行算法处理的时候,STW是把jvm内存冻结的一种状态,在这个状态下,java所有线程都是停止状态,除了GC。 

10.如何进行jvm调优,jvm的参数有哪些

http://t.csdnimg.cn/yPY36

Jvm调优,一中是标注指令,一种是非标准指令,还有不稳定参数。

标准指令是-开头 

非标准指令 -x 

java -XX:+PrintCommandLineFlags : 查看当前命令的不稳定指令。
java -XX:+PrintFlagsInitial : 查看所有不稳定指令的默认值。
java -XX:+PrintFlagsFinal: 查看所有不稳定指令最终生效的实际值。

9.MQ是什么?有什么作用

MQ是消息队列,先进去的先出去的数据结构,消息由生产者生产,排队,由消费者进行处理。

 作用:

1.异步,作用是提高系统的响应速度和吞吐量

2.解耦,减少服与服的耦合度,减少响应时间,提高性能稳定性和可扩展性

3.削峰,稳定系统对突发流量的处理

应用场景:电商,用户要求响应时间短的类型

10.如何进行MQ产品的选型

MQ选型:ActiveMQ、RocketMQ、RabbitMQ、Kafka对比_rocketmq和rabbitmq哪个用的多-CSDN博客

MQ目前的产品RocketMQ,RabbitMQ,Kafka,ActiveMQ

Kafka

优点 吞吐量大,性能大,集群高可用

缺点 会丢失数据,功能单一

使用场景 日志分析 大数据采集等

RabbitMQ

优点 消息可靠性高,功能全面 

缺点 吞吐量低 消息积累会严重影响性能 使用的是erlang语言(不好定制)

使用场景 小规模的场景

RocketMQ 

 优点 高吞吐 高性能 高可用 功能非常全面

 缺点 开源版不如商业版功能 官方文档和周边不够成熟

使用场景 都可以用

11.如何能保证消息不丢失

1.生产者发送消息不丢失

1.消息发送给与反馈

2.手动开启事物保证消息不丢失

3.Publisher Confirm 发布确认的方式

2.同步不丢失

1.同步会丢失,异步不会丢失,采用异步的方式

2.消息存盘,保存在磁盘上面,发布一条后,再删除

4.消费者不丢失,采用默认方式消费

5.手动提交

12.如何保证消息消费的幂等性

消息中间件(三)——如何保证消息幂等性_如何保证消息的幂等性-CSDN博客

1.消息给与唯一的标识

13.如何保证消息的顺序

 RabbitMQ如何保证消息的顺序性【重点】-CSDN博客

线程取模 

14.如何保证消息队列的高效读写

上图  用到了4次拷贝  提高效率 做到0拷贝

0拷贝不经过用户态 用户空间
MappedByteBuffer
FileChannel

mmap   

使用小文件操作 不超过2G

transfile

没有文件限制 

15.MQ如何保证分布事物的最终一致性

RocketMQ事务消息如何保证数据的最终一致性_rocketmq 一致性-CSDN博客

1.生产者保证100 的头列

2.消费者保证幂等性消费,不然会造成重复消费和多次消费

16.让你去设计MQ你会怎么去设计?

1.实现一个单机队列的数据结构,是高效的,可扩展的

2.把单机队列拓展成可分布式的  集群进行处理

3.定制的一个策略,根据主题进行消息定制 (根据主题发送消息策略)I/O 实现0拷贝

4.实现一些高效的读写

17.为什么使用缓存

缓存具有高性能, 高可用的特性 ,减少对数据库的直接访问,比如连接次数

18.缓存穿透,击穿,雪崩

面试redis(缓存)--01-CSDN博客

1.缓存穿透(恶意攻击,数据库没有值)

缓存,数据库都查询不到数据

解决方法

1.缓存空值

2.设置访问名单

3.采用布隆过滤器 (空间查询效率高)

4.进行实时监控

2.缓存击穿(数据库中有值)

给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。

解决方案:

1.设置热点缓存永不过期

2.预设热门数据

3.设置实事监控

4.互斥锁

5.逻辑穿透

雪崩

缓存大量过期,导致请求直接访问数据库,导致雪崩

 解决方法

1.添加多级缓存

2.设置更新标识缓存

3.将缓存过期时间分散

4.锁,队列的机制

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

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

相关文章

双轮驱动产品持续商业成功

获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取,请见下图

前端(五):前端工程化

前端工程化是指在企业级的前端开发项目中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 一、环境准备 (一)环境准备 1、Vue-cli:是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板。 2、…

myeclipse 2020 下载 安装 汉化

1,解压 myeclipse 2020 压缩包到当前目录下: 点击此处蓝色字体下载压缩包 提取码 k3x9 2,鼠标右键 点击 myeclipse 2020.exe 选择 以管理员身份运行 : 3,等待加载: 4,点击 Next : 5…

正则表达式测试工具

前言 正则表达式测试工具可供您输入正则表达式和测试文本,立即查看匹配结果. 下面是离线的HTML文件,同样可以提供相同的服务. 目录 使用说明 HTML代码 正则表达式的编写经验和方法 总结 使用说明 1.先将HTML代码存储成.html为后缀的文件; 2.然后用浏览器打开这个…

C++空指针(nullptr)

C空指针(nullptr) ​ 在C语言中我们把空指针定义成NULL,但是这在C中会有所问题,因为C对指针类型转换比较严格。下面让我来深入了解一下NULL与nullptr。 NULL实际就是一个宏,在C头文件(stddef.h)中,可以看到如下代码:…

【ML】transform 之 decoder 及其实现细节

【ML】transform 之 decoder 及其实现细节 1. decoder2. encoder 和decoder 之间是如何处理和传递讯息的?self-attention3. 查询(Query)、键(Key)、值(Value)是三个核心概念及其具体含义和计算方…

二十八、【人工智能】【机器学习】- 隐马尔可夫模型 (Hidden Markov Models, HMMs)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

模型 MBTI(性格模型)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。探索真我,和谐人际。 1 MBTI性格模型的应用 1.1 跨国公司团队协作改进 ABC公司是一家全球性的科技公司,其研发团队由来自世界各地的工程师和设计师组成。尽管团队成员个个才华…

【Linux操作系统】关于深度睡眠与浅度睡眠进程的理解

目录 一、可中断的睡眠状态(S浅度睡眠状态)二、不可中断的睡眠状态(D深度睡眠状态)三、关于S浅度睡眠状态与D深度睡眠状态的理解 一、可中断的睡眠状态(S浅度睡眠状态) S(sleeping)…

【docker】docker和镜像仓库

阿里云镜像仓库(Aliyun Container Registry)是阿里云提供的容器镜像存储和管理服务。它以Docker Registry协议为基础,为容器开发者提供了稳定可靠的镜像存储和分发服务。 使用阿里云镜像仓库,您可以将自己的Docker镜像推送到阿里…

sqliabs靶场练习

关卡 熟悉Mqsql相关命令Less-1Less-2Less-3Less-4Less-5Less-6Less-7Less-8Less-9Less-10 熟悉Mqsql相关命令 首先先熟悉一下Mysql的相关命令,可能在SQL注入的时候会用到。 1.查询服务器主机信息 HOSTNAME 主机名称 datadir——数据库路径 version_compile_os—…

Golang | Leetcode Golang题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; func wiggleSort(nums []int) {n : len(nums)x : (n 1) / 2target : quickSelect(nums, x-1)transAddress : func(i int) int { return (2*n - 2*i - 1) % (n | 1) }for k, i, j : 0, 0, n-1; k < j; k {tk : transAddress(k)if nums[t…

【Android】四大组件(Activity、Service、Broadcast Receiver、Content Provider)、结构目录

文章目录 Android系统架构Android四大组件ActivityServiceBroadcast ReceiverContent Provider 两大视图主要结构目录 Android系统架构 https://blog.csdn.net/xzzteach/article/details/140904613 Android四大组件 Activity 一个 Activity 包含了用户能够看到的界面&#xff0…

【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用

目录 背景 CVE-2012-1823 发散利用 法一&#xff1a;读文件 法二&#xff1a;数据外带 背景 CVE-2012-1823 PHP-CGI远程代码执行漏洞&#xff08;CVE-2012-1823&#xff09;分析 | 离别歌 省流&#xff1a; 命令行参数不光可以通过#!/usr/local/bin/php-cgi -d include…

C语言典型例题27

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.4 用下面的scanf函数输入数据 使a3,b7,x8.5,y71.8,c1A,c2a。问在键盘上怎么输入 代码 //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习题2.4 用下面的scanf函数输入数据&#xff0c;使…

卷积神经网络 - 结构化输出篇

序言 卷积神经网络&#xff08; CNN \text{CNN} CNN&#xff09;作为深度学习领域的重要分支&#xff0c;凭借其强大的特征提取与学习能力&#xff0c;在图像和视频处理领域取得了显著成就。其结构化输出的特性&#xff0c;更是为复杂任务的解决提供了有力支持。本文旨在简要概…

C++ | Leetcode C++题解之第328题奇偶链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* oddEvenList(ListNode* head) {if (head nullptr) {return head;}ListNode* evenHead head->next;ListNode* odd head;ListNode* even evenHead;while (even ! nullptr && even->next…

DAMA学习笔记(十一)-元数据管理

1.引言 元数据最常见的定义是“关于数据的数据”。它描述了数据本身&#xff08;如数据库、数据元素、数据模型&#xff09;&#xff0c;数据表示的概念&#xff08;如业务流程、应用系统、软件代码、技术基础设施&#xff09;&#xff0c;数据与概念之间的联系&#xff08;关系…

SQL注入(闯关游戏)

目录 关卡1 关卡2 关卡3 关卡4 关卡5 关卡6 关卡7 关卡8 关卡9 关卡10 关卡11 关卡12 关卡13 关卡14 关卡15 关卡16 关卡17 关卡18 关卡19 关卡20 关卡21 关卡22 关卡23 关卡24 关卡1 (联合查询) ?gid1 第一件事情就是逃脱单引号的控制——》为了闭…

表字段显示tip

需求背景&#xff1a; 生成的报表&#xff0c;前端只展示字段名称&#xff0c;计算逻辑没有解释&#xff0c;使用方频繁“骚扰”&#xff0c;实在受不了&#xff0c;增加一个字段tip&#xff0c;实现效果&#xff08;下图&#xff09;&#xff1a; 代码 结合使用el-table-colu…