- 博客(24)
- 收藏
- 关注
原创 第十八天,7月12日,八股
类似一个大数组只存0或1,Bitmap 使用比特位(bit)来表示元素的状态,每个比特位只能是 0 或 1,因此非常适合于统计二值状态,如在线状态(0离线,1在线)、签到记录等,Bitmap 操作通常具有常数时间复杂度(O(1)),使得更新和查询操作非常快速(1)setbit(2)getbit场景:当日网站访问量(user visitor(uv))假设用户id={2,4,5}访问注意:用集合或者key-value键值对存储,空间非常大【例如存值为id,long类型则64位,8字节】;
2025-07-12 21:32:42
331
原创 第十七天,7月11日,八股
不可以(1)事务的支持:Mysql提供了强大的事务支持(ACID),redis虽然也提供了事务,但是他的事务基于乐观锁,不具备严格的ACID(2)查询方面:MySQL具有丰富的查询和聚合功能,支持复杂的条件查询,多表操作等(3)内存的限制:虽然redis能够根据RDB和AOF进行持久化(写入磁盘),但是大量的数据还是存储在内存中,存储容量收到物理内存的限制,不适合大规模数据存储。
2025-07-11 15:34:25
964
原创 第十六天,7月10日,八股
需要时才加载关联对象,而不是查询主对象时,立刻加载所有关联对象,这样可以提高查询性能并减少不必要的数据库访问,例如:一个订单表包含着商品列表(一对多),当查询订单对象时,不会立刻从数据库加载商品列表,而是等到第一次真正使用到商品时采取查询数据库一般一对多,多对多的场景适用延迟加载,如何开启?
2025-07-10 13:58:31
1011
原创 第十五天,7月9日,八股
MyBatis是一个Java持久化框架,它通过使用简单的XML或注解来简化关系型数据库的访问(1)读取mybatis配置文件:mybatis-config.xml 配置了mybatis的运行环境等信息,如数据库连接信息,别名,映射文件路径(mapper.xml)等(2)加载映射文件:mapper.xml,就是sql语句(3)构造会话工厂:通过环境等配置信息,构造会话工厂SqlSessionfactory。
2025-07-09 19:45:42
772
原创 第十四天,7月8日,八股
就是如何把自定义的类(调度器的任务类)加入到Spring生命周期(1)接口ApplicationRunner或者CommandLineRunner这个两个接口都只提供了一个run方法,实现上述接口的类加入ioc即可生效(2)使用@PostConstruct注解,即可在bean初始化后立刻执行代码 就是如何实现热部署 使用开发工具dettools,添加依赖spring-boot-devtools即可,但是该模式在生产环境中禁用SpringMVC中最常用的注解,可以处理http请求(1)RequestM
2025-07-08 14:54:44
336
原创 第十三天,7月7日,八股
Spring-Boot-Starter是Springboot的核心启动器,包含了自动配置,日志和yaml等基础设施主要特点是:(1)简化依赖管理:通过引入Starter,开发者无需手动添加和管理大量的依赖项(以前是通过lib包)(2)约定大于配置::Starter遵循“约定优于配置”的原则,通过默认的配置满足大多数场景的需求,减少了手动配置的工作量。
2025-07-07 14:10:02
515
原创 第十二天,7月6日,八股
由pivotal团队提供的基于spring的全新框架,为了简化Spring 应用的初始搭建和开发过程,该框架使用了特定的方式进行配置,从而使开发人员不在需要定义样板化的配置注意:主要答出自动装配或者约定大于配置(就是在开发中,如果有些值你没有配置的话,那程序会取一个默认值,换句话说,能取默认值的配置,就不需要配置了,这个默认值就是约定。
2025-07-06 13:36:34
538
原创 第十一天,7月5日,八股
(1)利用分区parition实现并行处理(2)顺序写入磁盘,提高了磁盘的写入速度(避免了磁盘的随机读写操作,从而减少了磁盘寻道时间和旋转延迟)(3)充分利用page cache,数据写入时,先写入page cache,然后再定时写入磁盘;读取数据时,先从page cache查找数据,找不到再去磁盘读取(4)零拷贝技术,减少了数据在用户态和内核态之间的拷贝技术(通过使用sendfile系统调用,系统直接从page cache(页缓存)考考呗到socket缓冲区)
2025-07-05 13:44:43
244
原创 第九天,7月3日,八股
(1)AT模式:提供无侵入自动补偿的事务模式(默认模式;这里是基于本地能支持事务的关系型数据库,然后java通过jdbc访问数据库;无侵入是指:只需要加上注解就可以开启全局事务;自动补偿是指:各分支事务先提交,如果发生回滚,则反向操作实现数据回滚;最终强一致性)(2)XA模式:支持已实现XA接口的数据库的XA模式(mysql,oracle都实现了XA(XA接口是提供资源管理器与事务管理器之间进行通信的标准接口);强一致性)(3)TCC模式:自己编写业务逻辑实现(try();Confirm();
2025-07-03 13:44:24
906
原创 第八天,7月2日,八股
为不同服务创建不同的spring上下文,不同的spring上下文中存放对应这个服务的所有配置源码分析:(1)springClientFactory中可以查看所有ribbon的信息:有getLoadBalancer()、getClientConfig()(2)getClientConfig()中有getInstance()方法,getInstance(name,type)中是获取上下文getContext(name),根据服务服务名判断是否存在,不存在则创建,否则直接获取上下文。
2025-07-02 14:04:50
733
原创 第六天,6月30日,八股
(1)5大数据类型:String、List、Set、ZSet、Hash(2)作为缓存(3)服务无状态:token、根据自己的项目(单机锁、分布式锁)
2025-06-30 21:03:54
473
原创 第五天,6月29日,八股
同步代码块和同步方法,编译之后还会在代码开始和结尾添加上两个字节码指令monitorenter和monitorexit(1)当jvm执行到monitorenter时,当前线程会尝试获取monitor对象的所有权,未加锁或者锁被当前线程持有,就把锁的计数器加1。【其中ObjectMonitor中几个重要参数:_owner:持有锁的线程;_cxq:获取锁失败后,线程放到当前的单向链表中;_WaitSet:保存wait的线程信息,双向链表;
2025-06-29 14:57:17
683
原创 第四天,6月28日,八股
默认sql查询时间超过10s就是慢查询(1)查询慢查询是否打开:show variables like 'slow_query_log'(2)未打开则:set global slow_query_log=1(3)查看慢查询的阈值(默认10秒):show variables likke '%slow_query_time%'(4)修改阈值为3秒:set global slow_query_time=3。
2025-06-28 14:48:33
578
原创 第三天,6月27日,八股
加载==》链接(验证、准备、解析)==》初始化(1)加载:将字节码文件从不同的数据源(class文件、jar文件)转成二进制字节流加载到内存中,并生成一个代表该类的java.lang.class对象(2)验证:jvm对二进制字节流进行验证:文件格式验证、元数据验证(语法验证,非抽象类是否实现了所有抽象方法)、字节码验证、符号引用验证(常量池的描述类是否存在,访问的方法或者字段是否存在且具有权限)(3)准备:为类的静态变量分配内存,并初始化为默认值,例如:文件static int a=1;
2025-06-27 14:44:20
648
原创 第二天,6月26日,八股
传统方法:记录用户登录时间、退出时间,然后相减,但是用户如果非正常退出,长时间挂机怎么办?方法一:引入心跳机制(探活,可以利用socket+调度器来定时发送信息进行实现)如果大于k分钟没有回应,则认为该用户下线方法二:(小规模)利用数据库去记录用户的最后一次操作的时间,然后利用调度器(timer,xxl-job)去扫描数据库中,所有用户的最后操作时间是否大于k分钟,大于则判定下线。注意用户下线要删掉数据库信息,上线则加入数据库,每次操作都只更新最后操作时间。(该表保存了所有在线的用户信息)
2025-06-26 22:04:07
448
原创 第一天,6月25日,八股
(1)控制反转:原来的对象是由使用者进行控制的,有了spring之后,可以把整个对象交给spring进行 控制(2)DI依赖注入:把对应属性的值注入到具体对象中,如@Autowired、populateBean完成属性值的注入(3)容器:存储对象,使用map结构进行存储,在spring中一般存在三级缓存,一级缓存存放完整的单例bean对象(4)bean的创建到销毁都是由容器进行管理的,容器的创建过程。
2025-06-25 17:09:58
708
原创 Redis学习
1、keys*: 查看当前库所有key2、exists key: 判断某个key是否存在3、type key: 查看你的key是什么类型4、del key: 删除指定的key5、unlink key: 根据value选择非阻塞(异步)删除6、expire key 10: 为给定的key设置过期时间,单位秒7、ttl key: 查看还有多少秒过期,-1表示永不过期,-2表示已过期9、select :命令切换数据库10、dbsize: 查看当前数据库的key的数量。
2024-06-19 17:50:52
1099
原创 01背包——基于java实现
有n个物品,它们有各自的价值和体积,现有给定容量的背包,如何让背包装入的物品的价值最大?如:假设你的背包容量为10,物品的重量和价值如下,且每个物品只有一个,怎么样拿才能使你背包的价值最大呢?用xi代表第i个珠宝的选择(xi = 1代表选择该珠宝,0则代表不选),vi代表第i个珠宝的价值,wi代表第i个珠宝的重量。于是我们就有了这样的限制条件:(背包容量)
2024-03-26 20:26:43
986
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1