自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单元测试及测试覆盖率报告生成相关插件及使用

方法名描述mock()@MockMock是指使用Mockito创建的模拟对象,它模拟真实对象的行为,用于替代真实对象的依赖项,以便进行独立的单元测试。@InjectMocks是一个Mockito注解,用于自动将模拟对象注入到被测对象中的相应字段中doReturn()doReturn()方法用于为模拟对象设置方法调用的返回值,可以覆盖默认行为。when()when()方法用于指定模拟对象的方法调用,并设置相应的操作,例如返回值、异常等。verify()

2024-02-22 21:01:38 1150 1

原创 常见数据结构

理解常见的数据结构,有助于理解集合源码知识

2024-02-05 15:47:11 769

原创 集合源码分析

Java集合源码浅要分析

2024-02-05 15:43:09 951

原创 开发规范总结

由于开发的时候没有一个良好的开发规范和习惯,导致一些人为导致的错误,使得开发起来既不顺手而且效率低下,,本文采用,总结的一些适用的开发规范,使我们养成一个好的开发习惯,从而事半功倍.

2022-09-10 12:18:00 539 1

原创 布隆过滤器和redis作为缓存使用原理

一、布隆过滤器在我们学习中,可以去redis的官方文档,点击module,这里面有很多三方的程序,供我们学习网站: https://redis.io/modules1.概念布隆过滤器(Probabilistic Data Structures for Redis): redis概率数据结构RedisBloom模块提供四种数据结构:一个可伸缩的Bloom过滤器、一个布谷鸟过滤器、一个count-min草图和一个top-k。这些数据结构用完美的准确性换取了极高的内存效率,因此它们对大数据和流应用程序

2021-12-06 17:56:06 224

原创 Redis的高级使用(1)-(管道|发布订阅|事务)

一、管道1.前置知识Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。因此,例如下面是4个命令序列执行情况:Client: INCR XServer: 1Client: INCR XServer: 2Client: INCR XServer: 3Client: INCR XServer:

2021-12-04 11:53:36 911

原创 redis的value类型的详细解析

本章讲解的是redis的常用API和常见的场景,如下图所示一、string1.字符串(值的基本操作)1.set(NX|XX)方法默认 有key覆盖,没key就创建NX Only set the key if it does not already exist. -只能新建XX Only set the key if it already exist. -只能更新2.mset和mget​ msetnx(原子性操作)3.append4.setrange和getrange

2021-11-29 17:04:54 2213

原创 高可用DR-HA实操

一、高可用理论1.问题引入如果LVS挂掉了(单点故障)怎么办,会出现什么问题?所有用户都看不到,业务下线如果RS挂掉的话,会出现什么问题?一部分用户会访问异常,LVS还存有RS的负载记录2.问题解决单点故障解决方式:既然是一个宕掉,就用多台(一变多)(一)主备(使用较多)方向性效率性(二)主主为了方便理解,我们举一个例子皇帝 - > 皇子们方向性皇子们轮训主动观察监视皇上(备轮询主)皇上上朝,主动对外发布自己的行动,但这里有一个重试的机

2021-11-28 14:56:15 908

原创 二、epoll发展及redis基本使用

一、BIO到Epoll发展如果下图是BIO到NIO的多路复用的一个发展图:(一)BIO客户端传来文件,服务器线程读取fd8文件标识符(read fd8),如果没有的话就会阻塞,一直等待数据包的到达,所以服务器只能开辟新的线程来读取资源才行,如果只用一个线程,即使f9的数据包已经到达,线程还是阻塞的.这样计算机的资源运用起来,所以后面内核发生了变化.问题: 1.单线程读取文件描述符,如果数据包未到达会阻塞 2.若用其他线程在读取其他的文件描述符,线程的切换需要消耗资源 扩展: cpu只有1

2021-11-27 15:21:18 466

原创 一、Redis简介及安装实操

一、前置知识(一)常识磁盘寻址:ms带宽:G/MI/O buffer:成本问题磁盘有磁道和扇区,一扇区 512Byte 带来一个成本变大–索引4K:操作系统,无论你读多少,都是最少4K从磁盘取随着文件变大,磁盘I/O会成为瓶颈,导致速度变慢内存寻址:ms带宽:很大补充:秒>毫秒>微秒>纳秒 磁盘比内存在寻址上慢了10W倍数据在磁盘和内存中,体积不一样(2G在内存可能1.9G)(二)关系型数据库如上图所示:1页:等同于

2021-11-26 10:25:06 579

原创 三、LVS及实践

LVS一、简介概念LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中特点数据包转发级别(特别快)不会和客户端握手后端服务器必须是镜像的负载均衡服务器拥有偷窥能力并且记录,3次握手连接+1,四次挥手连接-1比较LVS-用于hold住流量(只要网速够快,就没有上限)nginx 用于hold 住握手(7层,但有负载上线)工作模式NAT模式DR模式TUN模式

2021-11-24 14:38:27 569

原创 二、负载均衡模型

负载均衡模型一、问题引入​ 如果有多个用户来访问服务器,要想要减轻服务器的压力,应该怎么办呢?首先想到的方法就是用多个服务器来分担问题:两台计算机通信最终是通过ip,如果客户端连接多台服务器,服务器这里是不能够都配相同的ip地址了(IP冲突),因为这里如果进行三次握手的话也乱了使用一台服务器,客户端请求它,该服务器再将请求转给另外的几台服务器,只要该服务器足够快就能够解决高并发的问题问题:转发给的几台服务器解决慢为什么tomcat慢,并发数少呢?网络层上:因为它是7层中的一层

2021-11-23 22:22:26 726

原创 一、网络结构和通信过程

一、网络分层结构注意:网络的每一层都会执行自己负责的功能之后阻塞然后调用下一层要执行的功能,从而达到解耦的效果1. 应用层指令//1.建立连接cd /proc/$$/fdexec 8 <> /dev/tcp/www.baidu.com/80//2.传送数据(http协议:规范标准)echo -e 'GET / HTTP/1.0\n' >& 8cat <& 8演示图(应用层协议)2.传输控制层三次握手>数据传输>四次

2021-11-23 15:19:29 1767

原创 设计模式-单例模式

单例模式一、概念定义单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点 (保证一个类在内存中的对象就一个 )特点一是这个类只能有一个实例二是它必须自行创建这个实例三是它必须自行向整个系统提供这个实例优点可节约系统内存空间,控制资源的使用应用场景J2EE中的ServlertContext、SerletContextConfig等、Spring框架应用中的ApplicationContext、数据库连接池等二、类型(一)饿汉式优点

2021-11-22 18:32:17 698

原创 同步容器及线程池

同步容器1.容器体系CollectionListSetQueueMapHashQueue - 主要是为了高并发准备的具体如下图所示:2.ConcurrentHashMap发展(HashTable-> CHM)JDK1.0 :Vector(相当于后来的List)HashTable(相当于后来的map) 都加了锁(基本不用)发展:HashTable(方法上加锁)HashMap(不加锁,线程不安全)通过工具类加锁Collections.synchronize

2021-11-16 17:46:42 1646

原创 ThreadLocal及强软弱虚引用

1.threadLocalstatic ThreadLocal<Person> tl = new ThreadLocal();上述threadLocal在创建的时候是在各自的线程中创建一个person对象疑问:为什么tl.get()获取不到person呢?用途:声明式事务的时候,有多个数据库连接,我们将多次连接操作表示一个事务,那么我们怎么获得每个会话的同一个连接呢,那么连接放到threadlocal中,下次不在从连接池中取,而是从threadLocal中取拦截器中将当前登录用

2021-11-11 15:56:10 454

原创 ReentrantLock

ReentrantLock原文:https://blog.csdn.net/u012988901/article/details/1125576661.简介ReentrantLock是JDK1.5是在juc里面新增的一个基于AQS的同步等待队列的独占模式实现的一种锁,它比synchronized更灵活,可以自己控制加锁和解锁的逻辑,也跟synchronized一样是可重入锁.提供了公平和非公平两种模式:公平锁:多个线程争夺锁时,会先判断等待队列中是否有等待的线程节点,如果有就排队,锁获取的顺序

2021-11-09 17:58:48 72

原创 IDEA常用插件

IDEA常用插件Alibaba Java Coding GuidelinesString ManipulationKey promoterTranslationCamelCaseJRebel PluginCodeGlanceSequenceDiagramRestfulToolkitHighlightBracketPairGenerateAllSetterMaven HelperMybatisXjerebel激活参考文档:

2021-11-09 10:40:06 161

原创 归并排序及相关题目

5.归并排序及相关题目归并排序一、递归实现取数组的中间值分别对左右两遍的数组进行相同处理最后进行合并(重点)使用辅助数组来记录排序后的结果将数组分为了左组和右组通过三个指针来进行标记(i,p1,p2),分别指向的是辅助数组,左组和右组在p1和p2都不越界的情况下,通过比较p1和p2的数值,如果p1<p2那么就p1对应值给辅助数组,且指向下一个数(p2同理)最终要么p1越界,要么p2越界,把还没越界的那组后续的数全部赋值到辅助数组中最后将辅助数组的值填充到原始数组中

2021-11-02 17:50:06 336

原创 基础的数据结构及实现

基础数据结构链表单向链表的反转定义pre,next两个指针都指向null,如果头结点不为空记录头结点的下一结点头结点指向nullpre标记头结点头结点为nextpublic static Node reverseList(Node head) { Node pre = null; Node next = null; while (head != null) { next = head.next; head.next = pr

2021-11-01 10:54:17 181

原创 异或运算运用

3.异或运算概念:异或运算:相同为0,不同为1同或运算:相同以1,不同为0总结:异或运算 = 无进位相加性质:0^N == NN^N == 0满足交换律和结合律如何不用额外变量交换两个数灵活运用异或的两个性质,如果是数组交换的话必须保证互换的两个索引值不相同public static void main(String[] args) { int a = 19; int b = 6000; System.out.println(a); Sy

2021-10-31 17:09:19 302

原创 二分查找的经典例题

二分法有序数组有序数组找到指定num只要左边界不大于右边界,那么就判断数组中间数的值是否等于指定num如果等于则返回true如果大于则不要右边如果小于则不要左边// 有序数组查找指定数字public static boolean exists(int[] sortedArr, int num) { if (sortedArr == null || sortedArr.length == 0) { return false; } int L

2021-10-31 16:07:34 519

原创 基本排序及对数器

基本排序冒泡排序0~N-10~N-20~N-3相邻的两个数两两比较,将较大的数排在前面public static void bubbleSort(int[] arr) { // 0 ~ N-1 // 0 ~ N-2 // 0 ~ N-3 if (arr == null || arr.length < 2) { return; } int N = arr.length; for (int end = N - 1; end >= 0;

2021-10-31 14:32:05 66

原创 面试的时候遇到的题

经典递归实现:题目:啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒,问:10元钱最多能喝几瓶酒?public class Temp { public static void main(String[] args) { System.out.println(getMaxDrink(10)); } static int maxCount = 0; public static int getMaxDrink(int money) { if (money <= 0) {

2021-08-25 16:04:44 72

空空如也

空空如也

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

TA关注的人

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