- 博客(164)
- 收藏
- 关注
原创 java知识点 --- ConcurrentHashMap底层实现原理
一、定义利用CAS + synchronized来保证并发更新的安全底层使用“数组+链表+红黑树”来实现ConcurrentHashMap继承AbstractMap类,实现ConcurrentMap和Serializable接口二、成员变量 /** * 最大容量(2的幂次方) */ private static final int...
2022-12-21 16:02:08
326
1
原创 【并发编程】Semaphore&CountDownLatch&CyclicBarrier
Semaphore&CountDownLatch&CyclicBarrier
2022-12-09 20:37:27
481
原创 【java知识点】Swagger的简单使用
1.引入依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency>2.新建配置文件package com.example.practice.config;import org.springframework.
2022-05-30 14:33:13
461
原创 【java知识点】AOP的使用
1.AOP的使用场景在实际工作中,可能会存在需要在调用方法前后调用其它接口,例如:1>调用业务方法前,需要根据头部信息来调用外部接口获取到所需的信息,来决定后续方法执行的逻辑;2>调用业务方法后,日志信息的记录(请求参数、返回结果、执行时长等)。2.JoinPoint 介绍JointPoint是程序运行过程中可识别的点,这个点可以用来作为AOP切入点。JointPoint对象则包含了和切入相关的很多信息。比如切入点的对象,方法,属性等。我们可以通过反射的方式获取这些点的状态和信息,用
2022-04-22 20:06:36
4363
原创 【分布式&微服务】集群、分布式以及微服务之间的区别
分布式将一个大的系统拆分为多个业务模块,将各个业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。“拆”的方法:水平拆分、垂直拆分1.水平拆分根据“分层”的思想进行拆分。例如,可以将一个项目根据“三层架构”拆分成 表示层(jsp+servlet)、业务逻辑层(service)和数据访问层(dao),然后再分开部署:把表示层部署在服务器A上,把service和dao层部署在服务器B上,然后服务器A和服务器B之间通过dubbo等RPC进行进行整合,如图所示。2.垂直拆分根据业务进
2022-02-08 22:43:36
797
1
原创 算法 - 常用工具类整理
1. 将现有集合按照指定的长度拆分为几个子集合 public <T> List<List<T>> split(List<T> resList,int subListLength) { if (CollectionUtils.isEmpty(resList) || subListLength <= 0) { return Lists.newArrayList(); } int listLength =
2022-01-04 17:13:44
858
原创 算法 - 快速乘/幂算法
算法-快速乘算法快速乘/幂算法算法思想Java代码实现适用范围快速乘/幂算法算法思想在对两个数进行乘法运算的时候,我们一般是直接使用库函数或者是用运算符号“”直接进行计算。但是乘法在计算机中处理的时间并不是这么快的,也要拆分为加法来做的。所以快速乘法会更快地计算ab的结果,如果数字过大就可能会出现溢出的问题,但快速乘法却不会。快速幂也是同样的道理。例如:5 * 53 = 5 * 110101(二进制表示53)= 5 * (100000 * 1 + 10000 * 1 + 1000 * 0 + 10
2021-11-04 15:37:30
410
原创 算法 --- 商品配送之卡车的载重量计算
问题描述解题思路利用二叉查找的思路,在卡车可选的载重量范围内进行计算,每个载重量对于所有商品所需的配送次数是多少,通过与给定的配送次数进行比较选择出最佳的卡车载重量。Java源码实现package controller;/** * @author Erica * @date 2020/9/14 21:25 * @description TODO */public class PracticeController { public static void main
2020-09-14 13:30:30
1927
原创 算法 --- leetcode之买卖股票的最佳时机
题目描述假设你有一个数组,其中第 i个元素是股票在第 i天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。示例1:输入:[1,4,2] 输出:3解释:在第一天的时候股票价格为1,第二天的时候股票价格为4,第三天的时候股票价格为2 在股票价格最低的时候买入,在股票价格最高的时候卖出,将获取到最大的利润。 注意:只能按照1、4、2的顺序走,因为第一天过去了就是过去了,不能在过第二天的时...
2020-09-12 17:14:58
467
原创 算法 --- leetcode之二叉树的最大深度
题目描述:求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。Java源码实现:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param roo
2020-09-06 22:25:54
138
转载 Java知识点 --- 终止线程的三种方式
停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。在 Java 中有以下 3 种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止。 使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用。 使用 interrupt 方法中断线程。1. 使用标志位终止线程在 run() 方法执行完毕后,该线程就终止了。但是在某些特殊的情况下,run() 方法会被一直执行;比如在服务端程序中可能会使用w.
2020-08-28 22:01:46
331
原创 操作系统 --- Linux常用命令
1.创建txt文件 -->>touch + akk.txt(文件名 )2.进入到指定的txt文件进行编辑 -->> vi akk.txt,进入vim编辑器; 按下键盘上的“i”键,进入编辑状态。可以看到命令的下方出现了“--INSERT--”字样,表示成功 ...
2020-07-06 22:41:35
315
原创 网络知识 --- TCP的流量控制与拥塞控制
1.超时重传:TCP服务必须能够重传超时时间内(往返时间RRT,Round-Trip Time)未收到确认报文段的TCP报文段。TCP为每个TCP模块都维护了一个重传定时器,定时器在第一次发送TCP报文段时启动,如果超时时间内未收到接收方的确认号报文段,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多重传几次,这是TCP的重传策略。 与TCP超时重连的策略相似。2.TCP流量控制TCP提供了一种基于滑动窗口的流量控制机制。在通信过程中,接收方根据接收缓存的的大小,动
2020-06-16 17:50:34
339
转载 网络知识 --- 计算机网络中常见的各层协议
应用层: (典型设备:应用程序,如FTP,SMTP ,HTTP)DHCP(Dynamic Host Configuration Protocol)动态主机分配协议,使用UDP 协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配 IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。实现即插即用连网。FTP (File Transfer Protocol)文件传输协议<端口号21>减少或消除不同操作系统下处理文件的不兼容性。HTTP (Hyperte...
2020-05-10 00:05:49
545
转载 java知识点 --- CyclicBarrier和CountDownLatch区别
CyclicBarrier和CountDownLatch 都位于java.util.concurrent 这个包下一、CountDownLatch用法CountDownLatch类只提供了一个构造器:public CountDownLatch(int count) { }; //参数count为计数值CountDownLatch类中最重要的方法:public void await() throws InterruptedException { }; //调用await()
2020-05-09 17:46:17
177
原创 【并发编程】synchronized 底层实现原理
一、概述synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在JVM处理字节码会出现相关指令。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候,Java 虚拟机 对此进行了大力的改进,提供了三种不同的 monitor 实现,也就是常说的三种不同的锁:偏向锁(Biased
2020-05-09 09:26:18
961
原创 java知识点 --- 静态代理模式与动态代理模式
代理模式为其他对象提供了一种代理以控制对这个对象的访问,根据代理类的创建时机和创建方式的不同,可以将其分为静态代理和动态代理两种形式:在程序运行前就已经存在的编译好的代理类是为静态代理,在程序运行期间根据需要动态创建代理类及其实例来完成具体的功能是为动态代理。代理模式的目的就是为真实业务对象提供一个代理对象以控制对真实业务对象的访问。代理模式主要包含三个角色,即抽象主题角色(Subject...
2020-05-08 11:07:20
198
原创 算法 --- 进程线程部分
问题描述:启动3个线程,3个线程的名字分别是A,B,C,每个线程将自己的名称在屏幕上打印5遍,打印顺序的ABCABC.....Java源码实现:package www.java.test;import java.io.OutputStream;class Print{ int flag = 1; int count = 0; public int g...
2020-05-07 12:16:48
150
转载 开发工具 --- Redis之跳跃表详解
数组一种很简单的方法应该就是采用数组了,在查找方面,用数组存储的话,采用二分法可以在 O(logn) 的时间里找到指定的元素,不过数组在插入、删除这些操作中比较不友好,找到目标位置所需时间为 O(logn) ,进行插入和删除这个动作所需的时间复杂度为 O(n) ,因为都需要移动移动元素,所以最终所需要的时间复杂度为 O(n) 。例如对于下面这个数组:插入元素 3链表另外一...
2020-05-06 23:37:40
279
转载 java知识点 --- Redis五种数据结构的底层实现
1、字符串对象 字符串是Redis最基本的数据类型,不仅所有key都是字符串类型,其它几种数据类型构成的元素也是字符串。注意字符串的长度不能超过512M。 ①、编码 字符串对象的编码可以是int,raw或者embstr。 1、int 编码:保存的是可以用 long 类型表示的整数值。 2、raw 编码:保存长度大于44字节的字符串(redis3.2版本之前是39字...
2020-05-06 22:27:09
602
转载 开发工具 --- Redis的底层数据结构
目录1、演示数据类型的实现 2、简单动态字符串 3、链表 4、字典 5、跳跃表 6、整数集合 7、压缩列表 8、总结1、演示数据类型的实现 上篇博客我们在介绍 key 相关命令的时候,介绍了如下命令:OBJECT ENCODING key 该命令是用来显示那五大数据类型的底层数据结构。 比如对于 string 数据类型: 我们可以看...
2020-05-06 22:20:16
210
原创 算法 --- leetcode之sum-root-to-leaf-numbers
题目描述:给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如: 1↵ / ↵ 2 3根节点到叶子节点的路径1->2用数字12代替根节点到叶子节点的路径1->3用数字13...
2020-05-02 18:57:12
232
原创 算法 --- leetcode之clone-graph
题目描述:本题要求复制一个无向图,图中每个节点都包含一个标签和它的邻居列表我们无向图用以下的方法序列化:节点的标签是互不相同的, 我们使用“#”作为节点之间的分隔符,使用“,”作为节点标签和节点的节点邻居的分隔符。例如:现在有一个序列化的无向图{0,1,2#1,2#2,2}.这个无向图一共有3个节点,因此序列被#分隔成三部分第一个节点的标签是0,节点0和节点1,节点2之间有...
2020-05-02 18:16:29
230
原创 算法 --- leetcode之gas-station
题目描述:环形路上有n个加油站,第i个加油站的汽油量是gas[i].你有一辆车,车的油箱可以无限装汽油。从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时候油箱里面没有汽油。求从哪个加油站出发可以在环形路上走一圈。返回加油站的下标,如果没有答案的话返回-1。注意:答案保证唯一。解题思路(转):从start出发, 如果油量足够,...
2020-05-02 17:41:15
262
原创 算法 --- leetcode之single-number-ii(查找只出现一次的整型数字)
题目描述:现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素注意:你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?解题思路(转):Single Number的本质,就是用一个数记录每个bit出现的次数,如果一个bit出现两次就归0,这种运算采用二进制底下的位操作^是很自然的。Single N...
2020-05-02 17:02:13
229
原创 算法 --- leetcode之linked-list-cycle-ii(判断是否存在环)
题目描述:对于一个给定的链表,返回环的入口节点,如果没有环,返回null。解题思路:1>使用快慢指针方法,判定是否存在环,并记录两指针相遇位置(Z);2>将两指针分别放在链表头(X)和相遇位置(Z),并改为相同速度推进,则两指针在环开始位置相遇(Y)。Java源码实现:/** * Definition for singly-linked list. * c...
2020-05-01 18:57:37
169
原创 算法 --- leetcode之reverse-integer(数字反转)
题目描述:将给出的整数x翻转。例1:x=123,返回321例2:x=-123,返回-321你有思考过下面的这些问题么?如果整数的最后一位是0,那么输出应该是什么?比如10,100你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一...
2020-05-01 17:53:02
484
原创 算法 --- leetcode之palindrome-number(判断是否为回文)
题目描述:在不使用额外的内存空间的条件下判断一个整数是否是回文Java源码实现:public class Solution { public boolean isPalindrome(int x) { if (x < 0) return false; int t = x; int res = 0; whil...
2020-05-01 17:34:12
173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人