自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 收藏
  • 关注

原创 面试笔记——多线程基础

操作系统中有一个组件叫做任务调度器,将cpu的时间片(windows下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于cpu在线程间(时间片很短)的切换非常快,人类感觉是同时运行的。wait() ,wait(long) 和 sleep(long) 的效果都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态;t.join() 阻塞调用此方法的线程进入timed_waiting,直到线程t执行完成后,此线程再继续执行。一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行。

2024-04-24 19:07:44 590

原创 面试笔记——Java集合篇

Arrays.asList转换list之后,如果修改了数组的内容,list会受影响,因为它的底层使用的Arrays类中的一个内部类ArrayList来构造的集合,在这个集合的构造器中,把我们传入的这个集合进行了包装而已,最终指向的都是。不过,二叉树并不要求每个节点都有两个子节点,有的节点只有左子节点,有的节点只有右子节点。二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。HashMap的数据结构: 底层使用hash表数据结构,即。

2024-03-26 19:27:46 871

原创 面试笔记——MyBatis(执行流程、延迟加载和缓存)

是一个持久层框架,用于简化Java 应用程序与数据库之间的交互过程。具体而言,它提供了一种将数据库操作映射到 Java 方法的方式,通过 XML 文件或注解配置 SQL 语句与 Java 方法的映射关系。使用 MyBatis,开发人员可以通过简单的配置文件或注解来管理 SQL 语句,而不需要直接编写 JDBC 代码。

2024-03-25 15:49:21 1018

原创 面试笔记——框架篇Spring系列(Spring、SpringMVC、SpringBoot)

由于一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,是要考虑线程安全问题的,可以使用多例或者加锁来解决。Spring容器在进行实例化时,会将xml配置的的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean。Spring bean并没有可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。

2024-03-25 13:57:56 1421

原创 面试笔记——MySQL(主从同步原理、分库分表)

具体的同步流程为:当主库的数据发生变化,会把操作语句写入到binlog的文件中;读取完成之后,就会把数据写入到从库的中继日志Relay log中;再由从库的SQLthread线程读取Relay log,并执行里面的命令;执行完成之后,主库与从库的数据就会保持一致。MySQL主从复制的核心就是二进制日志(BINLOG),它记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。主从同步结构:主库负责写数据,从库负责读数据,如图——

2024-03-22 14:30:40 461

原创 面试笔记——MySQL(事务:事务特性、并发事务、事务隔离、Redo Log与Undo Log、MVCC)

这种方式也称为WAL。假设事务 A 在执行查询时读取了某一行数据,然后事务 B 修改了这行数据并提交了事务,之后事务 A 再次执行相同的查询,此时得到的数据就可能与之前不同,导致了不一致的读取结果。若数据还未完成同步,而服务器发生宕机,那么内存中的数据就会丢失,已经操作完成的数据(在缓存中)也会丢失,因此违背了事务的持久化的特性。假设有两个事务,事务 A 读取了事务 B 修改但尚未提交的数据,然后事务 B 回滚了修改,那么事务 A 所读取的数据就是不正确的,因为它读取到了未提交的、“脏”的数据。

2024-03-22 12:51:59 1279

原创 面试笔记——MySQL(优化篇:定位慢查询、SQL执行计划、索引、SQL优化)

因为,当在进行分页查询时,如果执行 limit 9000000,10 ,此时需要MySQL排序前9000010 记录,仅仅返回 9000000 - 9000010 的记录,其他记录丢弃,查询排序的代价非常大。是指一个索引包含了查询语句所需的所有列,从而使得查询可以直接从索引中获取所需的数据,而无需回表查询。覆盖索引通常用于查询语句的列与索引列完全匹配的情况。最左前缀法则(或最左前缀匹配)指的是当一个查询包含了多列的复合索引时,查询条件查询从索引的最左前列开始,并且不跳过索引中的列。

2024-03-21 16:20:01 1059

原创 面试笔记——Redis(集群方案:主从复制、哨兵模式和分片集群)

如图,若将老的master(左边的redis)强制降为Slave,此时这个Slave就会去新的master中去同步数据,将自己的数据清空,也因此丢掉了脑裂过程中(它还作为master)写入的数据。读写数据:根据key的有效部分计算哈希值,对16384取余(有效部分,如果key前面有大括号,大括号的内容就是有效部分,如果没有,则以key本身做为有效部分)余数做为插槽,寻找插槽所在的实例。每个部分的哨兵节点都会尝试选举新的主节点,导致整个集群中出现多个主节点,这将导致数据不一致和服务不可用。

2024-03-20 15:41:48 593

原创 面试笔记——Redis(分布式锁的使用场景及实现原理)

上图的流程为:首先,8080的线程1尝试获取分布锁,获取锁后,分布式锁中会添加记录“线程1”,证明该线程已经持有锁了,随后执行自己的业务代码;答:根据业务执行时间预估(但是该方式不太靠谱,万一出现抖动或网络卡顿,都会导致执行时间变慢,这个时间是不好控制的)或 采取给锁续期(创建一个新的线程用于监控,若业务执行时间较长时,就增加这个当前业务线程持有锁的时长——通过redisson实现)。此时,若又有一个新的应用获取到分布式锁,则出现了两个线程同时持有同一把锁的情况,丧失了锁的互斥性,有可能出现脏数据的现象。

2024-03-20 11:17:51 851

原创 面试笔记——Redis(数据过期策略、数据淘汰策略)

可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)——惰性删除、定期删除。当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。扫描缓存中的数据(从一定数量的数据库中取出一定数量的随机key进行检查),并删除那些已经过期的数据项。缺点 :对内存不友好,如果一个key已经过期,但是一直没有使用,那么该key就会一直存在内存中,内存永远不会释放。惰性删除+定期删除。

2024-03-19 19:49:10 450

原创 面试笔记——Redis(双写一致、持久化)

当有数据被写入数据库,会把数据库发生的变化记录到BINLOG(二进制日志)文件中(如DDL【数据定义语言】语句和DML【数据操纵语言】语句),但不包括数据查询语句(如,SELECT、SHOW)。因为是记录命令,AOF文件会比RDB文件大的多。:由于数据库一般采取的是主从模式,当主节点的数据发生改变时,需要一定的时间等待其他的从结点完成数据同步,因此需要延时删除缓存。在执行更新操作之前,先进行一次删除缓存操作(删除旧数据),等数据库修改之后,再进行一次删除缓存操作(确保删除旧数据),降低脏数据的出现。

2024-03-19 12:45:05 720

原创 面试笔记——Redis(缓存击穿、缓存雪崩)

流程如图:在该例子中,线程1发现数据的逻辑时间过期后,申请获取互斥锁,在申请成功后,重新创建一个线程——线程2用于更新缓存数据,但线程1不必等到线程2执行结束后再继续执行,而是获取缓存中的旧数据(没有到达物理过期时间,因此还可以获取该数据)继续执行;主要作用是监控 Redis 实例的健康状态,当主节点出现故障或不可用时,自动完成故障转移,并选择一个合适的从节点升级为新的主节点,以保证 Redis 服务的可用性,是Redis提供的一种高可用性解决方案。然后,更新逻辑过期时间,同时更新物理过期时间。

2024-03-18 19:37:18 1456

原创 面试笔记——Redis(使用场景、面临问题、缓存穿透)

这意味着在将数据加载到缓存中的同时,也对这些数据应用布隆过滤器的哈希函数,并将对应的比特位设置为1。因此,在正式使用之前,布隆过滤器已经包含了预先加载的数据集合,从而在后续的查询过程中,可以利用布隆过滤器先行判断一个元素是否可能存在于缓存中,以提高查询效率。因此,在使用布隆过滤器时,通常是在初始化时构建好布隆过滤器,然后对其进行查询操作,而不是对其进行频繁的更新操作。的数据时,缓存系统无法命中缓存,而每次请求都会直接访问底层存储系统,从而绕过了缓存系统,这种情况就称为缓存穿透。

2024-03-18 14:02:40 881

原创 Spring笔记——循环依赖与三级缓存

两个步骤是可以分离完成的,即,Bean都是单例的,我们可以先把所有的单例Bean实例化出来,放到一个集合当中(即,缓存),所有的单例Bean全部实例化完成之后,以后我们再慢慢的调用setter方法给属性赋值。bd.isLazyInit()),使用getBean()获取Bean实例。ObjectFactory 是函数式接口,可以将lambda表达式作为参数放到方法的实参中,在方法执行的时候,并不会实际的调用当前lambda表达式,只有在调用getObject方法的时候才会去调用lambda表达式。

2024-03-12 20:45:40 610

原创 Spring笔记——Bean的生命周期

Spring其实就是一个管理Bean对象的工厂,它负责对象的创建,对象的销毁等。生命周期的本质是:在哪个时间节点上调用了哪个类的哪个方法。我们可能需要在某个特殊的时间点上执行一段特定的代码,因此要了解在这个生命线上有哪些特殊时间点,把代码写到相应的节点上,当生命线走到该节点时,自然会调用该代码。

2024-03-08 11:24:31 248

原创 Apache POI的简单介绍与应用

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。PS: 一般情况下,POI 都是用于操作 Excel 文件,如图:银行网银系统导出交易明细各种业务系统导出Excel报表批量导入业务数据。

2024-03-03 22:29:11 526

原创 Apache Echarts介绍与入门

Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。

2024-03-01 14:38:22 833

原创 WebSocket介绍与应用

WebSocket 是基于TCP的一种的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请求响应模式WebSocket支持双向通信HTTP和WebSocket底层都是TCP连接应用场景:视频弹幕、网页聊天、体育实况更新、股票基金报价实时更新……

2024-02-29 21:28:57 583

原创 Spring Task的应用

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。定时任务框架定时自动执行某段Java代码引用卡每月还款提醒、银行贷款每月还款提醒、火车票售票系统处理未支付订单……

2024-02-28 20:06:59 483

原创 SpringBoot笔记——监控、项目部署

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、配置属性、日志信息等。① jar包(官方推荐)

2024-01-22 22:06:57 363

原创 SpringBoot笔记——原理相关(自动配置、监听机制、启动流程分析)

SpringBoot中提供了很多Enable开头的注解,这些注解都是用于动态启用某些功能的。而其底层原理是使用@Import注解导入一些配置 类,实现Bean的动态加载。:SpringBoot的web环境中默认使用tomcat作为内置服务器,其实SpringBoot中提供了4中内置服务器供我们选择。:时Spring 4.0增加的条件判断功能,通过这个可以实现选择性的创建Bean操作。SpringBoot 的监听机制,其实是对Java提供的事件监听机制的封装。

2024-01-22 21:12:07 785

原创 SpringBoot3笔记——配置相关

如果在同一个目录中,application.properties,application.yml和application.yaml同时存在,那么优先级为:application.properties > application.yml > application.yaml,优先执行高优先级文件中的相同配置。SpringBoot是基于约定的,许多配置都有默认值,可以使用application.properties或者application.yml(application.yaml)进行配置。

2024-01-21 11:43:10 851

原创 数据缓存(Redis, Spring Cache)——后端

(ps:Redis中的数据类型和Java中的数据类型并不是完全对应的,Java中的任何一个对象都可以转成Redis中的string字符串进行存储。dish_id表示分类id。Spring Cache只是提供了一层抽象,底层可以切换不同的缓存实现,包括EHCache,Caffeine,Redis等。(Redis的数据是存储在内存的,数据库的数据存储在磁盘,访问内存会更快。不同的注解对应支持生成key的方式可能不一样,比如@Chacheable中就不支持#result的形式,所以使用的时候可以通过。

2023-12-29 19:16:59 1162

原创 微信小程序登录(生成token,token校验)——后端

写在前面:如果想自己开发微信小程序,需要先到微信小程序官方平台注册账号,地址为:https://mp.weixin.qq.com/wxopen/waregister?action=step1.其中,开发者服务器就是我们的后端服务器,微信接口服务就是微信提供的服务。openid是微信用户身份的唯一标识。开发者服务器中所谓的自定义登录状态,就是记录当前用户的相关信息,比如存储用户的openid到数据库、生成token等。当小程序获取到开发者服务器返回的自定义登录态(token)后,小程序可以记录下该值,用它作

2023-12-28 21:22:01 3344 1

原创 HttpClient基础

HttpClient是Apache的一个子项目,可以提供高效的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。

2023-12-26 22:11:12 556

原创 Redis基础

Redis是一个基于内存的key-value结构数据库。与MySQL的区别:Redis是通过键值对的形式将数据存储在内存,而MySQL是通过数据文件以二维表的形式存储在磁盘上。基于内存存储,读写性能高;适合存储热点数据(热点商品、资讯、新闻等)官网:https://redis.io/;中文网站:https://www.redis.net.cn/

2023-12-25 18:38:05 908

原创 多表插入、删除操作(批量)——后端

代码思路:由DishController将前端的请求派发给相应的业务层(DishService),业务层随后通过调用持久层(DishMapper,DishFlavorMapper)进行数据的增删改。场景:当添加一个菜品时,还需要记录菜品的口味信息,因此需要对菜品表(dish)和口味表(dish_flavor)同时进行插入操作。

2023-12-20 16:02:45 632

原创 文件上传——后端

登录阿里云,并完成实名认证,

2023-12-19 19:45:37 1224 1

原创 公共字段自动填充——后端

场景:当处理一些请求时,会重复的对数据库的某些字段进行赋值(如:在插入和更新某个物品时,需要更新该物品的更新时间和更新者的信息),这样会导致代码冗余。需要注意的是,在反射中获取方法名时和判断拦截方法的类型时,分别采用的是。删除对应的服务实现类的赋值操作。

2023-12-18 16:34:38 694

原创 后端对数据库查询的时间格式化

【代码】后端对数据库查询的时间格式化。

2023-12-14 14:30:53 213

原创 接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具,如Swagger Editor(用于编辑Swagger规范)、Swagger UI(用于可视化API文档)和Swagger Codegen(用于根据API定义生成客户端库、server stubs等)。Swagger通过定义API的结构、参数、请求和响应格式等信息,帮助开发者更轻松地创建和管理API,并生成易于理解的文档。与Postman相比:Swagger更关注API设计和文档化,而Postman更适合测试、调试、监视API。

2023-12-12 19:38:38 679 2

原创 前后端请求之nginx配置

前端发送的请求,是如何请求到后端服务器的?如,前端请求地址:http://loclhost/api/employee/login:后端相应请求地址:http://loclhost:8080/admin/employee/login使用nginx进行反向代理,即将前端发送的动态请求由nginx转发到后端服务器。

2023-12-11 20:19:43 692

原创 Ubuntu中MySQL安装与使用

上面是sql语句哈,所以记得加分号。就先记录到这儿吧,后面边学边补充。

2023-12-01 21:49:17 124

原创 Ubuntu使用Nginx部署前端项目——记录

我第二天重启nginx的时候,发现它报错如work_process,events相关的错误,应该是configs下的test.conf与/etc/nginx/nginx.conf中的内容发生了冲突,所以我直接将test.conf的内容(见上面)复制在nginx.conf中,才重启成功。按理说,这时我们访问localhost的时候就会访问前端代码的index文件。添加:include /etc/nginx/configs/*.conf;查看nginx的启停状态:(如果正常启动,会看到绿色的Runing)

2023-11-30 11:10:21 297

原创 Spring学习笔记

文章目录Spring框架Spring入门Spring第一个程序启用Log4j2日志框架Spring对IoC的实现set注入构造注入set注入专题p命名空间注入c命名空间注入util命名空间基于XML的自动装配spring引入外部属性配置文件Bean的作用域GoF之工厂模式工厂模式的三种形态Bean的获取方式Bean的生命周期Bean生命周期之5步Bean生命周期之7步Bean生命周期之10步让Spring管理程序员new的对象Bean的循环依赖问题反射机制Spring IoC注解开发自定义注解与使用声明Be

2023-11-02 10:34:20 377 5

原创 Maven学习

Maven是Apache的一个开源项目,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。Maven可以让团队能够更科学的构建项目,我们可以用配置文件的方式,对项目的名称、描述、项目版本号、项目依赖等信息进行描述,这使得我们项目结构更加清晰,从而能快速上手项目。由于项目可能需要第三方库,所以Maven提出了Maven仓库的概念。把需要的依赖都放在仓库中,当项目需要时,就可以去Maven仓库中去获取;同时,其他项目组也需要同样的第三方库时,也可以直接去Maven获取。

2023-10-24 14:48:30 384

原创 JDBC相关记录

Java DadaBase Connectivity 即Java语言连接数据库。本质:JDBC是SUN公司制定的一套接口(interface)。作用:不同的数据库有自己独特设计原理,JDBC的可以让Java程序员关注业务本身,而不需要关注数据库底层是怎么实现的。(面向接口编程的作用:解耦合——降低程序的耦合度,提高程序的扩展力。多态机制就是典型的面向抽象编程。:先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中(针对文本编辑器开发,使用IDEA有自己的配置方式)。

2023-10-23 09:05:20 640

原创 MySQL基础

B站-老杜带你学练习。

2023-10-20 14:13:20 81

原创 Java基础之反射机制

加载完类之后,再堆内的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。的关键,反射机制允许程序再运行起家借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。(由于多态导致的),这可能会导致对象的编译时类型和运行时类型不一致。通过反射,可以调用类中的私有结构,是否与面向对象的封装性是否有冲突?反射(Reflection)是被是为。Class是反射的源头。

2023-10-10 16:07:46 101

原创 地震勘探——相关概念(二)

由上图可得:折射波与直达波是相交的,利用该交点可以求出折射界面的深度;折射波与反射波的时距曲线是相切的,相切点刚好是盲区的分界点,由于存在盲区,折射波的时距曲线与时间轴t是不想交的。直达波的时距曲线是一条过炮点的直线,直线的斜率是。地震分辨率:是指能够区分地下空间构造(或底层)的最小准确测量值,包括纵向分辨率和横向分辨率。分辨率(resolution):是指分离两个十分靠近的物体的能力。倾斜界面情况下,共中心点的反射波的传播可以等效为一个以等效速度。的倾斜界面,界面上的地层是均匀各向同性的,速度是。

2023-10-09 16:20:49 562

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除