自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 MySQL组内排序问题:分组查询每组的前n条记录

在开发中经常遇到这样一类需求:取每种类型排名前几的数据,在此我简称它为组内排序。比如:检索论坛中某一版块所有主题的最新一条帖子 查找所有会话中最新一条消息 查找一类商品的最新报价这类问题的共同点是:需要按某个字段分组,且每组只能取一条记录;按某个字段倒序。最近,在做公司业务SQL查询时,遇到一个有趣的问题:获取各个订单下更新时间最新的一条记录。每个订单每更新一次,都会根据更新内容生成一条新的记录。举例来说,有这样一个表:CREATE TABLE o_policy_orderrel..

2022-05-06 16:39:27 1934

转载 IntelliJ IDEA添加JavaDOC注释 方法 快捷键

第一种方法Settings ->Keymap ->Other ->Fix doc comment ->右键 ->选择 Add Keyboard Shortcut, 然后输入自定义的快捷键默认Fix doc comment是没有设置快捷键的,我这里把他设置成Alt + M把光标停在类名或者方法名上,按上面设置的快捷键第二种方法把光标停在类名或者方法名上,然后Alt + Enter,出现几个选项,选择Add Javadoc就OK了...

2022-03-11 10:33:19 6651

原创 Mysql实现乐观锁悲观锁

悲观锁:select ...for update如:select * from xxx where xxx=xxx for update前提条件:关闭自动提交实现条件:必须是使用了索引的,不然会把整个表锁住乐观锁:版本号控制记录修改前的版本号,看更新的时候是否与之前一致参考:探索Mysql锁机制(一)——乐观锁&悲观锁 - 简书...

2021-10-31 17:58:16 453 1

原创 ThreadLocal

1. ThreadLocal是Java中所提供的线程本地存储机制,可以利⽤该机制将数据缓存在某个线程内部,该线程可以在任意时刻、任意⽅法中获取缓存的数据(局部变量)2. ThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象(注意不是ThreadLocal 对象)中都存在⼀个ThreadLocalMap,Map的key为ThreadLocal对象,Map的value为需要缓 存的值 3. 如果在线程池中使⽤ThreadLocal会造成内存泄漏,因为当Thr

2021-08-22 16:50:10 140

转载 微服务架构下的安全认证与鉴权

从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断地经受考验。为了适应架构的变化、需求的变化,身份认证与鉴权方案也在不断地变革。面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认证是个难题。面对外部的服务访问,如何提供细粒度的鉴权方案也是个难题。单体应用VS微服务随着微服务架构的兴起,传统的单体应用场景下的身份认证和鉴权面临的挑战越来越大。在单体应用体系下,应用是一个整体,一般针对所有的请求都会进行权限校验。请求一般会通过一个权限的拦截器进行权限的校验,在登陆时将用户

2021-08-15 16:05:19 832

原创 Spring面试题

说⼀下Spring的事务机制 1. Spring事务底层是基于数据库事务和AOP机制的 2. ⾸先对于使⽤了@Transactional注解的Bean,Spring会创建⼀个代理对象作为Bean 3. 当调⽤代理对象的⽅法时,会先判断该⽅法上是否加了@Transactional注解 4. 如果加了,那么则利⽤事务管理器创建⼀个数据库连接 5. 并且修改数据库连接的autocommit属性为false,禁⽌此连接的⾃动提交,这是实现Spring事务⾮常重要的⼀步 6. 然后执⾏当前⽅法

2021-08-08 20:36:16 129

转载 Java的Arrays.sort()方法到底用的什么排序算法

网上看过很多JDK8中Arrays.sort的底层原理,有些说是插入排序,有些说是归并排序,也有说大于域值用计数排序法,否则就使用插入排序。。。其实不全对。让我们分析个究竟:1 // Use Quicksort on small arrays2 if (right - left < QUICKSORT_THRESHOLD) 3 { 4 //QUICKSORT_THRESHOLD = 2865 sort(a, left, right, true);

2021-08-03 22:27:14 536

原创 mybatis及Hibernate

mybatis的优缺点优点: 1、基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在 XML 里,解除 sql 与程序代码的耦合,便于统一管理;提供 XML 标签, 支持编写动态 SQL 语句, 并 可重用。 2、与 JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接; 3、很好的与各种数据库兼容( 因为 MyBatis 使用 JDBC 来连接数据库,所以只要JDBC 支持的数据库 MyBatis

2021-07-31 12:25:18 116

转载 java设计模式-观察者模式和中介者模式的异同

1.基本定义区别:观察者模式::察者模式属于行为型模式,指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式。中介者模式:中介者模式,属于行为型模式;定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。分析:a:都属于行为型模式b:都为了处理一对多的关系2.URML图区别:观察者模

2021-07-23 15:21:44 1134

转载 Redis分布式锁的正确实现方式

https://www.cnblogs.com/williamjie/p/9395659.html

2021-07-23 09:09:06 51

原创 MySQL优化

B 树因为内存的易失性。一般情况下,我们都会选择将 user 表中的数据和索引存储在磁盘这种外围设备中。但是和内存相比,从磁盘中读取数据的速度会慢上百倍千倍甚至万倍,所以,我们应当尽量减少从磁盘中读取数据的次数。另外,从磁盘中读取数据时,都是按照磁盘块来读取的,并不是一条一条的读。如果我们能把尽量多的数据放进磁盘块中,那一次磁盘读取操作就会读取更多数据,那我们查找数据的时间也会大幅度降低。如果我们用树这种数据结构作为索引的数据结构,那我们每查找一次数据就需要从磁盘中读取一个节点,也就是我

2021-07-20 22:49:53 159

原创 redis

Redis的过期键的删除策略我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。过期策略通常有以下三种:定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期

2021-07-19 21:47:24 73

原创 Spring-Bean生命周期

Spring Bean的生命周期分为四个阶段和多个扩展点。扩展点又可以分为影响多个Bean和影响单个Bean。整理如下:四个阶段实例化 Instantiation 属性赋值 Populate 初始化 Initialization 销毁 Destruction具体来讲解析类的BeanDefinition 得到构造方法,实例化得到一个对象 对对象中加了@autowired注解的属性进行属性填充 回调Aware方法,如BeanNameAware,BeanFactoryAware 调用Be

2021-07-17 14:51:55 147 1

原创 volatile、synchronized和ReentrantLock

关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要 从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问 的可见性。关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程 在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性 和排他性volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.sychronized和Reen

2021-07-14 22:25:24 121

原创 【Java并发编程艺术】Thread

Thread主要解决并发,即同时处理多任务CompletableFuture是异步,即不需等待,有结果后获取结果CompletableFuture也是通过线程来实现的(可以理解为是Thread的包装),,但是是守护线程(线程池ForkJoinPool),,如果不调用get()方法,可能会在主线程完成时候,守护线程就也结束了,守护线程的程序并不一定可以执行,,因此必须get()而Thread就不存在这样的问题。因此Thread比较适用于不需获取结果的操作。CompletableFut.

2021-07-14 14:10:02 117

原创 JVM精华总结

1.JVM内存模型2.类加载2.1 加载通过一个类的全限定名来获取定义次类的二进制流(ZIP 包、网络、运算生成、JSP 生成、数据库读取)。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法去这个类的各种数据的访问入口。2.2 验证 是连接的第一步,确保 Class 文件的字节流中包含的信息符合当前虚拟机要求。2.3 准备这个阶段正式为类分配内存并设置类变量初始值...

2021-07-13 20:33:16 284

原创 hashmap初始化容量为什么是2的幂次方

速度上的优化 有两点1.长度是2的n次幂是 取模阔以转换成取余 效率更高2.扩容的时候 这样的长度设置更高效 扩展也总是2次幂的 这样的话 元素位置要么在原位 要么移动2次幂如果不是 则性能会差很容易发生碰撞 扩容的话需要移动很多...

2021-07-12 22:09:01 355

原创 Linux介绍

版本Linux:发行版和内核版Linux与Windows的不同Linux严格区分大小写Linux所有内容以文件形式保存,包括硬件(一切皆文件)Linux不靠拓展名区分文件类型Windows下的程序不能直接在Linux中安装和运行2. 字符界面的优势:占用系统资源更少减少了出错、被攻击的可能性3.系统分区

2021-07-06 15:11:54 30

原创 性能优化概述

一、分布式缓存原理:缓存是指将数据存储在相对较高访问速度的存储介质中,供系统处理缓存的本质:缓存是一个内存Hash表。网站应用中,数据缓存以一对键值对(Key、Value)的形式存储在内存Hash表中。缓存的作用:用于存放读写比很高、很少变化的数据。网站数据访问通常遵循二八定律,80%的访问落在20%的数据上,因此利用Hash表和内存的高速访问特性,将这20%的数据缓存起来,可很好的改善系统的性能,提高数据的读取速度,降低存储访问压力。使用缓存应注意的问题:1. 频繁修改的数据不应.

2021-06-01 16:47:00 95

原创 SQL实例记录

入职最晚的员工信息(不一定只有一条) limit y分句表示: 读取 y 条数据 limit x, y分句表示: 跳过 x 条数据,读取 y 条数据 limit y offset x分句表示: 跳过 x 条数据,读取 y 条数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

2021-04-01 17:15:21 65

原创 Spring IOC

正式创建Bean对象实例的过程创建BeanFactory容器 加载配置文件,解析Bean定义信息 执行BeanFactoryPostProcessor (准备工作:准备BeanFactoryPostProcessor,广播器,监听器) 实例化操作 初始化操作 获取对象引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦。IOC控制翻转名称由来:软件系统在没有引入IoC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创.

2021-04-01 17:15:02 44

转载 利用@PreAuthorize注解自定义权限校验

有没有办法在@Preauthorize块中创建更具表现力的语句?这是我发现自己重复的一个例子,因为@Preauthorize不是非常聪明的开箱即用。@RequestMapping(value = "{id}", method = RequestMethod.DELETE)public void deleteGame(@PathVariable int id, @ModelAttribute User authenticatingUser) { Game currentGame = ga.

2021-04-01 11:39:13 7479

原创 消息队列rabbitMq

一.消息队列常用的场景  1.削峰   例如我们做得考试系统中,用户通过人脸识别登录系统,考虑到考试系统的特殊性,三万名考生参加考试,需要记录人脸识别登录照片。从考试完结果上看,用户最大并发数在4000,于是我们采用rocketMq来进行异步消费用户人脸识别图片,当时统计rocketMq每秒1000消费消息。及时反馈了考生人脸识别登录成功,对数据库写操作也起到很大的缓冲功能。  2.解耦   如常用ABCD系统中,BCD系统都需要从A系统中调用接口返回数据,这时候突然来了E系统,也需要A系统

2021-03-26 16:42:56 154

原创 三树之和 排序➕双指针

题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。思路:注意:答案中不可以包含重复的三元组这个方法就是我们常说的「双指针」,当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法代码class Solution { public List<List<Integer>> threeSu

2021-03-25 11:26:56 120

转载 设计模式常见面试题汇总

目录1.说一下设计模式?你都知道哪些?2.什么是单例模式?3.什么是简单工厂模式?4.什么是抽象工厂模式?5.什么是观察者模式?6.什么是装饰器模式?7.什么是模板方法模式?8.什么是代理模式?9.什么是策略模式?10.什么是适配器模式?11.JDK 类库常用的设计模式有哪些?12.IO 使用了什么设计模式?13.Spring 中都使用了哪些设计模式?1.说一下设计模式?你都知道哪些?答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式

2021-03-09 20:56:20 272

原创 sql注入

参考:https://www.cnblogs.com/zhixie/p/13488704.html如何防止sql注入1. 代码层防止sql注入攻击的最佳方案就是sql预编译 参数化传入的SQL参数public List<Course> orderList(String studentId){ String sql = "select id,course_id,student_id,status from course where student_id = ?"; ..

2021-03-08 18:23:13 75

原创 AQS及原理

AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是一个同步框架,它提供通用机制来原子性管理同步状态、阻塞和唤醒线程,以及维护被阻塞线程的队列。JDK 6中AQS被广泛使用,基于AQS实现的同步器包括:ReentrantLock、Semaphore、ReentrantReadWriteLock、CountDownLatch和FutureTaskAQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果

2021-03-01 17:06:41 96

原创 volatile和synchronized

在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对.

2021-02-25 10:43:57 172

转载 Java虚拟机(JVM)你只要看这一篇就够了!【转载及补充】

版权声明:本文为博主原创文章,遵循<a href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/qq_41701956/article/details/81664921本文是学习了《深入理解Java虚拟机》之后的总结,主要内容都来自于

2021-01-23 16:05:22 137

转载 【转】20个使用 Java CompletableFuture的例子

在Java中异步编程,不一定非要使用rxJava, Java本身的库中的CompletableFuture可以很好的应对大部分的场景。转自:http://colobu.com/2018/03/12/20-Examples-of-Using-Java%E2%80%99s-CompletableFuture/原文:20 Examples of Using Java’s Completab...

2019-04-29 14:06:35 154

原创 JVM内存配置

常见配置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survi...

2018-11-01 18:24:54 85

转载 RabbitMQ基础知识

什么是MQ?       MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。        消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queu...

2018-10-23 20:52:52 168

转载 Java中this和super的用法总结

这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~thisthis是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:1.普通的直接引用这种就不用讲了,this相当于是指向当前对象本身。2.形参与成员名字重名,用this来区分:

2017-09-23 11:41:44 180

原创 Java内存泄漏与内存溢出

Java内存泄漏原因:1.静态集合类,例如HashMap和Vector。这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。2.各种连接,如数据库连接、网络连接及IO连接,使用过后未显式关闭,造成大量对象无法被回收。3.监听器。在释放对象的时候却没有删除监听器,从而增加了内存泄漏的机会。4.变量不合理的作用域

2017-09-13 16:53:57 258

转载 计算机网络基础常考面试题精华总结

1、OSI,TCP/IP,五层协议的体系结构,以及各层协议答:OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。每一层的协议如下:物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)数据链路:PP

2017-09-13 10:43:50 501

原创 百度测试笔试:拔草草

int numberOfDays(int numOfPlants,int[] plantsHeight){ int temp=0; int days=0; int surplus=numOfPlants; boolean[] boo=new boolean[numOfPlants]; boolean flag=true; while(flag){ int left=p

2017-09-12 11:18:15 301

转载 大型网站架构之分布式消息队列

大型网站架构之分布式消息队列 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务常用消息队列参考(推荐)资料本次分享总结一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能

2017-09-10 11:03:06 389

转载 [Java并发包学习七]解密ThreadLocal

概述相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知!看看JDK中的源码是怎么写的:This class provides thr

2017-09-09 23:37:56 188

转载 堆与栈

上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代2.新生代可以划分为三个区,Eden区,两个幸存区在JVM运行时,可以通过配置以下参数改变整个JVM堆的配置比例1.JVM运行时堆的大小  -Xms堆的最小值  -Xmx堆空间的最大值2.新生代堆空间大小调整  -XX:NewSize新生

2017-09-07 20:23:04 181

原创 字符串题目-最长的公共连续子串

/* * 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。 */import java.util.Scanner;public class LongestComSubString { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s

2017-09-04 21:32:01 344

空空如也

空空如也

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

TA关注的人

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