- 博客(36)
- 收藏
- 关注
原创 神策一面,都八股还比较简单,第一次被问到操作系统的知识
HashMap底层是基于数组来实现的,通过哈希函数来计算key对应的哈希值,然后在定位到数组的下标进行存储,这样可能会发生哈希冲突,使用链地址法来解决哈希冲突,所以在数组中,将元素存储为链表,随着链表节点的增多,导致查询效率降低,在JDK1.8对此做了优化,就是当数组的容量到达64且链表的长度超过8之后就将链表转化成红黑树,以提高查询效率。底层实现不同:ArrayList是基于动态数组实现的,在内存中的存储也是连续的地址空间,LinkedList是基于双向链表实现的,在内存中的存储是非连续的;
2023-10-12 17:11:13 142
原创 【八股】Spring 基础知识点
实例化、属性赋值、初始化、销毁整个生命周期相关的方法可以分为三大类:Bean自身的方法、容器级生命周期方法、Bean级生命周期方法;什么是 BeanFactory?和 FactoryBean 的区别?BeanFactory是一个接口,位于类结构树的顶端,定义了getBean()、containsBean()等管理Bean的通用方法,Spring中有很多BeanFactory的实现类,以此来增强BeanFactory的功能;FactoryBean是一个Bean,但不仅仅是一个Bean;
2023-09-26 22:36:22 182
原创 【八股】MyBatis 基础知识点
MyBatis执行时会为Mapper接口生成代理对象,代理对象会拦截接口中的方法,然后去执行MappedStatement中相应的SQL语句,然后将结果返回;类型的参数,该参数是对映射信息(输入参数 or 输出结果)的封装,用于存储要映射的 SQL 语句的 id、参数等信息。在执行完 SQLSession.selectOne 语句之后,返回的是结果对象的代理对象,此时由于 orderList 开启了懒加载,所以 user.orderList 其实是为 null 的;里面的数字代表传入参数的顺序;
2023-09-23 16:10:23 148
原创 【八股】JVM 基础知识
各种类加载器之间的层次关系被称为类加载器的 “双亲委派模型(Parents Delegation Model)双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应有自己的父类加载器。不过这里类加载器之间的父子关系一般不是以继承(Inheritance)的关系来实现的,而是通常使用组合(Composition)关系来复用父加载器的代码。
2023-09-21 19:20:12 106
原创 XX秋招面试
为了解决精度丢失的问题,我们可以使用更高精度的数据类型,BigDecimal,它可以表示任意位数的小数,不受限于固定的位数,可以对舍入进行控制、精确的算术运算,BigDecimal类提供各类算术运算方法,并且其内部实现都考虑了小数的精确位数,并尽可能保持结果的精度。HashMap引入红黑树主要是为了优化发生哈希冲突时的查询效率,一开始当发生Hash冲突的时候,我们使用链地址法来解决,但是随着链表节点越来越多,遍历链表的时间复杂度为O(n),导致查询效率变低,为了解决该问题,Java8引入了红黑树来优化;
2023-09-20 08:54:16 46
原创 深蓝XX面试,无情拷打,怪我太菜了
虽然只是一面,虽然看似简单,每一个字都被无情拷打,每一个八股背后都是场景… 还有几个SQL和Redis相关的场景,被拷打的已经混乱了,实在是记不起来了。。。。就下面这六个问题,扩展扩展再扩展。。。。突然想起还有一个问题简单,真没扩展。。。
2023-09-14 23:24:00 53
原创 十大排序算法
如果序列是逆序的,插入排序要比较n²次和移动,所以时间复杂度为O(n²),最好为O(n),最坏为O(n²),平均时间复杂度为O(n²),排序过程中只要一个辅助空间,所以空间复杂度O(1)。快速排序最好情况下时间复杂度是O(nlogn),平均时间复杂度也是O(nlogn),最坏情况是序列本来就是有序的,此时时间复杂度为O(n²),快速排序的空间复杂度可以理解为递归的深度,而递归的实现依靠栈,平均需要递归logn次,所以平均空间复杂度为O(logn)。堆排序是就地排序,空间复杂度为常数O(1)。
2023-09-10 15:27:38 40
原创 2023年秋招某面试八股
可以根据业务场景自定义每部分的长度;UUID生成的速度快,但是在向数据库插入新的数据的时候,可能会导致主键索引频繁的变动,这样导致索引的维护成本增加,进而影响数据插入的速度。
2023-09-09 17:39:56 47
原创 设计模式?这要怎么记?理解?
在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。代理模式是做方法增强的,适配器模式是把鸡包装成鸭这种用来适配接口的,桥梁模式做到了很好的解耦,装饰模式从名字上就看得出来,适合于装饰类或者说是增强类的场景,门面模式的优点是客户端不需要关心实例化过程,只要调用需要的方法即可,组合模式用于描述具有层次结构的数据,享元模式是为了在特定的场景中缓存已经创建的对象,用于提高性能。
2023-08-31 19:41:24 63
原创 【笔试】秋招某司编程题,你可能会遇到哦~
假设你拥有有限数量的各种面额的硬币,并且硬币的面额是按升序排序的。有一个字符数组A,例如{“A1”,“A2”,“A3”},另外有一个字符串数组B,例如{“B1”,“B2”,“B3”},在不打乱原数组顺序的情况下,求两个数组合并的所有组合数;现在希望你编写一个Java程序,能够找出数字个数最少的选取方案,输出对应的最少数字的个数,如果无解输出“No solution”。若二叉树有5个叶结点,其权值分别是10,14,18,23,30,则其最小的带权路径长度(WPL)是多少?创建一个长度为 M+1 的数组。
2023-08-29 11:19:06 286
原创 【Java基础】多线程编程
当多个线程同时对一共享数据进行操作时,只会有一个线程拿到锁对象,因为一个对象只有一把锁,当某线程获取该对象的锁后,其它线程就无法再获取该对象的锁了,所以只能等待某线程释放该对象的锁,其它线程才能访问,这样便是实现了对临界区的互斥访问,保证了共享数据的安全。当然这也是锁的竞争问题,也是死锁产生的条件。threadFactory创建的线程也是采用new Thread()方式,threadFactory创建的线程名都具有统一的风格:pool-m-thread-n(m为线程池的编号,n为线程池内的线程编号)。
2023-08-25 10:34:11 73
原创 MyBatis_东一点西一点
缓存就是将数据暂时放在内存或者硬盘中,当查询数据时,如果缓存中有相同的数据就直接返回,而不用从数据库去读取,进而减少了应用与数据库的交互次数,这样提升了程序的执行效率。代理模式是MyBatis的核心使用的模式,正是由于代理模式,我们只需编写Mapper.java接口而不需要实现,就是由MyBatis后台帮助我们完成具体SQL的执行的。属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式,相对于。
2023-08-11 14:34:26 43
原创 MyBatis_基础知识
是一个基于Java的持久层框架;并且支持自定义SQL、存储过程以及高级映射;MyBatis可以通过简单的XML配置或者注解来配置和映射原始类型、接口和Java POJO为数据库中的记录;MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。Mybatis:小巧、方便、高效、简单、直接、半自动化。比喻:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使由我决定。Hibernate:强大、方便、高效、复杂、间接、全自动化。
2023-08-10 12:07:02 49
原创 Redis_持久化
为什么需要持久化?我们知道Redis是基于内存存储的,有一个问题就是断电即失,所以Redis提供了将内存数据持久化到硬盘,以及用持久化文件来恢复数据库数据的功能,从内存当中同步到硬盘上,这个过程叫做持久化过程。Redis支持两种形式的持久化,一种是RDB另一种是AOF;一般来说, 如果对数据的安全性要求非常高的话,应该同时使用两种持久化功能。如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
2023-08-09 11:36:09 42
原创 Redis_常见基础面试点
给每个key维护一个时间戳,淘汰时随机采样5个key,从中淘汰掉最旧的key;在访问数据的时候,每次将最新访问的key移动到表头,即最近被访问的key在表头,最少访问的key在表尾;Redis占用内存超出最大限制(maxmemory)时,可采用内存淘汰策略让Redis淘汰一些数据,以腾出空间继续提供读写服务。Redis会把设置了过期时间的key放入一个独立的字典中,在key过期时并不会立即删除它。,就是先考虑键值对访问的次数,优先淘汰。,对于访问次数相同的键值对,再选择。进⾏淘汰,也就是LRU算法。
2023-08-04 20:57:06 45
原创 Redis_高并发高可用知识
脑裂(网络分区),也就是说,某个 master 所在机器突然脱离了正常的网络,跟其他 slave 机器不能连接,但是实际上 master 还运行着,此时哨兵可能就会认为 master 宕机了,然后开启选举,将其他 slave 切换成了 master 这个时候,这个过程,实现了 Redis 的主从架构下的高可用性。因此,旧 master 再次恢复的时候,会被作为一个 slave 挂到新的 master上去,自己的数据会清空,重新从新的 master 复制数据,导致写向旧 matse r的数据可能也丢失了。
2023-08-04 20:55:12 1568 1
原创 Redis_缓存验证码
所以,Redis中的LRU算法是这样实现的:首先定义一个淘汰池,这个淘汰池是一个数组(大小为16),然后触发淘汰时会根据配置的淘汰策略,先从符合条件的key中随机采样选出5(可在配置文件中配置)个key,然后将这5个key按照空闲时间排序后放到淘汰池中,每次采样之后更新这个淘汰池,让这个淘汰池里保留的总是那些随机采样出的key中空闲时间最长的那部分key。我们知道,实现LRU算法时,需要将所有的数据按照访问时间距离当前时间的长短排序放到一个双向链表中,基于这个链表实现数据的淘汰。为了后续的校验登录状态。
2023-08-04 20:46:23 1107 1
原创 MySQL_索引
根据图书的目录的设计,我们可以肯定索引数据最好能按顺序排列,而对于顺序排列我们应该想到使用「二分查找法」高效定位数据。如果现在用数组来存储索引,有一个排好序的数组1.2.3.4.5.6.7.8,如果要从中找出数字 3,最简单办法就是从头依次遍历查询,这种方法的时间复杂度是 O(n),查询效率并不高。但是,因为该数组是有序的,如果我们采用二分查找法,二分查找法每次都把查询的范围减半,这样时间复杂度就降到了 O(logn),但是每次查找都需要不断计算中间位置。
2023-07-14 11:42:35 54 1
原创 MySQL_基础篇
现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。现在我们对服务层和存储引擎层有了一个简单认识,接下来,就详细说一条 SQL 查询语句的执行流程,依次看看每一个功能模块的作用。存储层: 负责将数据存储于设备的文件系统中。
2023-07-12 10:34:41 62 1
原创 【基础算法】哈希表
遍历目标字符串,将出现的字符在哈希表中做+1操作,遍历完成后,遍历匹配字符串,对出现的字符在哈希表中做-1操作,最终看我们的哈希表的情况,如果仍然全为0,则说明两个字符串是字母异位词,否则就不是。注意:这里同下面的题一样都是使用哈希法,但是这道题不便于用数组这种数据结果,因为对于我们将要求出的交集是一个不确定大小的,也就是说,难点:对题意的理解,它给出的示例也是真的误导我了,我以为是每两个单词交换,实际题意是两个单词出现的字母以及出现的次数相同。重点:学会使用一种哈希数据结构,unorderd_set。
2023-04-19 10:59:39 55
原创 【数据库】优化?索引?了解一下
官方对于索引的定义是帮助 MySQL 高效获取数据的数据索引如何实现高效的查找数据呢?如何找到快速地找出一个序列中某元素的位置呢?从左至右遍历、排序…
2023-04-13 10:06:58 89
原创 Redis 非常非常非常重要
脑裂(网络分区),也就是说,某个 master 所在机器突然脱离了正常的网络,跟其他 slave 机器不能连接,但是实际上 master 还运行着,此时哨兵可能就会认为 master 宕机了,然后开启选举,将其他 slave 切换成了 master 这个时候,这个过程,实现了 Redis 的主从架构下的高可用性。因此,旧 master 再次恢复的时候,会被作为一个 slave 挂到新的 master上去,自己的数据会清空,重新从新的 master 复制数据,导致写向旧 matse r的数据可能也丢失了。
2023-04-10 20:02:27 423
原创 TCP/IP 协议族 And HTTP 协议 基基基础知识
Content-Type,内容类型,一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 Asp 网页点击的结果却是下载到的一个文件或一张图片的原因。在早期的 HTTP/1.0 中,每次 http 请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。一个 HTTP "客户端"是一个应用程序,通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的。
2023-04-07 18:37:21 87
原创 分库分表的基基基础知识
分表:将一个表中的数据按照某种规则分拆到多张表中,降低锁粒度以及索引树,提升数据查询效率。分库:将一个数据库中的数据按照某种规则分拆到多个数据库中,以缓解单服务器的压力(CPU、内存、磁盘、IO)。
2023-04-04 21:22:31 42
原创 浅浅浅学 Nginx 基基基础(较为完整)
在这篇 CSDN 文章中,我们将为您介绍 Nginx 这一高性能、可扩展且安全的 Web 服务器软件。作为一款广泛应用于各种 Web 应用程序的服务器,Nginx 已成为许多开发者和系统管理员的首选。我们将简要介绍 Nginx 的主要特性,包括其轻量级架构、高并发性能以及反向代理和负载均衡等功能。
2023-04-03 15:24:13 375
原创 【笔试算法】某某某些厂
这是某某某些大厂的笔试算法题,正在刷题的朋友们了解了解它与力扣上面的算法题的区别呀~ 要是有大佬顺便评论区帮帮就太好了~小菜鸟在线感激不尽~
2023-03-13 10:33:53 386
原创 【基础算法】链表篇
为什么要有链表这种东西,受不了了,太难了。。。关于链表,你该了解这些!什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
2023-03-10 22:03:03 90
原创 Java基基基基础
Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
2023-03-08 11:13:09 997
原创 【基础算法】数组篇
数组是较为基础的数据结构,一般题目的思想都不难,重点在于我们对代码的掌控能力。数组是存放在连续内存空间上的相同类型数据的集合,正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。注意:数组的元素是不能删除的,只能覆盖!
2023-03-02 09:42:21 64
原创 多版本并发控制
MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过。这项技术使得在InnoDB的事务隔离级别下执行 一致性读 操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。
2023-03-01 09:10:25 88
原创 关于Java线程
当使用多个线程来访问同一个数据时,将会导致数据不准确(数据不一致),相互之间产生冲突,非常容易出现线程安全问题线程同步的真实意思其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。所以,用同步机制来解决这些问题,加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。
2023-02-26 12:33:17 99 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人