- 博客(64)
- 收藏
- 关注
原创 lambda表达式原理
lambda表达式原理: Lambda 表达式引用的局部变量必须是最终变量或实际上的最终变量,也就是说局部变量在被创建后不得被重新赋值。 Lambda表达式是一个语法糖,会被编译生成为当前类的一个私有方法,Lambda表达式内直接引用局部变量本质是一种隐式传参,编译时会自动将引用的局部变量放到参数列表中(Lambda方法多了个参数),而引用的实例变量并不需要放到参数列表,因为方法内可以直接引用。 那么造成直接引用的局部变量需要final修饰的原因应该和这种隐式传参有关,所以这里需要再提一下
2022-04-17 15:20:42
2146
原创 自定义注解和动态代理
自定义注解和动态代理2.自定义注解的使用注解类@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface StringDT { String value() default "defa";}测试
2022-02-13 20:33:16
503
1
原创 spring中ioc容器与aop之间的关系
spring中ioc容器与aop之间的关系 spring的ioc 容器中默认都是原生对象,只有通过aop增强的对象才是代理对象。配置了aop的类或者类中方法上有@Transactional注解的(因为@Transactional注解的原理就是基于aop的)。 当出现了aop增强,在ioc容器当中的对象是代理的对象,但里面的属性对象为null,代理对象如何调用该对象中的方法呢? 使用的生成代理对象之前的target对象,该对象里面其他对象属性就有值,不会出现空指针,问题1: 自身调
2021-12-26 20:31:01
1657
原创 分页PageHelper是如何实现分页信息
分页PageHelper是如何实现分页信息 PageHelper.startPage(0,10); List<TAccount> tAccounts = tAccountMapper.selectAccountList(); PageInfo pageInfo = new PageInfo<>(tAccounts);第一步:PageHelper.startPage(0,10);设置page信息到ThreadLocal中/** * 开始分页 *
2021-12-12 19:14:43
1030
原创 mysql排序与索引关系
MySQL排序与索引的关联sql语句:EXPLAIN SELECT id FROM account LIMIT 99999, 20EXPLAIN SELECT id FROM account WHERE id >( SELECT id FROM account LIMIT 99999, 1 ) LIMIT 0,20 这两种效率是类似的,网上不晓得是如何弄得,亲测 https://www.cnblogs.com/wanghongsen/p/126165
2021-12-05 22:06:04
1642
原创 mysql覆盖索引
MySQL覆盖索引 需要判断是否需要回表操作,就比如查询条件和where条件都存在索引,但是不一定会覆盖索引,联合索引可以更好地适合覆盖索引。假如以下字段全是普通索引:EXPLAIN SELECT id, sku_name FROM t_supplier_goods WHERE supplier_id = 3不会走覆盖索引Extra为nullEXPLAIN SELECT id, supplier_id FROM t_supplier_goods WHERE suppli
2021-11-29 22:23:48
786
原创 私有方法中注入对象为空
私有方法注入对象为空为什么在自身注入对象调用自身private方法,方法中注入的对象为空为什么this调用不会? @Transactional(rollbackFor = Exception.class, value = "instalmentTransactionManager") public void testObjectDisable() { activityManagerServiceImpl.test02(); } private void tes
2021-11-21 21:56:54
1137
原创 Jvm类加载
jvm类加载: 类加载的时间:按需加载,运行期间 常量:final static 在准备阶段进行赋值 类变量:static 准备阶段为null或者0之类的,初始化阶段进行赋值 变量:创建对象的时候进行赋值 创建对象的步骤: 举例:new 类名 1.根据new的参数在常量池中定位一个累的符号引用, 2.如果没有找到这个符号引用,说明类还没有被加载,则进行类的加载、解析和初始化 3.虚拟机为对象分配内存(位于堆中) 4.将分配的内存初始化为0值(不包括对
2021-11-14 20:46:19
414
原创 stream 流中toMap和groupBy映射时顺序错乱问题
stream 流中toMap和groupBy映射时顺序错乱问题toMap方法使用LinkedHashMap保留原来的顺序。 querySupplierSalesRankVOList.stream() .collect(Collectors.toMap(QuerySupplierSalesRankVO::getSupplierName, Function.identity(), (k1, k2) -> k1, LinkedHashMap::new))mergeFunction用
2021-11-07 21:38:36
1866
原创 Java锁的简单梳理
重量级锁与轻量级锁 轻量级锁一般使用的是cas原理,进行自旋来获取锁,如果一直有多个线程发生竞争的话,会发生CPU过高的情况。 重量级锁一般使用Synchronized或者ReentrantLock,ReentrantLock底层原理是AQS。Synchronized有锁升级的过程,ReentrantLock可操作性更强,比如选择公平锁或者非公平锁(饿死现象),以及手动释放等。CountDownLatch:创建时的参数为计数器的值 await()方法:阻塞等待执行,aqs countD
2021-10-31 21:03:16
147
原创 迭代器与快速失败
迭代器与快速失败 List<Employee> list = new ArrayList<>(); Employee employee = new Employee("w", 2); list.add(employee); list.add(new Employee("q",8)); Iterator<Employee> iterator = list.iterator(); while (
2021-10-24 14:07:29
437
原创 mysql事务
mysql事务问题当前读: select…lock in share mode (共享读锁) select…for update update , delete , insert当前读由行锁+间隙锁实现快照读:由mvcc+undolog实现 MVCC机制和间隙锁的存在,解决了快照读的可重复读问题并且部分解决了快照读的幻读问题。依然存在个别情况下快照读幻读问题及当前读的幻读问题。 MVCC仅仅解决来于select的幻读,在update/delete/insert命令中的where条
2021-10-17 18:03:22
76
原创 count(*) 和 count(1)和count(字段)区别
count(*) 和 count(1)和count(字段)区别执行效果上看: count(*) 包括了所有的列,相当于行数,在统计结果的时候,不会忽略字段值为NULL的列 ; count(1) 包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略字段值为NULL的列 ; count(列名) 只包括列名那一列,在统计结果的时候,会忽略字段值为值为NULL的列(这里的空不是指 空字符串“” 或者 0,而是表示null)的计数,即某个字段值为NULL时,不统计。执行效率上看: 列名
2021-06-29 23:35:09
145
原创 redis面试常问
Redis优点:速度快缺点:只适合存储一些较为简单的数据,不合适复杂查询的数据,不适合持久化储存海量数据持久化:**RDB:**把数据以快照的形式保存在磁盘上。save,bgsave,自动化redis.conf优点:全量备份适用于备份和灾难恢复缺点:快照持久化期间修改的数据不会被保存**AOF:**开启AOF后RDB默认会失效优点:AOF可以更好的保护数据不丢失缺点:AOF日志文件通常比RDB数据快照文件更大Redis集群: 主从复制: 主备切换(哨兵): cluste
2021-04-23 20:15:33
99
原创 ReentrantLock与Synchronized的区别
ReentrantLock与Synchronized的区别(都是可重入锁,悲观锁)1.Synchronized属于jvm层面,能够锁升级,比较自动,简单。Lock是api层面的锁,比较灵活。2.Synchronized不需要手动释放锁。Lock必须释放锁,常配合try/finally来使用。是否可中断Synchronized不可中断,(调用wait、sleep、join中断状态设为false出现异常)ReentrantLock可中断 tryLock超时方法 interrupt()方法
2021-04-23 15:44:11
135
原创 Linux常用命令
进程相关:kill -9 <pid> 终止指定进程top 正在执行的进程相关信息 id,内存,cpups -ef : 显示所有进程 ps: 查看当前运行的进程状态ps -ef|grep <进程号> 查看指定进程是否在运行,并得到进程号文件相关pwd 当前路径cd 切换目录ls 列出路径下的文件mkdir 创建文件夹touch 创建文件rmdir 删除文件夹rm
2021-04-23 12:24:36
84
原创 排序算法
排序算法插入排序:如输入的数据已预先排好,运行时间会大大缩减,流程从p=1开始往p–的方向去比较,如果小于(正序)则将其交换位置。希尔排序:分组length/2,(0,length/2)是否交换,底层原理想插入排序。但效率比插入排序更快堆排序:大顶堆(升序),小顶堆(降序) 完全二叉树归并排序:分而治之的思想8, 4, 5, 7, 1, 3, 6, 2 —> 8,4,5,7 1,3,6,2 —> 8,4 5,7 1
2021-04-23 11:00:29
84
原创 RabbitMQ
RabbitMQ:什么是MQ(消息队列): 消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。 三个特点:异步,解耦,流量削峰。实现: 消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。当前使用较多的消息队列有 RabbitMQ(数据不会丢失,常用) 、 RocketMQ (有些不开源)、 ActiveMQ(并发量太小) 、 Kafka(消息丢失) 、 ZeroMQ 、 MetaMq等,而部分数据库如 Redis 、 M
2020-12-13 20:58:53
164
原创 Redis
Redis:1.学习目标:2. Redis的介绍2.1. Redis是什么? Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings) , 散列(hashes) , 列表(lists) , 集合(sets) , 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了复制(replic
2020-12-13 20:57:38
230
原创 Git
Git:1.学习目标2.3.分布式版本控制系统 为了解决集中化版本管理所带来的问题分布式版本管理控制系统(Distributed Version Control System,简称 DVCS)就应运而生了. 在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等, 客户端不只是提取出最新版的文件快照, 而是把最原始的代码仓库镜像到本地. 这样一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓
2020-12-13 20:56:04
212
原创 运算符优先级和数据库返回值和Integer比较
运算符优先级和数据库返回值和Integer比较: 使用List<Object>list去接收从数据库查到的内容时,如果没查到数据,返回的是一个没有数据的list,但list不为空。 如果id属性是Integer,则!=比较的是地址,需要使用equals方法进行比较。AssertUtil.isTrue (dbModule.getId()!=module.getId(),"");运算符的优先级//如果${(module.moduleStyle)没有值的话,// 就会为"",然
2020-12-07 21:30:46
139
原创 freeMarker数据获取与后端方法级别访问控制
freeMarker数据获取与后端方法级别访问控制:freemarker中表单数据的提交:获取到的多选下拉框数据为字符串:roleId: “14,2,3,17”所以传到后端时,需要用String接收,然后进行依赖","分隔。freeMarker数据表格提交:var dataUsers=table.checkStatus(obj.config.id).data;console.log(dataUsers); var ids="ids="; for (var i
2020-12-06 12:07:43
755
原创 jquery和freemarker用法
jquery和freemarker用法:jquery的$.ajax用法, $.post用法, $.get用法, $.getJSON用法jquery:$("input[name='id']").val(); //获取input标签中name属性为id的值。//是否选中$("#rememberMe").prop("checked")freemarker样式中常用data.filed //得到表单提交的信息 form.on //监听表单的
2020-12-06 11:51:40
965
原创 全局异常捕获和非法访问拦截
全局异常捕获和非法访问拦截全局异常捕获spring mvc: 自定义一个全局异常类实现HadlerExceptionResovler接口类重新里面的方法public class GlobalException2 implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest request,
2020-12-06 11:22:02
359
原创 分页查询
分页查询:layui的内置模块的数据表格需要的数据结构为:{ "code": 0, "msg": "", "count": 1000, "data": [{}, {}]} 分页查询:依赖:<!-- 分页插件 --><dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starte
2020-12-06 11:00:23
178
原创 全局异常捕获与非法访问拦截
全局异常捕获与非法访问拦截全局异常捕获spring mvc: 自定义一个全局异常类实现HadlerExceptionResovler接口类重新里面的方法public class GlobalException2 implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest request,
2020-12-02 22:16:19
254
原创 拦截器和过滤器的区别
拦截器和过滤器的区别过滤器和拦截器的区别:①拦截器是基于java的反射机制的,而过滤器是基于函数回调。 ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截
2020-11-29 18:13:57
157
原创 SpringBoot学习笔记
SpringBoot1. 学习目标2. Spring框架发展史2.1. Spring1.x 时代 在 Spring1.x 时代,都是通过 xml ⽂件配置 bean,随着项⽬的不断扩⼤,需要将 xml 配置分放到不同的配置⽂件中,需要频繁的在 java 类和 xml 配置⽂件中切换。2.2. Spring2.x 时代 随着 JDK 1.5 带来的注解⽀持,Spring2.x 可以使⽤注解对Bean进⾏声明和注⼊,大大的减少了 xml配置⽂件,同时也大大简化了项⽬的开发。那么,问题来了
2020-11-29 17:37:37
997
原创 SSM 框架集成与测试
SSM 框架集成与测试4.1. 环境配置4.1.1. IDEA 下创建项⽬创建Maven对应的Web项⽬4.1.2. 配置 pom.xml4.1.2.1. 修改 JDK 版本<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source>
2020-11-29 17:01:43
236
原创 SpringMVC基础内容
SpringMVC1.学习目标2.MVC 思想 & SpringMVC 框架概念与特点2.1. 什么叫MVC? 模型-视图-控制器(MVC)是⼀个众所周知的以设计界⾯应⽤程序为基础的设计思想。它主要通过分离模型、视图及控制器在应⽤程序中的角色将业务逻辑从界⾯中解耦。通常,模型负责封装应⽤程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来⾃⽤户的请求,并调⽤后台服务(service或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了⼀些数据在视图层
2020-11-29 16:55:23
235
原创 Spring事务
Spring事务概念事务的四大特性(ACID)原子性(Atomicity) 共⽣死,要么全部成功,要么全部失败!⼀致性(Consistency) 事务在执⾏前后,数据库中数据要保持⼀致性状态。(如转账的过程 账户操作后数据必须保持⼀致)隔离性(Isolation) 事务与事务之间的执⾏应当是相互隔离互不影响的。(多个⻆色对统⼀记录进行操作必须保证没有任何干扰),当然没有影响是不可能的,为了让影响级别降到最低,通过隔离级别加以限制:READ_UNCOMMITTED (读未提交)
2020-11-29 16:39:56
101
原创 java中取模运算%和取余运算floorMod的区别
java中取模运算%和取余运算floorMod的区别: 对于整数 a ,b来说,取模运算和取余运算的过程相同:求整数商:c = a / b计算模或者余数:r = a − c × b 取余运算在取 c 的值时,向 0 方向舍入( fix() 函数);而取模运算在计算 c 的值时,向负无穷方向舍入( floor() 函数)。%: System.out.println(5%3); System.out.println((-5)%(3)); System.out.println((5)%(
2020-11-25 14:15:09
652
5
原创 Spring集成Mybatis详细步骤
Spring集成MybatisIDEA 下创建项目 创建Maven对应的Java项目添加坐标依赖<dependencies> <!-- junit 测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12<
2020-11-24 22:07:51
379
原创 Spring AOP简单入门学习
Spring AOP1.主要内容:2.代理模式 代理模式在 Java 开发中是⼀种⽐较常⻅的设计模式。设计⽬的旨在为服务类与客户类之间插⼊其他功能,插⼊的功能对于调⽤者是透明的,起到伪装控制的作⽤。如租房的例⼦:房客、中介、房东。对应于代理模式中即:客户类、代理类 、委托类(被代理类)。 为某⼀个对象(委托类)提供⼀个代理(代理类),⽤来控制对这个对象的访问。委托类和代理类有⼀个共同的⽗类或⽗接⼝。代理类会对请求做预处理、过滤,将请求分配给指定对象。⽣活中常⻅的代理情况: 租房中介、婚
2020-11-24 22:02:04
236
原创 Spring IOC简单入门
Spring IOC:主要内容:Spring框架Spring框架概念 Spring 是众多开源java项⽬中的⼀员,基于分层的javaEE应⽤⼀站式轻量级开源框架,主要核⼼是IOC(控制反转/依赖注⼊)与 AOP(⾯向切⾯)两⼤技术,实现项⽬在开发过程中的轻松解耦,提⾼项⽬的开发效率。 在项⽬中引⼊ Spring ⽴即可以带来下⾯的好处 降低组件之间的耦合度,实现软件各层之间的解耦。可以使⽤容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使⽤容器管理事务时,开发⼈员就不再需要⼿
2020-11-22 10:21:18
173
原创 Freemarker简单入门
freeMarker:主要内容:FreeMarker概述:Freemarker概念: FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,将视图从业务逻辑中抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出。虽然 FreeMarker 具有一
2020-11-22 10:18:48
777
原创 servlet过滤器简约版
servlet过滤器:过滤器:介绍: Filter 即为过滤,⽤于在 Servlet 之外对 Request 或者 Response 进⾏修改。它主要⽤于对⽤户请求进⾏预处理,也可以对 HttpServletResponse 进⾏后处理。使⽤ Filter 的完整流程: Filter 对⽤户请求进⾏预处理,接着将请求交给 Servlet 进⾏处理并⽣成响应,最后 Filter 再 对服务器响应进⾏后处理。在⼀个 web 应⽤中,可以开发编写多个 Filter,这些 Filter 组合 起来称之为
2020-11-18 14:56:15
125
1
原创 JSP和JSTL学习
JSP和JSTL学习:主要内容:JSP:JSP的基础语法:简介: JSP:Java Server Page SUN 公司提供的动态⽹⻚编程技术,是 Java Web 服务器端的动态资源。 它相⽐ html ⽽⾔,html 只能为⽤户提供静态数据,⽽ Jsp 技术允许在⻚⾯中嵌套 java 代码,为⽤户提供动态数据。 相⽐ servlet ⽽⾔,servlet 很难对数据进⾏排版,⽽ jsp 除了可以⽤ java 代码产⽣动态数据的同时,也很容易对数据进⾏排版。 不管是 JS
2020-11-18 14:54:34
192
原创 Servlet全面学习
Servlet全面学习:HTTP协议: HTTP 协议(Hypertext Transfer Protocol, 超⽂本传输协议),是⼀个客户端请求和响应的标准协议,这个协议详细规定了浏览器和万维⽹服务器之间互相通信的规则。⽤户输⼊地址和端⼝号之后就可以从服务器上取得所需要的⽹⻚信息。通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫"请求协议";服务器发送给客户端的格式叫"响应协议"。浏览器中的书写格式: 服务器端资源需要通过浏览
2020-11-17 22:06:40
412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人