自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面霸养成(三)TCP四次握手和三次挥手,为什么天天问还答不好呢?

三次握手“我看你的简历上写了了解网络协议,那么你说说TCP的三次握手是怎样的吧。”如果面试比较多的同学,对于上面这句话简直耳熟能详,关于三次握手的各种回答几乎都烂熟于心了,虽然三次握手比较简单,那么我们还是来稍微讲解一下。首先上三次握手的经典图:首先我们来看,其中有个SYN和一个ACK两种数据信息,还有一个seq和J、K两个数字,那么我们就从这几个方面来讲讲,三次握手究竟都干了些什么,怎么就能确定建立了一个TCP的链接呢。TCP有六种标志位,发送数据的时不同的标志位代表不同的请求类型。共有

2020-07-08 16:04:26 262

原创 面霸养成(二)你从浏览器输入一个域名到看见页面,经过了哪些步骤

这是一个很经典的面试题,主要是考察程序员是否对网络请求的整个步骤有一个比较详细的了解,整体上来讲是对OSI七层模型理解的考验。这个问题还有一个问法: 你在浏览器中输入百度的域名到你看到了百度的页面,中间经过了哪些步骤。如图,我们到底是怎么能看到这个百度的页面的呢?OSI七层模型应用层、会话层、表示层合并为了应用层。物理层和数据链路层合并为了物理层。应用层我们使用浏览器请求,那么请求使用的是Http协议,从应用层发起,浏览器会帮我们封装http的相关信息,进入开发者模式就可以查看到相关的h

2020-07-08 14:35:32 313

原创 面霸养成(一)以一个秒杀系统开始,我们需要懂一些什么技术?

秒杀技术架构“你如何设计一个秒杀系统?或者是你如何设计一个抢票系统?”在面试高级ApiBoy和架构师的时候,应该有很多人都见过这个问题。有时候你不得不思考一下,即便现在网上的许多面经里都包含了这类问题,为什么面试官还是乐此不疲的提问,而且你在网上查找这些设计题的答案,也很难找到一个很全面让你一下就能组织起语言去回答的文章。究其原因是因为这个题目涉及到的知识点还是很多的,哪怕你背好了答案,面试官随随便便发散或者挖掘一下深度,如果你没有很硬的技术知识储备,那么很快就会败下阵来。那么本专栏就是来探究一下如果

2020-07-05 01:13:21 500

原创 RabbitMQ丢失消息和重复消费问题

最近改了改自己的简历,然后试了试水,收到了很多面试邀请,于是去热热身,一来提升一下自己的语言组织能力,二就是给自己做一些查漏补缺,天天码业务代码有时候一些很简单基础的东西反而忘得干净。今天随便面了一家小公司,经过一个多小时的面试,所有的问题都答的很流畅,但是在一个很简单的地方卡住了,面试官问了我一个问题:RabbitMQ如何保证消息不重复消费?这是一个很简单的问题,但是当时我想茬了,我想到了如何防止消息不丢失,然后一下没回忆起来,卡了一会。好在面试官提示了我如何做分布式幂等校验,我就顺着答了下去。

2020-06-29 01:14:54 2323

原创 单例设计模式(四种实现与优缺点)

日常编程中,我们在用到对象的时候经常会new一个对象来使用,但是对于部分常用的对象来说,频繁的创建与销毁会给我们的服务器带来不小的压力,所以很多时候我们需要创建单例对象来避免这种情况发生。单例的创建大致分为四种:饿汉式懒汉式静态内部类枚举饿汉式代码实现:class Singleton{ //私有化构造器,外部无法new private Singleton(){ } //本类内部创建对象实例 private final static Single

2020-06-27 23:26:10 309

原创 排序算法之冒泡排序(bubbleSort)

**冒泡排序的原理和实现**冒泡排序的核心思想就是每次只会比较相邻的两个元素,如果前面的元素比后面的一个元素大,那么说明两个元素需要交换位置(排序一次)。每一次排序需要遍历整个数组,也就是O(n)的时间复杂度,一次遍历可以排序好一个数(第一次遍历最大的数就排到了最右边,第二次遍历第二大的数排到了右二的位置),循环n次,就可以将整个数组的数排序完成,时间复杂度是O(n2)。示例图如下:每一次遍历有一个(橙色)数被排序完成排序代码如下: // 冒泡排序 public static

2020-06-27 22:55:00 224

原创 MySQL日志服务(二):事务日志

MySQL事务日志前言上文我们提到过了,InoDB有两种事务日志,他们是InoDB能实现事务的关键,由于并非是MySQL的server自己实现,并且也不能算是开发人员常用的日志,所以对这两个事务日志了解不深,甚至根本都没有听说过。但是,这两个日志在InoDB实现事务时扮演了重要的角色,了解这两个日志,会让你对InoDB的事务理解更上一层。再也不用担心面试的时候被问到事务的时候,只能说出几个事...

2019-12-30 23:15:06 168

原创 MySQL日志服务(一):服务日志

MySQL日志服务详解(一)前言MySQL中包含了许多日志服务,这些日志分别记录了用户对数据库的不同的操作,以及MySQL的各种状态和异常,熟悉这些日志,在自己的数据库出现问题的时候查看相关的日志可以帮助你准确的定位问题,及时解决。我们先来看一下,MySQL都有哪一些日志:Server层日志(由MySQL自身实现):错误日志(error log) : 用于记录用户操作数据库的各种错误和...

2019-12-30 23:14:52 259

原创 MySQL锁技术详解

Mysql锁技术详解本文只讨论InoDB存储引擎下的锁。前言在分布式并发的场景下,对于共享资源的操作是非原子性的,这会造成操作和预期的结果并不一致。原子性操作 :指在一次CPU的调度时间类完成的一系列操作,顺序不可打乱,也不可只执行一部分。任何可能能被CPU打断的操作都不是原子操作,所以真正的原子操作需要硬件支持,但是硬件大多数只支持系统的核心方法的原子操作,所以如果想要在自己开...

2019-12-22 18:27:03 719 3

原创 假装在面试(三):你遇见过缓存穿透吗,怎么解决的。

我们先来看一个缓存穿透的场景:小明是一家公司的主程,这家公司准备上线一项很大的活动,这个活动的流量极大。数据库系统肯定承受不住这么大的流量冲击,所以小明在活动开始之前提前将所有的数据都导入了缓存,避免了流量直接访问数据库。然后,小明在代码里面做了一层这样的逻辑,只有缓存中不存在的数据,才会去查询数据库。也就是说,只有在活动中新增的数据才需要查询数据库,因为活动之前的数据已经全部导入缓存中了,...

2019-12-11 20:31:39 240

原创 假装在面试(二):你知道Redis都有哪些数据结构。

在上一篇已经说到了,redis的五种对外的数据类型,也就是用户可以选择存储的数据类型。分别是:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)但是如果面对这个问题,仅仅只回答这五种数据类型,显然是不够的。因为这个问题的本质还是在考验你是否对于redis的每一种数据类型都足够了解,因为只有你深入了解了这些数据类型的结构和redis对它的实现,你...

2019-12-05 21:00:08 213

原创 LeetCode精华题目(一):接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6此题是我认为LeetCode中比较有创意的一个题目,附上java实现,带有详...

2019-12-03 20:47:15 404

原创 假装在面试(一):你知道哪些Redis的命令行,它们都有哪些作用。

全局命令:keys *该命令行会将当前redis中存储的所有key显示出来。因为redis是单线程模型,所以一次取出大量的key会让线程阻塞相当长的时间,在线上服务器使用会让其他服务器无法正常进行。可以认为这个命令在线上环境禁止使用!!!dbsize该命令行显示当前redis中存储的key的数量。这个命令行不会造成线程的阻塞,因为它并不是遍历所有的键,Redis内置的计数器在每次新...

2019-12-03 20:29:03 138

原创 反转一个链表

反转链表是很多大厂喜欢面试的一个算法,虽然简单,但是基于反转链表衍生出来的算法也有很多。下面给出java和python两种语言反转链表的代码:java:class Solution { public ListNode reverseList(ListNode head) { ListNode next = null; //保存链表的下个节点 ListNo...

2019-11-30 21:30:58 121

原创 MYSQL(二):update语句执行的秘密

MYSQL(二):update语句执行的秘密在上一篇博客里,已经大致讲了MySQL的一些组件,和MySQL的查询语句是如何返回结果的,现在再来研究一下MySQL是如何进行更新操作的,虽然标题是update执行的秘密,但是实际上新增和删除也是一种与update相似的操作(这些操作都涉及到了对硬盘存储的修改)。MySQL处理它们的流程都是一样的。需要注意:所有的讨论都以Inodb存储引擎为标准。...

2019-11-30 18:29:01 232

原创 数字反转(如何判断回文数)

数字回文在LeetCode的刷题的时候,碰见了一个很简单的题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。看到题目的第一反应是将int转化成String然后再判断是否是回文。仔细思考一下之后,发现数字的反转也是有规律可循的,根本不需要转化成字符串。代码如下:   int x = 1213121; ...

2019-11-29 12:00:54 480

原创 MySQL的索引覆盖技术详解

开始之前先了解一下下面这些内容:索引表 : 存储索引信息的表数据表 : 存储了数据信息的表硬盘随机读 :磁头根据地址信息从寻道到找到数据所在的扇区所花费的时间,在sql执行中这是一个很耗时的过程,应当尽量的避免多次硬盘随机读。需要注意的是,只有存储了所有索引数据的索引类型才可以使用索引覆盖技术。比如B树索引。DBMS系统理论上都可以使用索引覆盖技术,并非MySQL的特点。MySQL的...

2019-11-06 20:10:07 338

原创 MYSQL(一):MySQL基础架构(一条语句如何查询)

应该知道的MySQL基础架构MySQL的内部组件这篇文章主要是来聊一下MySQL的基础架构。在工作中我发现了一个问题,许多小伙伴虽然已经用了许久的MySQL数据库来处理业务,熟练的使用CRUD并且能针对索引内存做一定的优化,但是对MySQL内部架构缺乏了解,但是如果能知道MySQL的各个组件以及相应的组件处理什么逻辑,对于MySQL的使用是有很大的帮助的。总的来讲,MySQL内部大致可以分为...

2019-11-03 22:45:29 148

原创 Redis的内存管理和优化

Redis内存管理1.查询redis内存相关的信息2.redis内存是如何消耗的3.如何优化redis的内存1.查询redis内存相关的信息登录redis的客户端,查看当前redis服务器的内存使用情况:使用info memory 命令:关键词解释used_memory:已经使用了的内存大小,包括redis进程内部开销和你的cache的数据所占用的内存,单位byte。used_mem...

2019-09-05 20:43:58 2321

原创 Linux下安装Elasticsearch

Linux下安装ElasticsearchLinux下安装Elasticsearch1.安装java2.配置java环境变量3.下载安装ElasticSearch4.启动ElasticSearch可能出现的异常Linux下安装Elasticsearch1.安装java首先我们需要下载java的SDK,根据当前的系统来下载所需要的版本:查看当前系统的:使用uname -a 命令:可以看到...

2018-10-18 19:51:04 229

空空如也

空空如也

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

TA关注的人

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