当前位置: 首页 > news >正文

大厂面试题分享第二期

大厂面试题分享第二期

  • 如果执行了一条命令,"select count(*)from…",使用哪个引擎更快,为什么?
  • 垃圾回收器 CMS 和 G1的区别
  • 介绍一下CMS和G1
    • CMS(并发)垃圾收集器
    • G1垃圾回收器
  • HTTPS和HTTP的区别主要如下:
    • HTTPS 解决了 HTTP 的哪些问题?
    • 主要介绍一下混合加密方式
    • 非对称加密算法
  • TCP和UDP区别是什么?
  • Leetcode25:K个一组翻转链表

如果执行了一条命令,“select count(*)from…”,使用哪个引擎更快,为什么?

EXPLAIN SELECT COUNT(*)FROM user;
EXPLAIN SELECT COUNT(列名) FROMuser;
EXPLAIN SELECT COUNT(1)FROM user;

执行效果上:

  1. count(*)包括了所有的列,在统计时 不会忽略列值为null的数据。
  2. count(1)用1表示代码行,在统计时,不会忽略列值为null的数据。
  3. count(列名)在统计时,会忽略列值为空的数据,就是说某个字段的值为null时不统计。

执行效率上:

  • InnoDB引擎:count(字段)<count(1)=count(*)
    • InnoDB通过遍历最小的可用二级索引来处理select count*)语句,如果二级索引不存在,则通过扫描(主键索引)聚集索引来处理。
    • InnoDB已同样的方式处理count(1)和count(*)·

InnoDB中索引分为聚簇索引(主键索引)和非聚簇索引(非主键索引),聚簇索引的叶子节点中保存的是整行记录,而非聚簇索引的叶子节点中保存的是该行记录的主键的值。所以,相比之下,非聚簇索引要比聚簇索引小很多,所以MySQL会优先选择最小的非聚簇索引来扫表。所以,当我们建表的时候,除了主键索引以外,创建一个非主键索引还是有必要的。

  • MyISAM引擎:count(字段)<count(1)<= count(*)。
    • MyISAM存储了数据的准确行数,使用 count(*)会直接读取该行数,只有当第一列定义为NOT NULL时,count(1),才会执行该操作,所以优先选择count(*)

count(列名)会遍历整个表,但不同的是,它会先获取列,然后判断是否为空,然后累加,因此count(列名)性能不如前两者。

垃圾回收器 CMS 和 G1的区别

在这里插入图片描述
区别一:使用的范围不一样:

  1. CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用
  2. G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用

区别二:STW的时间:

  1. CMS收集器以最小的停顿时间为目标的收集器。
  2. G1收集器可预测垃圾回收区 的停顿时间(建立可预测的停顿时间模型)

区别三: 垃圾碎片

  1. CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片·
  2. G1收集器使用的是“标记-整理”算法,进行了空间整合,没有内存空间碎片。

介绍一下CMS和G1

CMS(并发)垃圾收集器

CMS(Concurrent-Mark-Sweep),是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年垃圾回收的。

  • CMS 收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短(低延迟) 就越适合与用户交互的程序,良好的响应速度能提升用户体验

  • CMS 的垃圾收集算法采用 标记-清除算法,并且也会 “Stop-the-world”
    在这里插入图片描述

  • 初始标记(Initial-Mark) 阶段: 在这个阶段中,程序中所有的工作线程都将会因为 “Stop-the-World” 机制而出现短暂的暂停,这个阶段的主要任务仅仅只是标记出 GC Roots 能直接关联到的对象

  • 并发标记(Concurrent-Mark) 阶段: 从 GC Roots 的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行

  • 重新标记(Remark) 阶段: 由于在并发标记阶段中,程序的工作线程会和垃圾收集线程同时运行或者交叉运行,因此为了修正并发标记期间,因用户线程继续运作而导致标记产生变动的那一部分对象的标记记录,仍然需要暂停所有工作线程

  • 并发清除(Concurrent-Sweep) 阶段: 此阶段清理删除掉标记阶段判断已经死亡的对象,释放内存空间。由于不需要移动存活对象,所以这个阶段也可以与用户线程同时并发的
    在这里插入图片描述

CMS垃圾收集器虽然减少了暂停应用程序的运行时间,但是它还是存在着内存碎片问题,于是为了去除内存碎片问题,同时有保留CMS垃圾收集器低暂停时间的优点,

G1垃圾回收器

G1垃圾回收器包括以下步骤:
在这里插入图片描述

  1. 初始标记(Initial Mark):这一步主要标记GC Roots引用的对象为存活。GCRoots是垃圾回收的起始点,通常是活跃的对象。
  2. 并发标记(Concurrent Mark):在这一阶段,垃圾回收器会并发地遍历堆中的对象图,将初始标记阶段标记为存活的对象引用的对象也标记为存活。
  3. 最终标记(Final Mark or Remark):此步骤会再次检查并标记在并发标记阶段可能被漏标的对象,确保所有存活的对象都被正确地标记。同时,任何不再关联的对象也会被标记。
  4. 并发清理(Cleanup):这一步骤将存活的对象复制到其他Region,确保没有内存碎片的产生。G1垃圾回收器通过这种方式优化内存使用,并提高后续的垃圾回收效率

G1垃圾回收器对老年代的清理策略是选择存活度最低的区域进行回收,这样可以高效地回收内存,这也是G1(Garbage first)名称的由来。在清理阶段,G1使用复制算法,确保内存碎片的最小化。

HTTPS和HTTP的区别主要如下:

由于HTTP协议传输的数据是明文格式的,因此发送隐私信息时存在着安全风险。为确保数据传输安全性,网景公司推出了SSL(Secure Sockets Layer)协议,并在其基础上创造出了HTTPS通信方式。简而言之,HTTPS是一种安全、支持加密传输和身份认证功能的网络通信方式,它是在SSL与HTTP结合后诞生的。

  1. http是超文本传输协议,信息是明文传输,存在安全风险问题,https则是在TCP和HTTP层之间加入了SSL/TLS安全协议,使得报文能够加密传输
  2. HTTP链接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输,而HTTPS在TCP三次握手之后,还需要进行SSL/TLS的握手过程,才可进行加密报文传输
  3. 端口不一样 HTTP默认端口号80 HTTPS默认端口到是443
  4. https协议需要向CA(证书权威机构申请数字证书),来保证服务器的身份是可信的

HTTPS 解决了 HTTP 的哪些问题?

HTTP 由于是明文传输,所以安全上存在以下三个风险:

  1. 窃听风险,比如通信链路上可以获取通信内容,用户号容易没
  2. 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  3. 冒充风险,比如冒充淘宝网站,用户钱容易没,

HTTPS 是如何解决上面的三个风险的?

  1. 混合加密的方式实现信息的机密性,解决了窃听的风险。
  2. 摘要算法(哈希算法)的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性 解决了算改的风险。
  3. 将服务器公钥放入到数字证书中,解决了冒充的风险。

主要介绍一下混合加密方式

在这里插入图片描述
HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式:

在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。.采用「混合加密」的方式的原因:

  1. 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
  2. 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢

通过混合加密的方式可以保证信息的机密性,解决了窃听的风险。

非对称加密算法

非对称加密算法中共有两个密钥:

  • 一个是公钥,这个是可以公开给所有人的;
  • 一个是私钥,这个必须由本人管理,不可泄露,

这两个密钥可以双向加解密的,比如可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容。流程的不同,意味着目的也不相同:

  1. 公钥加密,私钥解密,目的是为了保证内容的传输安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容【客户端向服务器发送消息,但可能存在中间人伪造了一份公钥私钥
  2. 私钥签名,公钥验签,目的是为了保证消息不回被冒充,因为私钥不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。【CA证书机构,确保客户端拿到的是服务器的公钥,而不是中间人的公钥

数字证书认证机构工作流程

在计算机里,这个权威的机构就是 CA(数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。数字证书的工作流程如下:
在这里插入图片描述

TCP和UDP区别是什么?

  • 连接:TCP 是面向连接的传输层协议,传输数据前先要建立连接;UDP 是不需要连接,即刻传输数.据。
  • 服务对象:TCP是一对一的两点服务,即一条连接只有两个端点。UDP 支持一对一、一对多、多对多的交互通信
  • 可靠性:TCP是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP传输协议实现一个可靠的传输协议,比如 QUIC协议
  • 拥塞控制、流量控制:TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。UDP则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
  • 首部开销:TCP首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项!字段则会变长的。UDP首部只有8个字节,并且是固定不变的,开销较小。
  • 传输方式:TCP是流式传输,没有边界,但保证顺序和可靠。UDP报文传输,是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

Leetcode25:K个一组翻转链表

  1. 链表分区为已翻转部分+待翻转部分+未翻转部分
  2. 每次翻转前,要确定翻转链表的范围,这个必须通过 k 此循环来确定
  3. 需记录翻转链表前驱和后继,方便翻转完成后把已翻转部分和未翻转部分连接起来
  4. 初始需要两个变量 pre 和 end,pre代表待翻转链表的前驱,end 代表待翻转链表的末尾
  5. 经过k此循环,end 到达末尾,记录待翻转链表的后继 next = end.next
  6. 翻转链表,然后将三部分链表连接起来,然后重置 pre 和 end 指针,然后进入下一次循环
  7. 特殊情况,当翻转部分长度不足 k 时,在定位end 完成后,end==null,已经到达末尾,说明题目已完成,直接返回即可
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy = new ListNode(0);dummy.next = head;//每次开始前 pre start end都在翻转链表的前驱节点ListNode pre = dummy;ListNode start = dummy;ListNode end = dummy;while(end.next!=null){for(int i=0;i<k&&end!=null;i++) end = end.next;if(end == null) break;start = pre.next;ListNode next = end.next;end.next = null;pre.next = reverse(start);//start此时在翻转链表的前驱  pre和end不在start.next = next;pre = start;end = pre;}return dummy.next;}public ListNode reverse(ListNode start){ListNode dummy = new ListNode(-1);ListNode cur = dummy;while(start!=null){ListNode next = start.next;start.next = cur.next;cur.next = start; start = next;}return dummy.next;}
}

相关文章:

大厂面试题分享第二期

大厂面试题分享第二期 如果执行了一条命令&#xff0c;"select count(*)from…"&#xff0c;使用哪个引擎更快&#xff0c;为什么&#xff1f;垃圾回收器 CMS 和 G1的区别介绍一下CMS和G1CMS&#xff08;并发&#xff09;垃圾收集器G1垃圾回收器 HTTPS和HTTP的区别主…...

zabbix安装

a.安装 Zabbix 仓库 # rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # yum clean all b. 安装 Zabbix server、前端、agent # yum install zabbix-server-mysql zabbix-agent c. 安装Zabbix前端 启用红帽软件集合 # …...

SpringBoot集成日志框架

SpringBoot集成日志框架 Java生态体系日志框架介绍 简介 在Java生态体系中&#xff0c;围绕着日志&#xff0c;有很多成熟的解决方案。关于日志输出&#xff0c;主要有两类工具。 一类是日志框架&#xff08;Log4j、Logback&#xff09;&#xff0c;主要用来进行日志的输出的…...

CSS笔记总结(Xmind格式):第三天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; css知识&#xff1a; 边框线&#xff1a; 1.border-width:边框的粗细 2.border-style:边框线的样式(solid实线,double双实线,dotted点线&#xff0c;dashed虚线) 3.border-color:边框线的颜色 4.简写形式&a…...

WordPress原创插件:Keyword-ranking-seo 1.0 关键词排名插件 有利于seo

WordPress原创插件&#xff1a;Keyword-ranking-seo 1.0 关键词排名插件 有利于seo 当用户访问网站时&#xff0c;该链接会随机选择一个关键词&#xff0c;并使用选定的搜索引擎进行搜索。 插件下载链接 https://download.csdn.net/download/huayula/89632792...

Docker Swarm 管理

Docker Swarm 是 Docker 提供的一种用于管理容器集群的工具。一、Docker Swarm 的主要特点包括&#xff1a; 高可用性&#xff1a;可以自动检测和恢复故障节点&#xff0c;确保服务的持续可用性。 例如&#xff0c;当某个工作节点出现故障时&#xff0c;Swarm 会将其上的任务重…...

跨平台、多格式、云同步,Koodo Reader背后的技术亮点

前言 对于像我这样的书虫来说&#xff0c;能够找到一个既方便又舒适的阅读环境&#xff0c;简直就是人生中的一大幸事&#xff1b;今天&#xff0c;就让小江湖我带你走进一个不一样的阅读世界——Koodo Reade&#xff01; 无论是在喧嚣的都市&#xff0c;还是在宁静的乡村&a…...

【Story】如何高效记录并整理编程学习笔记?

目录 一、为何笔记在编程学习中如此重要&#xff1f;1.1 知识的捕捉1.2 理解和消化1.3 知识的复习1.4 知识的分享 二、建立高效的笔记系统2.1 确定笔记的目标2.2 选择合适的工具2.3 笔记的结构化2.4 记录有效的内容2.5 定期回顾和更新 三、保持笔记条理性的技巧3.1 使用一致的格…...

jenkins 安装以及自动构建maven项目并且运行

在这里找到你对应jdk的版本的jenkins包 War Jenkins Packages 我这里用的使java8,所以下载 https://mirrors.jenkins.io/war-stable/2.60.1/jenkins.war 然后jenkins可以安装到centos系统 在本地windows系统运行命令行 scp C:\Users\98090\Downloads\jenkins.war root@192…...

Java虚拟机:虚拟机介绍

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 033 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

硬件面试经典 100 题(31~40 题)CRE4

31、多级放大电路的级间耦合方式有哪几种&#xff1f;哪种耦合方式的电路零点偏移最严重&#xff1f;哪种耦合方式可以实现阻抗变换&#xff1f; 有三种耦合方式&#xff1a;直接耦合、阻容耦合、变压器耦合。直接耦合的电路零点漂移最严重&#xff0c;变压器耦合的电路可以实现…...

ReactNative笔记(自用)

环境 ios更换gem镜像源&#xff1a; 查看当前源: gem sources -l 移除默认源: gem sources --remove https://rubygems.org/。添加新的源: 添加 Ruby China 的镜像源&#xff1a; gem source -a https://gems.ruby-china.com/或者添加其他镜像源。 清华大学的gem源: htt…...

嵌入式八股-面试30题(20240812)

TCP和UDP的区别是什么? **TCP&#xff08;Transmission Control Protocol&#xff09;**是面向连接的协议&#xff0c;提供可靠的、顺序的数据传输。它通过三次握手建立连接&#xff0c;并在数据传输过程中使用确认和重传机制来确保数据的正确性。TCP还支持流量控制和拥塞控制…...

单一职责原则(SRP)

目录 1、定义 2、优点 3、原则的重要性 4、 示例 5、注意事项 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;是面向对象设计中的一项重要原则&#xff0c;属于 SOLID 原则之一。它的核心思想是&#xff1a;一个类应该只有一个引起它变化的原因&am…...

骨传导耳机怎么选?分享五款资深用户都说好的骨传导耳机!

在追求健康生活的道路上&#xff0c;运动健身已成为一种时尚潮流&#xff0c;而音乐则是这场潮流中不可或缺的催化剂。然而&#xff0c;传统耳机在运动场景下的局限性日益凸显&#xff0c;难以满足运动者对自由与舒适的双重追求。正是基于这样的市场需求&#xff0c;骨传导耳机…...

【计算机网络——分组延时,丢失,吞吐量】

处理延时&#xff1a;1检查分组首部信息&#xff0c;决定将该分组导向何处所需时间。2检查比特级别的差错所需时间&#xff1a;分析这个分组是否出错&#xff0c;目标IP地址字段提取出来&#xff0c;查路由表……。 传播延时和传输延时&#xff1a;传输延时就是分组到链路所需…...

使用1panel 申请证书配置雷池站点

1.创建测试站点 2.使用1panel申请测试站点的自签名证书 ps&#xff1a;雷池支持自签的证书 关于如果选择网站的SSL证书 百度搜索 看起来是证书的问题 调整了参数重新申请一个证书上传 注意&#xff0c;如果文件上传错了&#xff0c;雷池会报错&#xff0c;如下图 再次访问配…...

4章7节:用R做数据重塑,数据去重和数据的匹配

在数据科学的分析流程中&#xff0c;数据重塑是一项非常重要的操作。数据的重塑通常指将数据从一种形式转换为另一种形式&#xff0c;以满足后续分析的需求。R语言提供了丰富的工具和函数来帮助用户高效地进行数据重塑操作。本文中&#xff0c;我们将深入探讨数据重塑的概念及其…...

大数据面试SQL(七):累加刚好超过各省GDP40%的地市名称

文章目录 累加刚好超过各省GDP40%的地市名称 一、题目 二、分析 三、SQL实战 四、样例数据参考 累加刚好超过各省GDP40%的地市名称 一、题目 现有各省地级市的gdp数据,求从高到低累加刚好超过各省GDP40%的地市名称&#xff0c;临界地市也需要。 例如&#xff1a; 浙江省…...

建议收藏!这4款设计师常用的素材管理软件,助你工作效率翻倍!

嘿&#xff0c;设计师们&#xff01;你是否还在为那一堆堆散乱的素材头疼&#xff1f;每次灵感来袭&#xff0c;却要花费大量时间在层层文件夹中苦苦搜寻&#xff1f;别急&#xff0c;今天我就来给大家推荐4款超给力的素材管理软件&#xff0c;它们不仅能帮你轻松整理素材库&am…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...