面试
文章平均质量分 96
面试复习笔记
编程小猹
大二在校学生,学习笔记
展开
-
数据结构与算法面试题速通(八股文版)
AVL 树 是平衡⼆叉查找树,增加和删除节点后通过树形旋转重新达到平衡。右旋是以某个节点为中⼼, 将它沉⼊当前右⼦节点的位置,⽽让当前的左⼦节点作为新树的根节点,也称为顺时针旋转。同理左旋 是以某个节点为中⼼,将它沉⼊当前左⼦节点的位置,⽽让当前的右⼦节点作为新树的根节点,也称为 逆时针旋转。红⿊树 是 1972 年发明的,称为对称⼆叉 B 树,1978 年正式命名红⿊树。主要特征是在每个节点上增加⼀个属性表示节点颜⾊,可以红⾊或⿊⾊。原创 2024-05-15 06:25:22 · 531 阅读 · 0 评论 -
腾讯宣讲会现场笔试题
(操作系统)Unix的进程间通信,有哪几种方式。(至少写出5种)?(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。原创 2024-04-17 23:25:22 · 928 阅读 · 0 评论 -
Zookeeper学习一
建立连接有两种方式,一种是调用工厂对象的newClient()方法,另一种就是调用工厂对象的builder(),通过的方法就连接信息传入工厂中。注意此方法需要加上@Before注解,表示其他测试方法执行前需要先执行加了的方法。因为每次进行crud操作时都需要与ZooKeeper Server建立连接。建立了连接,操作完毕后同时需要释放连接,在对应方法上面加一个,表示每次进行测试最后都要执行该方法。原创 2024-04-02 09:08:47 · 1405 阅读 · 0 评论 -
java面试JVM虚拟机篇
难易程度:☆☆☆出现频率:☆☆☆☆程序计数器:线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。javap -verbose xx.class 打印堆栈大小,局部变量的数量和方法的参数。 java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。并且这个线程的执行时间用完了,接着处理器就会又来执行被挂起的这个线程。原创 2024-02-20 06:29:21 · 899 阅读 · 0 评论 -
密码加密——加盐后再进行md5加密
首先明文肯定是不可取的,在数据库中明文存储密码风险实在是太大了。MD5(Message Digest Algorithm 5)是一种常用的,用于将任意长度的数据进行不可逆的加密处理。MD5 可以将输入的任意长度的数据转换为一个128位(16字节)的哈希值,通常表示为32个十六进制数字。尽管 MD5 具有上述特点,但由于其安全性较低,已被证明容易受到)和的影响,因此在一些安全要求较高的场景中,已经不推荐单独使用 MD5 来加密密码等敏感信息。解释一下和。原创 2024-04-01 07:07:09 · 1268 阅读 · 0 评论 -
分布式搜索引擎elasticsearch专栏三
默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。elasticsearch中分词器(analyzer)的组成包含三部分:character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smarttokenizer filter:将tokenizer输出的词条做进一步处理。原创 2024-03-19 22:12:49 · 808 阅读 · 0 评论 -
分布式搜索引擎elasticsearch专栏二
match和multi_match的区别是什么?match:根据一个字段查询multi_match:根据多个字段查询,参与查询字段越多,查询性能越差精确查询常见的有哪些?term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段range查询:根据数值范围查询,可以是数值、日期的范围查询的DSL是一个大的JSON对象,包含下列属性:query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件。原创 2024-03-19 08:02:28 · 1121 阅读 · 0 评论 -
浏览器缓存:Cookie、LocalStorage、SessionStorage的对比分析
先分别介绍一下这三种浏览器缓存。原创 2024-03-17 09:30:07 · 1063 阅读 · 0 评论 -
SpringBoot中的配置文件优先级、bootstrap和application的区别
SpringBoot项目当中支持的三类配置文件:在SpringBoot项目当中,我们要想配置一个属性,可以通过这三种方式当中的任意一种来配置都可以,那么如果项目中同时存在这三种配置文件,且都配置了同一个属性,如:Tomcat端口号,到底哪一份配置文件生效呢?server:port: 8082server:port: 8082我们启动SpringBoot程序,测试下三个配置文件中哪个Tomcat端口号生效:properties、yaml、yml三种配置文件同时存在。原创 2024-03-14 21:21:39 · 968 阅读 · 0 评论 -
如何优雅地避免空指针异常(NullPointerException)
如果你在使用数据库来保存你的域名对象,如Customers,Orders 等,你需要在数据库本身定义是否为空的约束。因为数据库会从很多代码中获取数据,数据库中有是否为空的检查可以确保你的数据健全。在数据空中维护null约束同样可以帮助你减少Java代码中的空指针检查。当从数据库中加载一个对象是你会明确,哪些字段是可以为null的,而哪些不能,这可以使你代码中不必要的!= null检查最少化。原创 2024-03-09 08:39:59 · 1116 阅读 · 0 评论 -
java基础知识面试题
守护线程是在程序运行时在后台提供一种支持性的线程。当所有用户线程结束时,守护线程会自动停止。换句话说,守护线程不会阻止程序的终止,即使它们还没有执行完任务。守护线程的生命周期与主线程或其他用户线程无关。当所有的非守护线程都结束时,JVM 将会退出并停止守护线程的执行。守护线程的优先级默认与普通线程一样。优先级较高的守护线程也不能够保证在其他线程之前执行。守护线程通常被用于执行一些后台任务,例如垃圾回收、日志记录、定时任务等。当只剩下守护线程时,JVM 会自动退出并且不会等待守护线程执行完毕。原创 2024-03-01 22:52:04 · 723 阅读 · 0 评论 -
Java四大引用详解:强引用、软引用、弱引用、虚引用
在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这就像在商店购买了某样物品后,如果有用就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再把它捡回来使用就不可能了。但有时候情况并不这么简单,可能会遇到可有可无的"鸡肋"物品。这种物品现在已经无用了,保留它会占空间,但是立刻扔掉它也不划算,因为也许将来还会派用场。原创 2024-02-27 07:00:41 · 821 阅读 · 0 评论 -
ThreadLocal从使用到实现原理与源码详解
ThreadLocal是多线程中对于解决的一个,它会为每个线程都分配一个从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享。案例:使用JDBC操作数据库时,会将每一个线程的Connection放入各自的ThreadLocal中,从而保证每个线程都在各自的 Connection 上进行数据库的操作,避免A线程关闭了B线程的连接。原创 2024-02-26 22:22:22 · 1228 阅读 · 0 评论 -
java面试常见技术场景篇
单点登录的英文名叫做:Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统在以前的时候,一般我们就单系统,所有的功能都在同一个系统上。单体系统的session共享登录:将用户信息保存在Session对象中如果在Session对象中能查到,说明已经登录如果在Session对象中查不到,说明没登录(或者已经退出了登录)注销(退出登录):从Session中删除用户的信息后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。原创 2024-02-23 09:21:04 · 1059 阅读 · 0 评论 -
java面试设计模式篇
需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。具体类的设计如下:1.类图中的符号+:表示public-:表示private#:表示protected2.泛化关系(继承)用带空心三角箭头的实线来表示3.依赖关系使用带箭头的虚线来表示//添加配料。原创 2024-02-23 09:11:10 · 1214 阅读 · 0 评论 -
java面试多线程篇
CAS的全称是: Compare And Swap(比较再交换),它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。在JUC( java.util.concurrent )包下实现的很多类都用到了CAS操作AbstractQueuedSynchronizer(AQS框架)AtomicXXX类例子:我们还是基于刚才学习过的JMM内存模型进行说明线程1与线程2都从主内存中获取变量int a = 100,同时放到各个线程的工作内存中。原创 2024-02-18 20:18:24 · 993 阅读 · 0 评论 -
java面试集合篇
时间复杂度分析:来评估代码的执行耗时的1.假如每行代码的执行耗时一样:1ms2.分析这段代码总执行多少行?3n+33.代码耗时总时间: T(n) = (3n + 3) * 1ms大O表示法:不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势T(n)与代码的执行次数成正比(当n很大时,公式中的低阶,常量,系数三部分并不左右其增长趋势,因此可以忽略,我们只需要记录一个最大的量级就可以了以上代码的时间复杂度都为O(1)原创 2024-02-18 10:17:45 · 719 阅读 · 0 评论 -
消息中间件面试篇
如果有这样的需求的话,我们是可以解决的,把消息都存储同一个分区下就行了,有两种方式都可以进行设置,第一个是发送消息时指定分区号,第二个是发送消息时按照相同的业务设置相同的key,因为默认情况下分区也是通过key的hashcode值来选择分区的,hash值如果一样的话,分区肯定也是一样的。因为我们当时处理的支付(订单|业务唯一标识),它有一个业务的唯一标识,我们再处理消息时,先到数据库查询一下,这个数据是否存在,如果不存在,说明没有处理过,这个时候就可以正常处理这个消息了。原创 2024-02-13 20:22:12 · 1392 阅读 · 0 评论 -
java面试微服务篇
方法一:创建类实现IRule接口,可以指定负载均衡策略(全局)。方法二:在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略(局部)原创 2024-02-13 07:45:33 · 1964 阅读 · 0 评论 -
java面试框架篇
当我们在使用MyBatis进行数据库查询时,通常会使用一种称为“立即加载”的方式。这意味着当查询主对象时,MyBatis会立即加载该对象及其关联对象的所有数据。但是,有时关联对象的数据可能会很大,而且并不一定每次都需要完整加载所有的关联对象数据。这就是延迟加载的作用。延迟加载是一种性能优化技术,它允许在需要的时候才去加载关联对象的数据,而不是在查询主对象时就一次性加载所有关联对象。这样可以避免不必要的数据库查询,提高查询性能和减轻数据库负载。下面举个例子说明一下有两个表,分别是用户表和订单表。原创 2024-01-30 20:03:11 · 988 阅读 · 0 评论 -
MySQL面试篇
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。MySQL 主从同步是一种典型的高可用解决方案,它可以实现数据的自动复制和多副本备份。原创 2024-01-19 09:46:16 · 1141 阅读 · 0 评论 -
Redis面试篇
缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都会去查数据库,数据库的压力增大。缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。客户端对数据库中的数据主要有两类操作,读(select)与写(DML)。缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。原创 2024-01-11 08:57:55 · 1354 阅读 · 0 评论