自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

孙荣达的博客

永远不要羡慕别人的成功, 你只是付不起那个代价. 只有一不小心而全军覆没, 没有一不小心而大获全胜.

  • 博客(64)
  • 收藏
  • 关注

原创 输入网址后发生了什么???操作系统

今天有位小伙伴在论坛里说面试问这个问题,那他的回答是:客户端通过DNS解析域名得到服务器IP地址 客户端向服务器TCP连接请求,通过TCP三次握手建立socket连接 建立连接后,客户端发起一个http请求获取网页内容 网络层进行ip寻址,数据链路层封装成帧,物理层的利用物理介质传输 服务器收到请求后调用自身服务处理请求并返回http响应包 关闭TCP连接 客户端收到服...

2020-04-14 22:44:59 1045

原创 二分查找详解

大佬的文章太帅了,我实在忍不住转一下了,orz先给大家讲个笑话乐呵一下:有一天阿东到图书馆借了 N 本书,出图书馆的时候,警报响了,于是保安把阿东拦下,要检查一下哪本书没有登记出借。阿东正准备把每一本书在报警器下过一下,以找出引发警报的书,但是保安露出不屑的眼神:你连二分查找都不会吗?于是保安把书分成两堆,让第一堆过一下报警器,报警器响;于是再把这堆书分成两堆…… 最终,检测了 logN ...

2020-03-11 23:39:27 265

原创 PUT和POST的区别

我们都知道,PUT和POST是HTTP的两个方法(Method),都可以用来向HTTP服务器提交数据。似乎用哪个都可以,但其实两者还是有本质的区别的。网上关于两者区别的文章比较多,但有相当一部分绝对是误导人。所以这次特意查看了RFC7231,来澄清二者的区别。首先直接摘出RFC7231中的的部分关键原文:The fundamental difference between the POST and PUT methods is highlighted by the different intent

2021-06-13 11:00:37 24590 2

原创 视频播放什么是vv,cv

https://www.zhihu.com/question/34845701

2021-04-19 17:00:41 1005

原创 UID/DID/SID总结

通俗来说就是UID是学校给你的编号,会打在将来你的学生卡上。DID则是你在学校的一个账号,假设你有实验室,你有自己的电脑,你需要用账号和密码解锁,这个账号就是DID。另外,登陆学校的在线账户,选课系统,使用学校的WiFi等等也需要DID来登陆。DID是一个需要通过SID来注册的账号,连带账号你需要设置密码。DID基本上是你在UMD期间用得最多的一个号,建议牢记。另外,DID的密码每隔120天要换一次,学校会发邮件,按邮件指示做就好了。新设立的密码不能跟以往的密码相同【烦得要死,但是好像很有道理】。SID则是

2021-04-16 18:07:39 7562

原创 Elasticsearch数据结构存储流程

Why Elasticsearch 1Elasticsearch数据存储结构. 3LSM-Tree结构. 3BKDTree 7写入数据流程. 8查询流程. 9FST 11SkipList 12Why ElasticsearchElasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,可以横向扩展至数百(数千)的服务器节点,同时处理PB级数据。在下文Elasticsearch 简称Es,提供的功能,如全文检索、同义词处理、相关度排名、复杂数据.

2021-01-10 22:44:41 2526 1

原创 git你真的学会了么

最近复习了一下git 十分推荐图解githttps://marklodato.github.io/visual-git-guide/index-zh-cn.html

2020-10-13 15:53:37 124

原创 go len 和cap区别

切片拥有长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。切片s的长度和容量可通过表达式len(s)和cap(s)来获取。你可以通过重新切片来扩展一个切片,给它提供足够的容量。试着修改示例程序中的切片操作,向外扩展它的容量,看看会发生什么。package mainimport "fmt"func main() { var nums = [6]int{1, 2, 3, 4, 6, 6}...

2020-05-30 20:20:21 2422

原创 go mod i/o timeout

今天使用go mod 报错Get https://sum.golang.org/lookup/xxxxxx:dial tcp xx:443: i/o timeout,因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站被墙添加环境变量到.bash_profileexport GOPROXY=https://goproxy.ioexport GO111MODULE=onsource 搞定https://goproxy.io开源框架帮我实现我们想要的..

2020-05-27 19:06:58 2229

原创 Java知识点总结

git上一个大佬的总结,偷偷搬运过来哈哈哈哈哈,好东西!!!!!!!0x1 Java001 语言基础1. HashMap从入门到熟悉 ⭐⭐⭐⭐⭐1. hash碰撞的解决方案HashMap就是使用哈希表来存储的。哈希表为解决冲突,可以采用开放地址法和链地址法等来解决问题,Java中HashMap采用了链地址法。链地址法,简单来说,就是数组加链表的结合。在每个数组元素上都一个链表结构,当数据被Hash后,得到数组下标,把数据放在对应下标元素的链表上。2. 红黑树优化方案1. 为什么是长度为8的时候

2020-05-18 20:14:03 6303 3

原创 一条sql执行很慢,可能是因为什么? 怎么优化?

下面是网络中流传最广的一篇sql查询速度慢的原因及解决方法的文章,其对于处理mysql的慢查询有借鉴作用。由于此文转载多次,很难找到最开始的原文链接,就附送本人最先看到此文的链接:http://www.cnblogs.com/zhangwc/p/6431865.htmlsql查询速度慢的原因1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4、内存不足5、网络速度慢6、查询出的数据量过大(可以采用多

2020-05-14 17:10:03 29487 12

原创 Java并发编程,终极篇持续更新

java并发目录java并发关键字VolatileSynchronizedjava内存模型1.CAS2.讲一下Java内存模型吧?java线程及通信2.一个线程连着调用start两次会出现什么情况?3.wait方法能不能被重写,wait能不能被中断;4.线程与进程的区别是什么?线程之间如何进行通信?进程之间如何进行通信?(当时进程如何通信我也没有答出来)java中的锁1、什么是线程安全,如何保证线程安全2、重入锁的概念,重入锁为什么可以防止...

2020-05-09 20:41:17 254 2

转载 如何提高缓存命中率

来源:https://dwz.cn/DactoiUI缓存命中率的介绍 命中:可以直接通过缓存获取到需要的数据。 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。 通常来讲,缓存的命中率越高则表示使用缓存的收益越高,应用的性能越好(响应时间越短、吞吐量越高),抗并发的能力越强。由此...

2020-05-06 10:24:15 397 1

原创 操作系统

目录持续更新操作系统进程管理进程与线程进程调度进程同步进程通信线程调度死锁死锁必要条件死锁检测内存虚拟内存页面置换算法分段分段与分页比较设备管理磁盘调度算法Linux常用命令:进程管理僵尸进程:孤儿进程:Fork()会带来那些问题?I/O操作系统操作系统的作用和功能进程管理进程与线程...

2020-05-03 17:05:41 427

原创 流量削峰

如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,就在秒杀开始的那一秒是一条很直很直的直线,这时因为秒杀请求在时间上高度集中于某一个特定的时间点。这样一来,就会导致一个特别高的流量峰值,它对资源的消耗是瞬时的。对于秒杀这个场景来说,最终能够抢购到商品的人数是固定的。也就是说,100个人和1000000个人发起请求的结果都是一样的,最后都只会有100个人买到秒杀的商品。这就意味着,...

2020-04-25 21:47:12 419

原创 分库分表知识点

分库分表知识点背景在并发量起来,并且数量激增之后,数据库将会遇到瓶颈,最终会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可以承载活跃连接数的阈值。在业务层面来说,可用数据库连接少甚至无连接可用。IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度->分库和垂直分表。第二种:网络IO瓶颈,请求的数据太多,网络带宽不够...

2020-04-19 17:06:02 210

原创 分布式锁问题说明

redis-lock库的randomToken函数未设置随机种子会导致不同进程随机出来的结果完全是一样的,这会导致两个进程有概率获得相同的key,引发严重错误go run test_random.go|sort|uniq >/tmp/vv1go run test_random.go|sort|uniq >/tmp/vv2对比两个结果,完全一样给随机函数加上种...

2020-04-17 13:35:47 177

原创 java小知识整理

java小知识整理& and &&&:按位与、逻辑与。&&:短路与StringBuilder、StringBuffer、String**String用final修饰,不可变。StringBuffer&StringBuilder**可变。StringBuffer线程安全(synchronized修饰方法)HashMap...

2020-04-16 22:42:00 239

原创 学习方法

对于最近的学习总结一下,对于技术的处理需要多问问题,多总结,多思考,底层,为什么这样,别的为什不行?然后自己记录下来,反复复习,最近很讨厌一些博主,乱粘贴,乱写,急功近利,风口不行呀。...

2020-04-15 22:28:17 148

原创 系统架构基础

分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。ConsistencyAvailabilityPartition tolerance它们的第一个字母分别是C、A、P。Eric Brewer 说,这三个指标不可能同时做到。这个...

2020-04-15 13:14:19 219

原创 计算机网络

一、计算机网络1、网络分层转存失败重新上传取消转存失败重新上传取消应用层:为特定应用程序提供数据传输服务,例如HTTP、DNS等协议。数据单位为报文。 传输层:为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议...

2020-04-12 13:12:24 153

原创 TCP 三次握手背的滚瓜乱熟,那意外情况呢?丢包了呢?故意不回复 ACK 呢?

一、序当我们聊到 TCP 协议的时候,聊的最多的就是三次握手与四次挥手,但是你有没有想过,三次握手或者四次挥手时,如果发生异常了,是如何处理的?又是由谁来处理?TCP 作为一个靠谱的协议,在传输数据的前后,需要在双端之间建立连接,并在双端各自维护连接的状态。TCP 并没有什么特别之处,在面对着多变的网络情况,也只能通过不断的重传和各种算法来保证可靠性。建立连接前,TCP 会通过三次握手...

2020-04-10 17:26:00 337

原创 Redis相关知识点

1、什么是redis是一个基于内存的高性能key-value数据库2、redis特点1)因为是内存数据库,则性能非常出色2)可持久化(定时异步从内存中flush到硬盘)3)支持多种数据类型(Strings、Lists、Sets、Sorted Set、hashs)4) redis是单进程单线程(利用队列技术将并发访问变为串行访问)...

2020-04-08 19:43:55 109

翻译 什么是一致性Hash算法?

一、Redis集群的使用我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示:同样类似于数据库,当单表数据大于500W的时候需要对其进行分库分表,当数据量很大的时候(标准可...

2020-04-08 18:03:17 241

原创 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题!

一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。缓存正常从Redis中获取,示意图如下:缓存失效瞬间示意图如下:缓存失效时的雪...

2020-04-08 15:55:07 345 1

转载 为什么 Redis 选择单线程模型 · Why's THE Design?

Redis 作为广为人知的内存数据库,在玩具项目和复杂的工业级别项目中都看到它的身影,然而 Redis 却是使用单线程模型进行设计的,这与很多人固有的观念有所冲突,为什么单线程的程序能够抗住每秒几百万的请求量呢?这也是我们今天要讨论的问题之一。除此之外,Redis 4.0 之后的版本却抛弃了单线程模型这一设计,原本使用单线程运行的 Redis 也开始选择性使用多线程模型,这一看似有些矛盾的设计...

2020-04-08 13:20:50 116

原创 MySQL存储引擎MyISAM与InnoDB区别总结整理

MySQL存储引擎MyISAM与InnoDB区别总结整理原创徐刘根Java后端技术2017-04-031、MySQL默认存储引擎的变迁在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。2、MyISAM与InnoDB存储引擎的主要特点MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引...

2020-04-07 18:49:34 1140 1

原创 Redis简介

关于Redis和其他缓存数据库区别的这个知识点,没有太多的需要注意的,知道了自然会回答的出来的,不过常见的比较的话就是拿Redis和Memcached进行比较,这一点是需要注意的。一、Redis简介Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(Strings),散列(Hashes),列表(Lists),集合(...

2020-04-07 12:08:27 111

转载 IDEA中启动一个springboot项目

IDEA中启动一个springboot项目(2)在上一篇文章中我们介绍了如何使用IDEA创建一个springboot项目,这篇文章我们来讲解一下如何在IDEA中启动一个springboot项目。基于上篇文章的项目进行介绍创建一个springboot项目:http://blog.csdn.net/y12nre/article/details/60867478启动的方式这里介绍两种...

2020-04-04 23:59:45 22489

原创 内存管理

存储器工作原理应用程序如何在计算机系统上运行的呢?首先,用编程语言编写和编辑应用程序,所编写的程序称为源程序,源程序不能再计算机上直接被运行,需要通过三个阶段的处理:编译程序处理源程序并生成目标代码,链接程序把他们链接为一个可重定位代码,此时该程序处于逻辑地址空间中;下一步装载程序将可执行代码装入物理地址空间,直到此时程序才能运行。程序编译源程序经过编译程序的处理生成目标模块(目标代码)。一...

2020-04-04 23:42:21 124

原创 幻读和不可重复读的区别

MySQlMySql默认的隔离级别为Repeatable Read,因此只会出现幻读的情况。幻读事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的数据如同鬼影一般。例子:在事务1中,查询User表id为1的是用户否存在,如果不存在则插入一条id为1的数据。select*fromUserwhereid=1;...

2020-04-03 17:50:32 869 2

原创 MySQL 索引

索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。1. B+Tree 索引是大多数 MySQL 存储引擎的默认索引类型。因为不再需要进行全表扫描,只需要对树进行搜索即可,所以查找速度快很多。因为 B+ Tree 的有序性,所以除了用于查找,还可以用于排序和分组。可以指定多个列作为索引列,多个索引列共同组成键。适用于全键值、键值...

2020-04-03 17:01:36 228 1

原创 Netty 系列之 Netty 线程模型

Netty 系列之 Netty 线程模型1. 背景1.1. Java 线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的 CPU 都还是单核(除了商用高性能的小机),CPU 的核心频率是机器最重要的指标之一。在 Java 领域当时比较流行的是单线程编程,对于 CPU 密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。1.1.2. 多线程...

2020-04-03 16:10:49 179

转载 NIo、Bio、aio、 的原理及区别与应用场景

在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下:序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的...

2020-04-03 13:27:34 194

原创 reactor 和 proactor 模式

首先分享一下,我在网上看到的两篇不错的文章:正是这两篇文章才理解了 reactor 和 pr oactor 模式;Reactor 模式,或者叫反应器模式高性能 IO 设计的 Reactor 和 Proactor 模式首先就第一篇《Reactor 模式,或者叫反应器模式》做一下笔记:刚开店做生意,老板为了给顾客一个美好的印象,给顾客最好的服务,一对一:正在上传…重新上传取消...

2020-04-03 12:13:27 551 2

转载 Java史上最全面试题

从知乎上看到的,从今天开始一条一条过,过完之后在后面加链接。一、数据结构与算法基础说一下几种常见的排序算法和分别的复杂度。http://blog.csdn.net/qq_34309305/article/details/79163990用Java写一个冒泡排序算法 同上描述一下链式存储结构。http://blog.csdn.net/qq_34309305/article/...

2020-04-01 19:30:07 181

原创 Java中垃圾回收是什么?为什么要有垃圾回收?垃圾回收是指回收什么数据?

GC是垃圾收集的意思(Gabage Collection)GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()Runtime.getRuntime().gc()Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。Java有了GC,就不需要程序员...

2020-04-01 14:44:16 950

原创 如何查看GC日志

一.首先来看一下JVM中的GC有哪几种类型?1.-XX:UseSerialGC  虚拟机运行在Client模式的默认值,打开此开关参数后,使用Serial+Serial Old收集器组合进行垃圾收集。2.-XX:UseParNewGC  打开此开关参数后,使用ParNew+Serial Old收集器组合进行垃圾收集。3.-XX:UseConcMarkSweepGC  打开此...

2020-04-01 14:27:34 4725

原创 Eden和Survivor

JVM 参考回答: 目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成Eden 空间、 From Survivor 和 To Survivor 三块区域。 我们把Eden : From Survivor : To Survivor 空间大小设成 8 : 1 : 1 ,对象总是在 Eden 区出生, From Survivor 保存当前的幸存对象, To ...

2020-03-29 15:22:56 572

原创 线程中断

线程中断中断不是类似linux里面的命令kill -9 pid,不是说我们中断某个线程,这个线程就停止运行了。中断代表线程状态,每个线程都关联了一个中断状态,是一个 true 或 false 的 boolean 值,初始值为 false。关于中断状态,我们需要重点关注Thread类中的以下几个方法:// Thread 类中的实例方法,持有线程实例引用即可检测线程中断状态p...

2020-03-29 13:19:15 192

空空如也

空空如也

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

TA关注的人

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