自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林竹清_清清清

怎样才能变得平凡,求攻略,在线等~

  • 博客(403)
  • 资源 (10)
  • 收藏
  • 关注

原创 *cache伪共享

CPU 缓存架构CPU 缓存可以分为一级缓存,二级缓存,三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分。当 CPU 要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在 80%左右,也就是说全部数据量的 80%都可以在一级缓存中找到,只剩下 20%的总数据量才需要从二级缓存、三级缓存或内存中读取。越靠近 CPU 的缓存越快也越小。所以 L1 缓存很小但很快,紧接着 L2 大一些,也会慢一些,L3

2021-08-19 17:31:34 275

原创 *二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。思路右视图: 层次遍历,每一层的最后一个节点左视图:层次遍历,每一层的第一个节点层次遍历就是用Queue/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tree

2021-08-18 15:46:17 290

原创 *复杂链表的复制

复杂链表的复制输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head 。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路循环遍历复制每个节点A的A1,把A1插入在A后边, (先不管random)处理random指针,对于有random指针的节点(cursor.next.random = cursor.random.next)链表拆分public class HydraTest

2021-08-17 14:30:23 185

原创 *目录的最大深度

给定一个文件目录,求这个目录下的最大深度import java.io.File;import java.io.IOException;import org.apache.commons.collections4.CollectionUtils;import org.apache.commons.lang3.StringUtils;import com.google.common.base.Splitter;public class HydraTest { private s

2021-08-17 11:28:32 205

转载 *高并发的限流

当请求量很高,服务器负载也很高,如果不做限流,当请求超过服务器承载极限的时候,系统就会崩溃,导致所有人都不能访问。限流算法计数器计数器限流算法也是比较常用的,主要用来限制总并发数。比如限流 qps 为 100 ,算法的实现思路就是从第一个请求进来开始计时,在接下去的 1s 内,每来一个请求,就把计数加 1 ,如果累加的数字达到了 100 ,那么后续的请求就会被全部拒绝。等到 1s 结束后,把计数恢复成 0 ,重新开始计数。弊端:如果我在单位时间 1s 内的前 10ms ,已经通过了 100 个请求,

2021-08-15 16:40:50 93

原创 *线程中断

interrupt,interrupted,isInterruptedinterrupt()形式上中断一个线程,不会去真正的打断正在运行的线程,而是修改这个线程的中断标志位(interrupt status)。对于处在sleep()、wait()和join()方法阻塞下的线程,该方法会使线程抛出InterruptedException实现了 InterruptibleChannel 接口的类中的一些 I/O 阻塞操作,如 DatagramChannel 中的 connect 方法和 receive

2021-08-13 18:47:07 138

原创 *spring

基础介绍spring概述一站式轻量级Java开发框架,通过Ioc容器管理对象之间的耦合关系,以Aop动态增强方法。同时集成了Junit mybatis等框架,以达到简化开发的效果。spring 大家族有很多一站式框架 spring boot, spring cloud.缺点:依赖反射 性能spring组成spring core :框架的最基本组成部分,包括IOC功能Beansspring 设计模式工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;单例模

2021-08-12 18:16:21 81

原创 *线程交替打印

交替打印三线程交替打印abc两种方案synchronized + wait + notifyReentrantLock + conditionSemaphore public static class ABC { private int num; private static final String LOCK = "lock"; public void print(int targetNum) { syn

2021-08-11 18:45:00 157

原创 一些杂七杂八的知识点

重写和重载重写:override,子类重写父类的方法,参数列表和返回值都不便,Java多态特性的一种表现。 private , final , static 三种方法不能被重写。重载:overload, 在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关。编译器通过对方法签名的识别即可静态编译出不同的方法。这也是java中重载与重写的区别之一。重载只是一种语言特性,与多态无关,与面向对象也无关。多态是为了实现接口重用Objecto

2021-07-29 23:00:45 151

原创 如何设计一个tranceID

业务上为了监控和查证case,通常会有trance概念。trance:一次请求的完整跟踪traceID:一次trace生成的唯一id标识业务层埋点业务侧埋点为提高性能可以使用Disruptor环形队列数据测消费队列中的数据通过kafka发送,消费者订阅消息去做存储。数据存储实际的trace信息可以用HBASE存储,以traceID为rowkey存储,也可以用duridelasticSearch 只存索引一次检索 先通过es获取traceID,在查HBASEweb平台一般会有web

2021-07-21 20:46:20 1060

原创 一致性Hash算法

1、余数Hash比方说,字符串str对应的HashCode是50、服务器的数目是3,取余数得到1,str对应节点Node1,所以路由算法把str路由到Node1服务器上。优点:简单,hashcode随机性比较强,所以这种方式有相对均衡的分布;缺点:服务器集群的伸缩性不好,当有新节点加入或者节点退出时,会造成大量数据无法正确命中。2、一致性Hash算法一致性 Hash 算法通过构建环状的 Hash 空间替线性 Hash 空间的方法解决了这个问题,整个 Hash 空间被构建成一个首位相接的环。其

2021-07-05 15:28:28 172

原创 Memcached

MemCached是什么MemCache是一个源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache和MemCached的区别:MemCache是项目的名称MemCached是MemCache服务器端可以执行文件的名称MemCache虽然被称为"分布式缓存",但是MemCac

2021-07-05 15:11:35 92

原创 Spring Cloud

Spring Cloud简介Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、市场上已完善的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开

2021-05-24 11:47:06 184 2

原创 Kafka-Rebalance机制

重平衡跟消费组紧密相关,它保证了消费组成员分配分区可以做到公平分配,也是消费组模型的实现,消费组模型如下:作者:tracy_668链接:https://www.jianshu.com/p/80721b0bdd1b来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...

2021-04-26 20:25:49 1425

原创 本地缓存篇

本地缓存和远端缓存远端缓存:Redis,MongoDB;本地缓存:一般使用map的方式保存在本地内存中,常见的是ConcurrentHashMap 和guava cache,把数据缓存到JVM内存。常见的在业务中操作缓存,都会操作缓存和数据源两部分。如:put数据时,先插入DB,再删除原来的缓存;get数据时,先查缓存,命中则返回,没有命中时,需要查询DB,再把查询结果放入缓存中;如果访问量大,还需要兼顾本地缓存的线程安全问题和缓存的回收策略。ConcurrentHashMap缺点

2020-10-10 15:28:09 531

原创 shell 脚本笔记

循环读文件whilewhile read -r linedo echo $linedone < email.txtforfor line in `cat email.txt`do echo $linedonewhile:将每行的内容读入到line变量for:将读入的内容以IFS字段分隔符为界,逐一读入变量line。以空格区分读的字段// whileHello AliceHello bobHello cindy//forHelloAlice

2020-08-14 14:09:01 166

原创 设计朋友圈

需求:已经有一个查询好友的接口,设计一个微信朋友圈,可以实现发表朋友圈,添加评论,查看评论等功能。主要是设计数据结构数据结构 消息表 存储用户发布的信息,utf8m64 可以存表情包 字段 类型 备注 id bigint 自增主键 uid varchar(20) 用户id content varchar(500) 内容 picture varchar(200) 图片 location varbinar

2020-06-16 17:02:13 616

原创 * 215 数组中的第K大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路:第K大 = 第N-K小 快排优化 private int[] nums; public int findKthLarge.

2020-06-16 16:06:45 149

原创 *二叉树路径和

124 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输入: [-10,9,20,null,null,15,7] -10/ \9 20/ \15 7输出: 42思路:回溯class Solu...

2020-06-12 14:19:56 578

原创 新版本JDK新增特性

Java 12switch 表达式 : switch不仅可以作为语句,也可以作为表达式,简化代码 JVM 常量API 新增了常量操作 G1 的可中断 mixed gc 将mixed gc 拆分为强制部分和可选部分,是g1更有效的终止垃圾回收过程。通过垃圾回收过程优先处理强制部分,g1可以满足更多的暂停时间目标。 G1垃圾收集器的主要目标之一是满足用户设置的暂停时间。G1采用一个分析引擎来选择在收集期间要处理的工作量。此选择过程的结果是一组称为GC集的区域。一旦GC集建立并且GC已.

2020-06-11 14:05:41 205

原创 HashMap 和 ConcurrentHashMap 从头到尾

HashMap1.JDK7 中 HashMap底层实现1.1 基础结构数组+链表1.2 核心成员modCount记录Map新增 删除 k-v对,或者内存结构做出调整的次数,其主要作用是对Map的 iterator() 操作做一致性校验,如果在iterator操作的过程中,Map 的数值有修改,直接抛出ConcurrentModificationException异常。1.3 put()put 方法是有返回值的 oldValue 或者 null,put 的流...

2020-06-08 11:39:22 305

原创 *零钱兑换

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。思路:动态规划public class Solution { public int coinChange(int[] coins, int amount) { int max = amount + 1; int[] dp = new int[amount + 1]; Arrays.fill(dp, max);.

2020-06-07 14:42:43 149

原创 分布式事务

CAP定理在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)三者不可兼得。一致性:在分布式系统的所有数据备份中,在同一时刻是否有同样的值(等同于所有节点都访问同一份最新的数据副本)。 可用性:在集群中一部分节点发生故障后,集群整体能否响应客户端的读写请求(对数据更新具备高可用性)。 分区容错性:系统如果不能在时限内达成数据的一致性,就意味着发生了分区,必须就当前操作在C和A之间做出选择。以实际效果而言,分

2020-06-04 11:08:22 210

原创 *Java面试意向不到基本篇

1.boolean占几个字节首先boolean只有两种结果 true和false,这个数据类型只代表1bit的信息,但是具体boolean类型的“大小”没有严格定义。Java虚拟机规范虽然定义了boolean类型,但是没有专门的虚拟机指令集提供,在Java语言中,boolean的值操作替换成int类型。Java 虚拟机没有直接支持 boolean 数组。boolean 类型数组和 byte 数组公用指令。所以boolean具体占几个字节应该依赖于JVM了,如果boolean类型被编译成int类型

2020-06-03 19:11:14 195

原创 *bin log,redo log 和 undo log

1、redo log 和 undo loginnodb 事务日志包括 redo log 和 undo logredo log :重做日志,提供前滚操作 ,保证事务的持久性。 undo log :回滚日志,提供回滚操作,保证事务的原子性。redo log 声明周期 事务开始之后,就开始产生 redo log 日志了,在事务执行的过程中,redo log 开始逐步落盘。当对应事务的脏页写入到磁盘之后,redo log 的使命就完成了,它所占用的空间也就可以被覆盖了。 存储内容.

2020-06-01 17:56:37 282

原创 *ThreadLocal 详解

ThreadLocal是什么ThreadLocal可以理解为线程局部变量,当使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本,ThreadLocal保证了各个线程的数据互不干扰。ThreadLocal原理public void set(T value) { Thread t = Thread.currentThread(); Thread.

2020-05-28 17:43:42 137

原创 *ReentrantLock

1、ReentrantLock是一个可重入的互斥锁,ReentrantLock由最近成功获取锁,还没有释放的线程所拥有,当锁被另一个线程拥有时,调用lock的线程可以成功获取锁。如果锁已经被当前线程拥有,当前线程会立即返回。该锁分为公平锁和非公平锁。private Lock lock=

2020-05-28 15:40:57 188

原创 乐观锁 悲观锁 自旋锁 偏向锁

乐观锁在每次读取数据时都认为别人不会修改该数据,所以不会上锁,但在更新时会判断在此期间别人有没有更新该数据,通常采用在写时先读出当前版本号然后加锁的方法。具体过程为:比较当前版本号与上一次的版本号,如果版本号一致,则更新,如果版本号不一致,则重复进行读、比较、写操作。Java中的乐观锁大部分是通过CAS(Compare And Swap,比较和交换)操作实现的,CAS是一种原子更新操作,在对数据操作之前首先会比较当前值跟传入的值是否一样,如果一样则更新,否则不执行更新操作,直接返回失败状态。悲观

2020-05-28 14:11:51 510

原创 wait sleep interrupt

waitObject 的方法 调用wait 会进入到阻塞状态,会一直阻塞知道被唤醒 wait 会释放持有锁sleepThread 类的方法 线程阻塞,可以指定阻塞的时间,达到时间会自动进入就绪态 不会释放锁interrupt用于向线程发终止通知信号,会影响该线程内部的中断标志位 当前线程本身不会因为interrupt 而改变状态。状态的具体变化需要等待接收到中断表示的程序的最终处理结果来判定。 调用interrupt 不会中断当前线程的运行,它只改变中断标志位。 若因调用sle

2020-05-28 11:43:02 200

原创 165比较版本号

比较两个版本号 version1和 version2。如果version1>version2返回1,如果version1<version2 返回 -1, 除此之外返回 0。你可以假设版本字符串非空,并且只包含数字和. 字符。. 字符不代表小数点,而是用于分隔数字序列。例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分...

2020-05-27 15:48:15 155

原创 *148排序链表

在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路:归并排序 快慢指针拆成两个列表 merge过程 就是 两个有序链表排序public ListNode sortList(ListNode head) { i...

2020-05-27 15:14:15 167

原创 202.快乐数

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1思路:快慢指针p...

2020-05-27 14:32:42 103

原创 206. 反转链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路: 迭代: public ListNode reverseList(ListNode head) { if(head==null || head.next==null) return head; Li..

2020-05-27 14:17:29 87

原创 *236.二叉树最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 ...

2020-05-27 13:32:28 159

原创 HashMap 解析

基础知识1.7 :数组+ 链表1.8 : 数组 + 链表 + 红黑树重要成员:modCount:记录了map新增/删除k-v对,或者内部结构做了调整的次数,其主要作用,是对Map的iterator()操作做一致性校验,如果在iterator操作的过程中,map的数值有修改,直接抛出ConcurrentModificationException异常。put()put 方法是有返回值的,oldValue或者nullput 主要分为四步骤:key为...

2020-05-27 12:02:13 102

原创 *53.最大子序和

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。思路:动态规划 res [ i ] 以 num [ i ] 结尾的 最大子序和public int maxSubArray(int[] nums) { if (...

2020-05-26 17:58:50 90

原创 155.最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nu...

2020-05-26 17:23:56 178

原创 *LRU缓存机制

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?示例:

2020-05-26 17:11:15 123

原创 接雨水

给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trapping-rain-water著..

2020-05-26 15:45:20 94

原创 *50.pow(x, n) 

实现pow(x, n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 <x< 100.0n是 32 位有符号整数,其数值范围是[−231,231− 1] 。思路:快速幂 public do...

2020-05-26 15:33:05 173

Velocity文档中文版

Velocity文档中文版

2017-05-26

fiddler监控插件

fiddler web debugger

2017-05-25

JavaCV文档

Java cv文档

2017-03-24

JDK1.6文档

JDK文档中文版

2017-03-24

算法导论第三版课后答案

算法导论这本书是计算机专业学生们必掌握的书籍,在此上传课后答案

2017-03-10

你应该更新的Java知识

你应该知道的关于Java知识的更新,可以了解一下。

2015-08-20

荣耀3c刷机

新发布的华为荣耀3c刷机包,emui3.0,Android4.4.2,刷机很easy

2014-11-17

数据挖掘资料

英文PPT 初学者很有用 而且里面例子很基础很容易理解 涉及到分类、聚类等的很多算法与实现过程。

2014-06-12

数据挖掘朴素贝叶斯分类

数据挖掘上机作业 实现朴素贝叶斯简单分类

2014-06-12

空空如也

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

TA关注的人

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