8 头都秃了

尚未进行身份认证

暂无相关简介

等级
TA的排名 17w+

Redis的底层数据结构(转载)

Redis 中有各种自定义的数据结构,来实现了各种功能,下面一一进行说明。简单动态字符串SDSRedis 没有直接使用 C 语言的字符串,而是构建了自己的抽象类型简单动态字符串(simple dynamic string)。在 Redis 中,对于所有键,都是字符串类型,其底层实现是 SDS,而键值对的值,其实最终都是以字符串为粒度的,底层都是 SDS 实现。(比如列表,其...

2020-03-31 20:14:20

欧创新《DDD实战课》一颗阅读整理

本文是阅读《DDD实战课》一刻的读后整理原文(原文可到极客时间自行购买)一基础篇:DDD 的核心知识体系:正在上传…重新上传取消2.DDD的设计思路: 1.战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。2.战术设计则从技术视角出发,侧重于领域模型的技术实现,完成软件开发和落...

2020-03-29 19:06:54

二叉最优搜索树java实现

package com.bysj.common.算法.动态规划;/*** 二叉最优搜索树使用场景:** 现在我有一张英文单词的文章,我要根据字典翻译为中文,所以我先要把字典构造成一个二叉最优搜索树,其中有的字搜索频率很高比如:草,爱,做等* 所以我先给每个字定义一个频率q,这样每次搜索一个字的时候所需要的消耗就是pi*(depth{ki}+1){算法导论有论证};现在我们要构造一个遍...

2020-03-11 22:36:50

linux服务器 cpu性能问题知识点,常用查询和解决方法

一,基础知识:1.平均负载:单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数{所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,就是我们常用 ps 命令看到的,处于 R 状态的进 程。不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps ...

2020-03-09 23:11:01

堆排序java实现

堆和普通树的区别堆并不能取代二叉搜索树,它们之间有相似之处也有一些不同。我们来看一下两者的主要差别:节点的顺序。在二叉搜索树中,左子节点必须比父节点小,右子节点必须必比父节点大。但是在堆中并非如此。在最大堆中两个子节点都必须比父节点小,而在最小堆中,它们都必须比父节点大。内存占用。普通树占用的内存空间比它们存储的数据要多。你必须为节点对象以及左/右子节点指针分配额为是我内存。堆仅仅使用...

2020-03-01 15:56:08

并发编程艺术.pdf研读后知识整理

标题:之前看过的并发编程艺术这个pdf的知识点整理,可能有点乱我们在乎的知识不是格式哈哈内容:一:1. volatile的使用优化(解决共享变量伪共享):Java7及以下使用多余字节追加到64字节 ,使用追加到64字节的方式来填满高速缓冲区的缓存行,避免头节点和尾节点加载到同一个缓存 行,使头、尾节点在修改时不会互相锁定 ...

2020-02-25 17:58:39

Spring和springboot的整体流程

最近面试遇到了高频题目,spring和boot的启动和初始化的过程,这边简单总结下(理解大于死记硬背)大体流程:(1)Spring装载bean过程(beanname,y依赖关系都是保存在了concurrentHashMap):tomcat启动创建servlet,创建servletContext ,ServletContext是一个web应用的上下文,是一个全局信息的存储空间,代表...

2020-02-24 22:35:24

java 中断线程的方法

一.非阻塞的操作直接on&&!Thread.currentThread().isInterrupted()可以解决,on可以改成更多的其他自定义操作二.阻塞的操作 通过抛出异常然后Thread.currentThread().interrupt();进行中止三.如果线程在I/O操作进行时被阻塞: 调用阻塞该线程的套接字的close()方法。在这种情形下,如...

2020-02-23 16:58:52

常用的锁优化思路

一.减少锁的时间不需要同步执行的代码,能不放在同步快里面执行就不要放在同步快内,可以让锁尽快释放;二.减少锁的粒度它的思想是将物理上的一个锁,拆成逻辑上的多个锁,增加并行度,从而降低锁竞争。它的思想也是用空间来换时间;java中很多数据结构都是采用这种方法提高并发操作的效率:1.ConcurrentHashMapjava中的ConcurrentHas...

2020-02-18 22:11:11

Mysql高性能pdf阅读内容整理

1.innodb解决死锁:死锁检测,死锁超时,将持有最少行级锁的事务回滚2.数据库死锁产生的原因:1.数据冲突,2存储引擎的实现方式导致的?3.数据类型: 整型尽量使用小的int类型;建议不要null ; 财务数据精度可以*1000存为bigInt型;因为decimalmysql处理效率低; 定长字符串使用char比如md5加密,短的字符串,...

2020-02-17 21:37:18

常用的图算法关系整理

2020-02-16 20:01:10

上家公司的结算系统架构图梳理

马上要离开这家公司,给自己参与的一个结算项目梳理下流程:项目简介:为加盟店,商城订单,供应商和公司进行各种交易费用,税费,抽成而服务的结算平台:主要包括结算,对账,支付,往来等功能架构图如下:...

2020-02-16 19:58:02

Leetcode 120. 三角形最小路径和朴素法和动态规划实现

题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。直接上代码:import java.util.ArrayList;import jav...

2020-01-21 10:53:26

leetcode72题编辑距离-动态规划

题目给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释:horse -> rorse (将 'h' 替换为 'r')ro...

2020-01-16 14:58:43

leetcode200题岛屿的数目-染色法和并查集实现java代码

题目:给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3直接上代码:染色法实现:...

2020-01-14 14:53:54

leetcode300题最长上升子序列(动态规划和非规划实现)

题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log...

2020-01-13 11:36:05

guava的eventBus和disruptor比较

EventBus:基于观察者模式实现的,本文基于同步模式来操作;这里只介绍下几个常用操作的代码实现:register:注册观察者实现:主要就是以把观察者观察的类key,同类观察者的set集合为value构成一个ConcurrenHashMap代码如下: private final ConcurrentMap<Class<?>, CopyOnWriteArray...

2020-01-09 16:22:07

0-1背包问题

package com.bysj.common.算法;/** * 动态规划解决: * dp状态转移方程二维数组: * i:表示第i个物品,c代表剩余的容量,dp[][]的值表示当前价值 * int[i][c] dp = * if(w[i]<c) * { * dp[i][c] = max(dp[i-1][c-w[i]]+v[i-1],dp[i-1][c]); * } ...

2020-01-08 11:39:48

redis分布式缓存使用的一些问题

分享下使用分布式缓存和本地缓存的一些设计和问题:1.什么样的数据,场景需要用到缓存?数据:访问频率高,修改频率低,比如我们系统的供应商信息,商品标签等等场景:高并发,时效性强,比如用户下单,批量结算等2.用什么数据结构保存缓存呢? 简单的数据类型直接String,如果是复杂对象hash3.如何发现哪些key是热点key?热点key肯定会有超高访问导致带宽不够的问...

2019-12-30 10:35:46

二叉树栈实现前中后序遍历(易理解的方法)

说明:首先你需要看懂用栈实现中序遍历的代码,理解其思想:从根节点开始入栈,找到他的左子树入栈.....一直到他的左子树为空了,左边到头了,取出当前根节点的值,从栈中取出当前根节点然后找他的右子树继续入栈,找左子树入栈.....,直到右边取完了这时候一个节点就遍历完了,然后继续从栈中取上一个节点继续其实考虑下为什么用栈呢?就是用他来回溯的要回溯到根节点,对于中序遍历:左中右,我按照右中左...

2019-12-29 16:00:15

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。