自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 理解Netty中的零拷贝(Zero-Copy)

理解Netty中的零拷贝(Zero-Copy)一、理解零拷贝​ “Zero-copy” describes computer operations in which the CPU does not perform the task of copying data from one memory area to another.​ “零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space.

2021-09-11 23:28:12 299

原创 AQS入门介绍

title: AQS入门介绍categories: 同步一、AQS的简单介绍​ AQS的全称是AbstractQueuedSynchronizer ,这个类在 java.util.concurrent.locks 包下面 AQS是基于FIFO的队列实现的,并且内部维护了一个状态变量state,通过原子更新这个状态变量state即可以实现加锁解锁操作。 ReentrantLock,Semaphore,其他的如 CyclicBarrier ,CountDownLatch,FutureTask S.

2021-04-04 14:48:51 201

原创 Redis cluster集群模式介绍

title: Redis cluster集群模式介绍categories: 数据库tags: Redis一、Redis主从概念​ 为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。​ 在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库(slav.

2021-01-03 12:48:09 243

原创 TopK问题用快排和堆排的复杂度分别是多少?

title: TopK问题用快排和堆排的复杂度分别是多少?categories: 算法tags: TopK关于TopK问题TopK问题就是在一堆数据里面找到前 K 大(当然也可以是前 K 小)的数常规方法,完全排序先完全排序后取topK,这种方法需要将数据完全排序,不适用于大数据量利用快排3.1 解决思路借鉴快排的思想,在patiton中数组会分为三个部分,我们只要与index相比较就可以得出TopK是在左边部分还是右边部分,因此不需要全部排序public class S.

2020-12-21 11:17:33 1833

原创 Redis常考的知识点

title: Redis常考的知识点categories: 数据库tags: Redis一、Redis是什么,有什么功能?​ Redis 是一个使用 C 语言开发的数据库,也是一种Key-Value数据库,数据存储在内存中,常用作缓存数据库,速度较快。功能:常用来作缓存,分布式锁,消息队列,排行榜等功能二、Redis 和 Memcached 的对比Memcached 只支持String类型,Reids支持更为丰富的数据类型Redis支持数据的持久化Redis的速度更快.

2020-12-01 22:38:10 209

原创 Netty—心跳机制

title: Netty—心跳机制categories: Nettytags: Netty一、Netty心跳机制​ Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序​ 在Netty中,服务端启动后,等待客户端连接,客户端连接之后,向服务端发送消息。如果客户端在发送,那么服务端必定会收到数据,如果客户端停止发送消息,那么服务端就接收不到这个客户端的消息,既然客户端闲下来了,那么连接资源.

2020-11-30 12:06:40 378

原创 设计模式—创建型模式

title: 设计模式—创建型模式categories: 设计模式tags: 设计模式1.什么是创建型模式?​ 创建型模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new直接去实例化对象,这使得程序在创建对象时更加灵活和有针对性​ 主要包括 单例模式,工厂模式,抽象工厂模式,建造者模式等2.单例模式单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式单例模式有 3 个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建.

2020-11-22 22:47:37 158

原创 用户级线程和内核级线程的区别

title: 操作系统-进程管理-用户级线程和内核级线程的区别categories: 操作系统tags: 线程一、线程的分类​ 线程的实现可以分为两大类:用户级线程和内核级线程。1.用户级线程​ 在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。任何应用程序都可以通过使用线程库被设计成多线程程序。线程库是用于用户级线程管理的一个例程包,它包含用于创建和销毁线程的代码、在线程间传递消息和数据的代码、调度线程执行的代码、以及保存和恢复线程上下文的代码。.

2020-11-21 22:16:28 1890

原创 零拷贝(Zero-copy)学习

title: 零拷贝(Zero-copy)学习categories: IOtags: 零拷贝概念零拷贝(Zero-copy)是一种高效的数据传输机制,是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域传统IO传输方法 public static void main(String[] args) throws IOException { File file = new File("test.txt"); RandomAccessFil.

2020-11-17 16:55:03 293

原创 剑指offer全套解答-剑指offer 56-67

56.删除链表中重复的结点​ 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5public class Solution { public ListNode deleteDuplication(ListNode head) { ListNode res=new ListNode(0);

2020-11-14 21:24:09 117

原创 剑指offer全套解答-剑指offer 46-55

46.孩子们的游戏(圆圈中最后剩下的数)​ 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!

2020-11-14 21:23:24 184

原创 剑指offer全套解答-剑指offer 36-45

36.两个链表的第一个公共节点​ 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)public class Solution { public ListNode FindFirstCommonNode(ListNode head1, ListNode head2) { ListNode p=head1; ListNode q=head2; while(p!=q){

2020-11-14 21:22:42 154

原创 剑指offer全套解答-剑指offer 26-35

26. 二叉搜索树与双向链表​ 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。public class Solution { TreeNode head; TreeNode cur; public TreeNode Convert(TreeNode root) { if(root==null){ return root; } inorder(

2020-11-14 21:22:07 128

原创 剑指offer全套解答-剑指offer 16-25

16. 合并两个有序链表​ 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。public class Solution { public ListNode Merge(ListNode list1, ListNode list2) { ListNode head = new ListNode(0); ListNode p = head; while (list1 != null && l

2020-11-14 21:21:30 123

原创 剑指offer全套解答-剑指offer 6-15

6. 矩形覆盖​ 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?public class Solution { public int RectCover(int target) { if(target <= 2) { return target; } return RectCover(target - 1) + RectCover(targ

2020-11-14 21:20:47 106

原创 剑指offer全套解答-剑指offer 1-5

1. 二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { int m = array.length; if(m == 0) { retur

2020-11-14 21:19:59 144

原创 写一颗前缀树

class Trie { TrieNode root; public Trie() { root = new TrieNode(); } /** Inserts a word into the trie. */ public void insert(String word) { char[] cs = word.toCharArray(); TrieNode node = root; for(

2020-08-23 16:13:57 143

原创 看看ThreadLocal是什么,ThreadLocalRandom呢?

因为简历上写道了ThreadLocal,最近面试经常有被问到,决定把这两个知识点精简的做个笔记ThreadLocal:指的是线程私有的变量,通过set,get,remove等方法进行操作,对应的底层操作其实是ThreadLocalMap问题:1. ThreadLocalMap存的是什么ThreadLocal里的键值对,key是threadlocal的弱引用,value是我们存放的值2. ThreadLocalMap的key为什么是弱引用1. key 使用强引用:引用的ThreadLoca

2020-08-10 20:54:52 355

原创 聊聊mysql和redis中在面试中常被问到的知识点

笔者参加了2021届实习春招和秋招,面了包括字节阿里腾讯快手百度京东滴滴猿辅导shopee华为大疆招行等数十个大厂,决定总结一下mysql和redis中常考的知识点,想到啥先写点啥,后续补充。mysql:索引原理,存储引擎,事务,悲观锁,乐观锁,ACID的概念,三大范式,MVCC,四大隔离级别,联合索引,最左前缀原则,索引优化,查询优化,explain,语句执行过慢的原因,查询的流程,更新的流程,redolog,undolog,binglog的概念,主从复制,b树的好处(磁盘预读),mysql和orac

2020-08-09 22:23:43 1160 1

原创 spring源码深度+简介解析,看完这个就可以去面试了

Spring启动整个流程1. 构造函数: a. 父类构造函数初始化BeanFactory,本类构造函数初始化读取器和扫描器,读取器的核心就是注册spring内置的bean,就是把BeanName和BeanDefinition放到一个map里也就是BeanFactory,这里注册了好几个bean,最重要的是BeanDefinitionRegistryPostProcessor Bean,BeanDefinitionRegistryPostProcessor接口又扩展了BeanFactoryPostPro

2020-07-24 09:54:30 282 2

原创 来看看ConcurrentHashMap吧

1.. ConcurrentHashMap中没有负载因子和阈值吗 a. 是没有,改用了sizeCtl控制,0表示默认值,-1表示正在扩容,>0表示下一次扩容的门槛,-(1+nThreads)n个线程正在扩容,sizeCtl的变化都是CAS操作 2. 请讲讲ConcurrentHashMap的put操作? a. 控制key和value都不能为null b. 再用自旋+cas实现put过程,下面是具体的put c. 如果桶未初始化就初始化桶 d. 如果桶中还没有元素就把这个元素插进去,插入这

2020-07-02 11:55:47 229

原创 Unsafe函数六道面试题

1. Unsafe是什么? Java 无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM 还是开了一个后门,JDK 中有一个类 Unsafe,底层是使用C/C++写的,它提供了硬件级别的原子操作。Unsafe为我们提供了访问底层的机制,这种机制仅供java核心类库使用,而不应该被普通用户使用。 UnSafe的功能主要有:(1)实例化一个类;(2)修改私有...

2020-05-04 10:54:12 549

原创 手撕线程池

参考:https://blog.csdn.net/hongtaolong/article/details/87808009package com.CSDN;import java.util.HashSet;import java.util.Set;import java.util.concurrent.ArrayBlockingQueue;public class MyThreadP...

2020-04-16 14:02:15 236

原创 手撕KMP

参考:https://mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=2247485979&idx=2&sn=56d4d0dd11951c29c9e6f94803d92e03&scene=21#wechat_redirectpackage com.CSDN;public class KMP { private...

2020-04-16 13:05:28 183

原创 BFS——求二维矩阵中0,0到特定点的最短路径长度

import java.util.LinkedList;import java.util.Queue;/*[[1,1,0,1], [1,0,1,0], [1,1,1,1], [1,0,1,1]] 求0,0到特定点的最短路径长度 */public class PathLength { int[][] direction={{1,0},{0,1},{-1,0},{0,-1}...

2020-04-11 13:38:43 459

原创 数组中最大值减去最小值小于或等于 num 的子数组数量

参考https://www.cnblogs.com/SkyeAngel/p/8985801.html public static int lessNumArray(int[] arr,int k){ if(arr==null||arr.length==0){ return 0; } LinkedList<Intege...

2020-04-09 11:43:38 285

原创 Morris遍历

Morris遍历二叉树前序遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class So...

2020-04-07 13:41:46 129

原创 如何手撕一个hashmap

1.接口类public interface SelfMap<K,V> { V get(K k); V put(K k,V v); int size(); interface Entry<K,V>{ K getkey(); V getValue(); }}HashMapimport java...

2020-04-06 14:00:16 197

原创 贪心算法

贪心就是每次保证是局部最优的,最后得到全局最优解lc 455 分发饼干public int findContentChildren(int[] g, int[] s) { if(s.length==0){ return 0; } Arrays.sort(g); Arrays.sort(s); int gi=0,si=0; whil...

2020-04-04 10:21:55 158

原创 常见排序算法

1.插入排序public static void main(String[] args) { int[] arr={7,4,87,23,2324,57,34,87,345,68,23,1,567,345,77,33,2,1,1,76}; //插入排序:每次将当前元素插入到左侧已经排好的数组中 int len=arr.length; for (int i = 1; ...

2020-04-03 10:58:06 134

原创 动态规划4 背包问题

今天来个简单的背包问题大汇总**1. 01背包**01背包顾名思义就是对一种物品只有选或者不选两种选择对于背包体积为W,物品数量是N,每个物品的体积是w[i],每个物品的价值是price[i]的选择,求用这个背包装下的物品价值最大dp[i][j]表示数量为i体积为j的时候选出的最大价值方程:dp[i][j]=Math.max(dp[i-1][j],dp[i][j-w[i]]+pric...

2020-04-03 10:45:48 153

原创 动态规划3 数组

两个数组最长公共子数组public static void main(String[] args) { int[] arr1={3,4576,768,3,35,68,7,43}; int[] arr2={54,67,3,3,768,3,35,564};//768,3,35 int m=arr1.length; int n=arr...

2020-04-02 13:22:55 245

原创 动态规划2 ----字符串篇

两字符串的最长公共字符串public static void main(String[] args) { String str1="ABC12345E98765432kjask"; String str2="p1234e598765432ahnxvm"; int m=str1.length(); int n=str2.length(); int sta...

2020-04-02 11:47:54 199 1

原创 动态规划1 基础

爬楼梯(lc. 70)public int climbStairs(int n) { if(n<=2){ return n; } int[] dp=new int[n+1]; dp[0]=0; dp[1]=1; dp[2]=2; for(int i=3...

2020-03-31 21:48:53 125

原创 深入理解volatile

深入理解volatile学习volatile的时候,已经看过synchronized了,synchronized可以锁定对象还可以保证可见性,而volatile是一种轻量级的synchronized,它保证了可见性阅读并发编程的艺术的时候看到了volatile保证可见性的原理,主要如下:当我们声明好了voilatile的变量,并对该其变量执行写操作的时候其汇编指令会多出第二行,这是一条Lo...

2019-11-22 14:58:15 175

空空如也

空空如也

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

TA关注的人

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