目录

1.Kafka和RocketMQ的区别

2.反射的作用

3.类加载的具体过程,双亲委派模型的机制

4.TCP的四次挥手

5.多线程的优势

6.死锁产生的原因,怎么解决

7.Java并发的工作原理

8.常用的git命令

9.算法题

1.leetcode 3.无重复字符的最长子串(中等)

2.leetcode 88. 合并两个有序数组(简单)


1.Kafka和RocketMQ的区别

虽然自己平时用RabbitMQ用得多一点,但是在选择RabbitMQ的时候也对这两个进行了一定的了解

1.适用的对象不同:RokcetMQ是阿里自己开发的,产品质量确实经过了阿里淘宝天猫的双11的检验,并发量也能达到十万级,Kafka适用于更大型的项目,支持的并发量更高,能达到几十万级,支持集群部署。

2.实现的引言和支持的语言不同:RocketMQ目前主要支持Java语言,C++都有所限制,其他的语言是不支持的,而Kafka支持的语言较多,但kafka有一个非常致命的缺点,就是可能会发生一小部分消息的丢失。

选择:如果能够允许一小部分的内容丢失,并且追求极高的吞吐量和高性能直接选Kafka,如果使用的是Java语言,并且也想用MQ的一些功能如:延迟队列,消息事务等就选RockctMQ

2.反射的作用

反射其实就是一个程序在运行的时候,对于一个类,无论这个类是什么类,不可继承类啊,父类子类啊,抽象类这些都能够获得其类的属性和方法,也不管这些属性和方法是由什么修饰符来修饰的,都能够获取。

反射有一些特性:

1.运行时类信息的访问。

2.动态对象的创建:通过反射API动态创建对象实例,即使在编译的时候不知道具体的类名,通过class类的newInstance和Constructor对象的newInstance方法实现的。

3.动态方法调用:通过Method类的invoke方法。

4.访问和修改字段值:通过Filed类的get和set方法实现。

优点就是可以动态地去获取对象实例,缺点是效率比较低(编译器无法优化,调用了很多其他方法),并且反射破坏了封装和类的私有方法,不安全。

3.类加载的具体过程,双亲委派模型的机制

类加载过程其实用大白话理解就是运行的时候,所写的类在JVM中是如何进行加载的

1.加载阶段:将字节码数据从不同的数据源读取到JVM中,并生成.class对象

2.连接:将原始的类信息转化为JVM运行的过程,这又分为3个部分

(1)验证:JVM得去验证所加载的类是安全的,不会出现一些非法的行为,要符合JVM虚拟机规范

(2)准备:创建类或接口的静态变量,并初始化静态变量的初始值,分配所需要的内存

(3)解析:将常量池的符号引用替换成直接引用(将符号表示的类,方法转换成内存地址等)

3.初始化阶段:真正去执行类初始化的代码逻辑,包括静态字段赋值等。

父亲委派模型:当要去加载一个类的时候,会交由其上一级加载器去判断有没有加载过,从下至上是自定义类加载器,应用程序类加载器,扩展类加载器,启动类加载器,目的是避免重复加载Java类型

4.TCP的四次挥手

进行数据传输的双方,因为某一方认为数据已经处理完毕,就向对方发起FIN报文,代表我这边已经不会再发送数据过去了,进入FIN_WAIT1状态,对方收到这个FIN报文之后,返回一个ACK,表示已经收到这个报文了,进入CLOSE_WAIT状态,接收到这个FIN报文之后,TCP协议栈会开启一个文件结束符EOF在接收缓冲区中,处理完缓冲区中的数据之后,也就是读到了EOF,这时对方就会发送一个FIN报文,代表对方也不会再发送数据了,进入LAST_ACK状态,此时我这边收到之后,返回一个确认ack,进入CLOSE状态,对方受到之后也进入CLOSE状态,到这里本次连接就结束了

5.多线程的优势

1.开启多个线程能帮我们处理某个任务的时候更快,例如处理400条数据,如果一个线程要1s中,那就需要400s,现在我有10个线程,同时去执行这样的操作,就只需要40s。

为什么不用进程是因为线程的创建和销毁的开销比进程小得多,linux中启动一个进程,操作系统要给他分配栈,堆,内存地址等。由于线程是共享内存数据,所以创建线程轻量很多。其次,进程之间的通信比较复杂,而线程很容易

6.死锁产生的原因,怎么解决

1.互斥条件:一个资源被一个线程占有之后,不能再被其他线程占有。

2.保持且请求:一个线程在占有一个资源的同时,去申请占有其他的资源

3.不可剥夺:一个线程不能强行从其他线程中剥夺部分资源

4.循环条件:A需要B的资源,B需要A的资源

解决方式只能从2,4入手,即资源有序分配法,A获取资源的顺序是1,2,3,4,那设置B获取资源的方式也是A,B,C,D

7.Java并发的工作原理

并发就是同一时间内执行多个线程,完成多个任务。Thread类和Runnable接口是实现并发的关键。线程的生命状态:新建,就绪,运行,阻塞,停止。

保证线程安全:1,原子性:通过加锁的方式保证同一时刻只有一个线程对资源进行修改,Java通过synchronized或者Atomic这样的关键字保证

2.可见性:通过synchronized和volatile这样的关键字保证,volatile的原理是读时,从主内存中读取数据,写时,先写工作内存之后刷新到主内存中

3.有序性:happens-before保证有序性

提供了很多锁机制:

1.内置锁:synchronized,JVM提供的。syncronized加锁时有无锁、偏向锁、轻量级锁和重量级锁几个级别。

2.ReentrantLock:JUC包下的一个锁,比synchronized高级一定,有一定的特殊用处(公平性,定时等)

3.读写锁

4.自旋锁:通过CAS进行实现

5.乐观锁和悲观锁:不先加锁(通过版本号或时间戳实现),直接加锁

8.常用的git命令

git pull从远程仓库拉代码                                       git add --将工作区代码的修改添加到暂存区        git commit -m将暂存区代码提交到本地仓库并添加相应的注释           git push  提交代码   

想要撤回git commit 就使用git reset --soft HEAD            撤回add操作:git reset --mixed HEAD

撤回push:git push origin xxx --force 回退版本

9.算法题

1.leetcode 3.无重复字符的最长子串(中等)

public int lengthOfLongestSubstring(String s) {int n = s.length();int[] hash = new int[128];int left=0,right=0;// 用于返回结果int ret = 0;while(right<n){char ch = s.charAt(right);hash[ch]++;while(hash[ch]>1){char c = s.charAt(left);hash[c]--;left++;}ret = Math.max(ret,right-left+1);right++;}return ret;}

2.leetcode 88. 合并两个有序数组(简单)

public void merge(int[] nums1, int m, int[] nums2, int n) {int i = m-1;int j = n-1;int k = m+n-1;while(i>=0 && j>=0){// 大的放后面if(nums1[i]>nums2[j]){nums1[k--] = nums1[i--];}else{nums1[k--] = nums2[j--];}}// 处理剩余的内容while(j>=0){nums1[k--] = nums2[j--];}}

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

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

相关文章

Python在边缘计算与物联网中的创新实践:实时数据处理与设备控制

近年来&#xff0c;Python语言的普及度持续攀升&#xff0c;尤其在人工智能、数据科学等热门领域备受青睐。然而&#xff0c;一个新兴趋势——边缘计算与物联网&#xff08;IoT&#xff09;的结合——正悄然改变技术格局。边缘计算强调在数据源头进行实时处理&#xff0c;减少云…

Spring Cloud Gateway 网关(五)

目录 一 概念引入 二 具体使用 1 首先创建一个网关模块 2 启动类 3 配置类 4 对应方法的修改 5 展示借助81端口进行转发控制 6 断言规则​编辑 三 过滤器 1 将前置的请求参数给过滤掉&#xff0c;降低繁琐程度。 2 默认过滤器 3 全局过滤器 4 自定义过滤器工厂 5…

产品经理操作手册(8)——业务需求文档(BRD)

一、BRD的定义与价值 **业务需求文档(BRD)**是产品开发前期的基础性文档&#xff0c;它将业务诉求转化为结构化的产品需求&#xff0c;是连接业务方与交付团队的桥梁。“BRD不仅是一份文档&#xff0c;而是一个对齐的过程。”BRD核心价值 统一认知&#xff1a;确保各方对业务目…

Excel表格多级下拉选项,如何制作?

之前分享过如何设置下拉选项&#xff0c;但那只是简单的一级下拉菜单&#xff0c;今天再给大家分享多级下拉菜单如何制作。也就是根据前面的下拉选项改变后面的选项。 我们现来复习一级下拉菜单&#xff0c;再接着讲多级下拉菜单 一级下拉选项 首先我们先将表格内容凑填写好…

[Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试

第4章&#xff1a;SyncNet唇形同步评判器 在前几章中&#xff0c;我们了解了唇形同步推理流程如何协调生成唇形同步视频&#xff0c;以及音频特征提取器(Whisper)如何为LatentSync UNet提供关键音频线索。 UNet利用这些线索巧妙调整唇部动作。但我们如何判断UNet的生成效果&a…

算法:插入排序

插入排序&#xff08;直接插入排序&#xff09; 是一种基于“插入”的排序 思路 它的核心思想是把数组分成两部分&#xff1a;一部分是有序区&#xff0c;另一部分是乱序区也就是待排序区。 每次从未排序部分“取出”一个元素&#xff0c;插入到前半部分合适的位置&#xff0c;…

MCP Go SDK

MCP Go SDK v0.3.0 Open in GitHub Codespaces &#xff08;在 GitHub Codespaces 中打开&#xff09; BREAKING CHANGES &#xff08;重大变更&#xff09; This version contains breaking changes. See the release notes for details PkgGoDev &#xff08;Go 官方包文档入…

面试问题详解十一:Qt中的线程池与 QRunnable

在 Qt 中&#xff0c;多线程的使用是开发高性能 GUI 应用的重要组成部分。为了避免频繁创建和销毁线程带来的资源消耗&#xff0c;Qt 提供了 线程池&#xff08;QThreadPool&#xff09; 和 可运行任务&#xff08;QRunnable&#xff09; 的机制&#xff0c;帮助我们更加高效地…

spring-ai-alibaba-deepresearch 学习(五)——BackgroundInvestigationNode

本篇为spring-ai-alibaba学习系列第三十一篇前面介绍 rewrite_multi_query 节点最后会根据用户上传文件标识 user_upload_file 决定下一节点现在来看一下第二个分支&#xff0c;当 user_upload_file 为 false 时&#xff0c;转入 background_investigator 节点该节点主要是负责…

ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况

目标: 实现点灯工程&#xff0c;并且可以基于 vscode 进行单步调试与 systemview 来分析任务运行情况。 环境搭建 如需在 ESP32-S3 上使用 ESP-IDF&#xff0c;请安装以下软件&#xff1a; 设置 工具链&#xff0c;用于编译 ESP32-S3 代码&#xff1b;编译构建工具 —— CMa…

linux系统学习(6.软件包管理)

目录 一、概述 1.分类 2.命名方式 3.一个软件包的组成 1. 软件包的基本定义 2. 一个软件包通常包含的部分 ① 程序文件 ② 库文件 ③ 配置文件 ④ 数据文件 / 资源文件 ⑤ 文档 / 帮助信息 ⑥ 服务脚本 / 单元文件&#xff08;如果是服务型软件&#xff09; ⑦ 包的…

数据结构青铜到王者第八话---队列(Queue)

目录 一、队列(Queue) 1、概念 2、队列的使用 3、队列模拟实现 4、循环队列 4.1数组下标循环的小技巧&#xff08;1&#xff09;下标最后再往后(offset 小于 array.length): index (index offset) % array.length 4.2如何区分空与满 4.3设计循环队列 二、双端队列 (Deq…

Windows系统之不使用第三方软件查看电脑详细配置信息

MENU使用系统信息工具&#xff08;最详细&#xff09;使用命令行查看命令提示符PowerShell&#xff08;信息更丰富&#xff09;使用DirectX诊断工具&#xff08;查看显卡和声音设备&#xff09;查看设备管理器&#xff08;查看硬件驱动&#xff09;一条命令合集&#xff08;Pow…

K8s学习笔记(一)——

一、k8s是什么一个分布式原来是主要用来管理容器的呀&#xff08;专业点叫“容器编排”&#xff09;&#xff0c;什么是管理&#xff1f;其实就是增删改查等等&#xff0c;简单来理解&#xff0c;k8s就是实现容器增删改查的呗。是开源的&#xff0c;在Linux系统下。就跟创建的s…

Zynq开发实践(FPGA之平台免费IP)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】和c语言平台提供posix api一样&#xff0c;一般fpga厂家也会提供各种各样免费的ip给客户使用。这样&#xff0c;客户就不需要自己去写每一个ip了&am…

nginx 配置文件初识全局块、events、http、server、location 的层级关系

Nginx 配置其实只有两类指令&#xff1a; 放在“某个块”里的块级指令&#xff1b;直接写在顶层的全局指令。 把全部配置想象成一个树形结构&#xff0c;根节点叫 main&#xff0c;往下依次分叉即可。下面用 1 张 ASCII 树 1 张极简示例&#xff0c;30 秒就能看懂层级关系。 层…

OCR大模型最新研究

最新OCR大模型介绍1.GPT-4o 2024.5.14 3.MinerU 2024.7.4 3.GOT-OCR 2024.9.3 4.InternVL3-78B 2025.4.11 开源 通用多模态大模型&#xff0c;OCR是它们的能力之一 因其训练数据的偏向&#xff0c;在文档理解、数学公式识别、图表分析等任务上通常是开源模型中的SOTA&a…

php电子签名

原理使用一对公钥和私钥&#xff0c;用私钥对数据进行签名&#xff0c;用公钥对签名数据进行加密&#xff0c;形成电子签名。电子签名认证&#xff0c;用私钥解密数据&#xff0c;用公钥验证签名。若加密容过长&#xff0c;则将加密内容按照固定长度分块&#xff0c;对每块进行…

鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(三)

目录 一,插入单条数据 二,批量插入数据 三,根据条件删除数据 四,传入对象删除数据 五,删除整张表的数据 六,根据条件更新数据 前面两个章节数据库的创建以及数据库表的创建都已经完成了,下面我们再来看看数据库的增删改查如何构建。 一,插入单条数据 我们先来看一下官…

年度优质会议推荐:【西安石油大学主办|IEEE出版|往届均EI】第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)

第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025) 2025 7th International Conference on Intelligent Control, Measurement and Signal Processing (ICMSP 2025) 2025年11月28-30日 中国北京 主办单位&#xff1a;西安石油大学 会议详情&#xff1a;请点击 亮…