笔记
Einskai216
这个作者很懒,什么都没留下…
展开
-
分布式唯一ID
唯一id的四个要求全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B+ tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。信息安全:如果ID是连续的,恶意用户的扒取工作,比如爬订单号,对手可以直接知道我们一天的单量。在一些应用场景下,会需要ID无规则、不规则。UU原创 2020-08-22 00:17:38 · 195 阅读 · 0 评论 -
TCP之确保传输可靠的答题技巧
可靠性传输丢包发现TCP的报文都是有序列号的如果序列号不按顺序到达,那么可以发现丢包或者乱序一旦检测到乱序,那么就将乱序部分调整,一旦检测到丢包,那么就通知发送方重新传输丢包重传有三种做法一种是亭等协议,就是没法送一个tcp报文,只有当接收方返回ack之后,才会发下一个报文,效率比较低一种是回退n帧协议,也就是一次性发送n个报文给接收方,一旦第k个报文出错,那么从k往后的报文都要重新发送最后是选择重传协议,接收方回发送sack报文,该报文头回添加错误的报文信息,从而通知发送原创 2020-07-26 18:57:04 · 145 阅读 · 0 评论 -
jvm: 垃圾清理算法之CMS
并发标记清理(Concurrent Mark-Sweep)相对于之前算法的改进,之前的清理算法都需要将正在工作的线程停止,然后再调用GC,CMS出来之后,GC调用的时候,工作的线程仍然可以工作工作原理:CMS并非完全进行GC和工作线程,而是在启用GC的时候,会事先停止工作程序,找到根垃圾对象(在堆或者静态存储区上的0引用对象),找到根之后垃圾之后,恢复GC和线程的工作,此时GC再从根开始,根据引用链进行搜索。冲突:那么问题来了,如何处理GC和正在工作线程的冲突呢,比如,GC正在清理的时候,因为线程中原创 2020-05-15 17:53:12 · 202 阅读 · 0 评论 -
java编程思想阅读笔记:初始化与清理
初始化构造器(constructor):就是C++中的构造函数,不写也会有一个默认的无参构造函数,会给所有成员变量进行一个初始化重载:方法名字相同,但是参数不同(最开始是为了实现构造器而设置的,后来发现可以帮助多态的实现)。为什么重载不能根据返回值的不同来确定?因为存在歧义,比如void f(); int f(); 同时存在,然后主函数写了main(){f();},此时编译器无法知道这个f()指的是哪一个函数。涉及基本类型的函数重载:基本类型能够升级,比如void f(float a)可以通过f原创 2020-05-15 00:43:19 · 161 阅读 · 0 评论 -
java程序建立前应该做的事
包命名管理或许大家多多少少看过一些网课,讲课的大佬们命名一个文件往往都是根据包的路径,使用采用类似域名的方式来命名的,比如com.user.util.worker,这样确保每一个文件都有属于它自己唯一的名字使用其他构件导入非当前目录与系统路径的包,使用import关键字根据类库导入一个或者多个类,如import java.util.ArrayList,import java.util.*,每个java程序的开头,都必须有import语句,便于引入额外类。static关键字修饰的方法当一个原创 2020-05-12 23:22:44 · 151 阅读 · 0 评论 -
Redis深度历险阅读笔记(2):分布式锁
千帆竞发——分布式锁应用场景:应对并发锁的问题,多个用户的读和写并不是原子的实现:利用key+setnx(没有key才建立)操作来模拟互斥量,如setnx lockc true...del lock问题1:如果线程执行过程中间抛出异常,那么将会导致del失败,造成死锁问题对应方案1:给key设置一个过期时间,即便中途异常退出也会删除 setnx lockc true expire lockc 5问题2:这个问题比较牛角尖,但是可能会发生。因为setnx和exipre都不是原子的原创 2020-05-08 23:36:34 · 137 阅读 · 0 评论 -
Redis深度历险笔记(1):基础数据结构篇
Redis全称:远程字典服务(Remote Dictionary Service),从名字可以看出来Redis是一个key-value形的非关系型数据库(NoSQL),貌似除了windows系统都支持应用:缓存,分布式锁,等默认端口:6379安装(centos):yum intall redis运行:redis-cli万丈高楼平地起:支持的五种数据结构类型作用...原创 2020-05-07 14:37:29 · 205 阅读 · 0 评论 -
IO复用-epoll的简易解析
参考这篇前提linux中将任何事务的输入输出都认为是文件读写,因此epoll事件也不例外,epoll有自己对应的文件系统,称为eventpollfs,epoll事件的创建,修改,删除都是在这个文件系统中进行的EPOLL结构epoll监听事件大体流程创建一个epoll结构体,结构体中保存监听的fd进入阻塞,当监听到某个或者某些fd有数据之后,就将对应的fd放到fd列表的头...原创 2020-05-02 00:24:07 · 157 阅读 · 0 评论 -
转:看过最清晰的KMP详解与一道谷歌面试题
KMP算法-极客转载 2020-04-30 16:57:15 · 273 阅读 · 0 评论 -
失败面试经验总结(包含一些理解,但不一定正确)(3)
C++智能指针有什么shared_ptr:通过引用计数,让多个对象共享同一个内存weak_ptr:当我们创建一个weak_ptr时,需要用一个shared_ptr实例来初始化weak_ptr,由于是弱共享,weak_ptr的创建并不会影响shared_ptr的引用计数值。unique_ptr:强制要求一块内存(一个指针)只能有一个对象,拷贝构造函数只能是移动拷贝。虚函数表是什...原创 2020-04-30 00:00:15 · 146 阅读 · 0 评论 -
失败面试题整理(含自己的一些答案,但不一定正确)(2)
网络http状态码相关问题get和post的区别cookie与session的区别ddos攻击是什么?如何防止ddos攻击场景题1:让你设计一个只包含c/s的客户端-服务器架构,只要求实现读取读取客户数据并返回固定答案的场景提2:C++内存管理...原创 2020-04-26 17:04:03 · 226 阅读 · 0 评论 -
失败面试题整理(含自己的一些答案,但不一定正确)(1)
因为面了比较多,忘记具体是哪几家公司了网络从浏览器输入URL到请求返回TCP如何实现可靠传输校验和拥塞控制慢启动流量控制滑动窗口:接受窗口与发送窗口滑动窗口大小:由C++内存管理进程给变量分配的地址是物理地址吗?不是,操作系统中,每个进程可见的的内存地址都是逻辑地址,并非物理地址,物理地址是由操作系统中的页表映射得到的。堆与栈的区别...原创 2020-04-24 17:53:15 · 221 阅读 · 0 评论 -
面试题:grep正则表达式的一些用法
匹配文件扩展名 grep -P --color '^.*?\.(html|css|jpg)$'匹配IP地址IP地址由4个0~255的数据组成,因此,我们只需要能够表示0-255如何匹配就可以,此时我们应该考虑每一个字符的范围。首先是0-99: [1-9]?\d,这表示第一位最多出现1次且范围是1-9,而第二位则是0-9的任意数值。然后是100-199: 1\d{2},这表示第一...原创 2020-04-23 23:39:57 · 209 阅读 · 0 评论 -
C++11右值引用:移动语义与右值引用
什么是右值(right value)所有的具名变量或者对象都是左值,而右值不具名字,也不会开辟地址存储,比如x=y+z中,y+z的计算结果是一个右值什么是引用我们通常说的引用就是左值引用左值引用的是有具体对象的,因为左值引用就是多个变量共享一段内存,换句话说就是别名疑惑都说右值是临时数据,不会开辟空间存储,而引用又是一段空间的别名,那么右值和引用如何结合起来?按照左值引...原创 2020-04-22 20:37:02 · 264 阅读 · 1 评论 -
初学者:一天一个设计模式-策略模式
策略模式避免过多的if...else策略模式让一个类的行为或其算法可以在运行时更改如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为策略模式举例comparable接口comparator接口 :含有int compare(T o1, T o2)和boolean equals(Object obj) 两个函数...原创 2020-04-21 11:58:32 · 205 阅读 · 0 评论 -
快餐笔记:记录常用的linux指令以及一些系统文件夹
文件管理与终端输出echo $variable:输出变量touch filename:创建文件string >> filename:追加型输出重定向,如果文件存在,则往后添加消息,如果不存在则创建string > filename:覆盖型输出重定向,如果文件存在,则覆盖内容,如果不存在则创建cat filename: 读取文件中数据,并且输出到屏幕, 也可以重定向f...原创 2020-04-19 21:52:19 · 137 阅读 · 0 评论 -
经典面试题:消费者生产者模型
解耦,将消息生产与消息处理分开,仅通过一个消息队列联系支持并发public class MyContainer<T>{ private LinkedList<T> lists = new LinkedList<>(); final private int MAX = 10; public synchronized void put(T t){ ...原创 2020-04-17 11:42:38 · 310 阅读 · 0 评论 -
初学者:一天一个设计模式-代理模式
什么是代理模式一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。常见于web服务器中,客户端发送的消息先是被服务器代理(反向代理)接受,然后代理再分发给上游服务器代理模式必备三个类接口类image, 接口的实体类RealImage,代理类ProxyImage ProxyPatternDemo,我们的演示类使用 ...原创 2020-04-17 10:24:17 · 115 阅读 · 0 评论 -
线程局部变量
用空间换时间:Threadlocal,其他线程不知道这个线程内部的变量,如下面的程序中,第一个线程输出的是null,而不是set()的值可能会导致内存泄漏public class ThreadLocal2{ static ThreadLocal<Person> tl = new ThreadLocal<>(); public static void main(S...原创 2020-04-15 21:01:24 · 147 阅读 · 0 评论 -
初学者:一天一个设计模式-单例模式
什么是单例模式单例模式是最简单的设计模式对象只能由类进行创建,一个类也只能拥有一个对象这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象核心操作:将构造函数放到private中,只在public中提供一个get方法用于获取实例面试题:手写一个单例模式单例模式虽然简单,但是实现起来也是很有讲究的,这也是面试常考的问题,接下来就由坏到好的介绍几种单例模式的...原创 2020-04-15 11:54:03 · 136 阅读 · 0 评论 -
C++11小特性之一:构造函数的几个改进
继承构造函数C98继承表现class A{private: int x;public: A(int i): x(i){}};class B:public A{private: int y;public: B(int i): y(i) {} //编译失败,B这个构造函数中没有调用A的构造函数 //B(int i):A(i),y(i) {}};int mai...原创 2020-04-14 19:59:54 · 170 阅读 · 0 评论 -
C++11特性:总览
C++11:更适应泛型编程特性__cplusplus宏对齐支持alignment support原子操作多线程要求(指令不可重排?)推断类型autoauto自动推断类型,常用于迭代器遍历, decltype推断变量类型,如int i =1 ; decltype(i) j;强类型枚举常量表达式constexpr显示默认和删除的函...原创 2020-04-14 16:59:26 · 143 阅读 · 0 评论 -
常见SQL考题:TOPK工资与中位数工资
可以忽略的部分吐槽:SQL的题目在逻辑上并不会特别复杂,但是因为SQL语句只有那么几个函数,而且符号系统相对其他语言比较陌生,导致我们经常不知道如何下手不熟悉sql语句功能的可以先看菜鸟教程总的来说,SQL题目比较偏向于让我们从主要逻辑到实现,到特殊情况判断的逐层分析三个相关题目leetcode 176 第二高薪水题目大意:从Employee表中选出第二高薪水数额(去掉并列)主...原创 2020-04-10 14:50:30 · 480 阅读 · 0 评论 -
负载均衡算法:一致性哈希
名词解释哈希:即将输入数据利用同一个函数映射到一个固定范围内,因此最后一步一般是求模运算一致性:在范围发生变动之后,同一个数据的哈希值不会发生改变扩容当数据量过于庞大,导致无法进行存储的时候,需要进行扩容,扩容包含垂直扩容和水平扩容水平扩容新增服务器,让每个服务器分担的数据降低垂直扩容则增强一个服务器的性能,从而能够容纳更多数据为什么要一致性哈希水平扩容就产生了一个问题,...原创 2020-04-09 14:12:06 · 879 阅读 · 0 评论 -
面试题:仅使用位运算将数字扩大k倍
为什么要用位运算实现加减乘除?了解计算机通过半导体实现加减乘除的逻辑不装了,其实根本就是面试可能会问加法这里可能会啰嗦一些,后面基于加法就没有这么痛苦了加法加法,其实是由两种状态组成的:第一是各个数位都没有进位,这种最简单,就是将对应位置的数值直接相加即可第二是则是数位中有进位,这种也不难,首先是将对应位置数值加起来之后,要模上进制数,然后考虑进位数怎么计算,回忆下加法的过程...原创 2020-04-07 20:58:19 · 1561 阅读 · 0 评论 -
学习触发器的一丁点笔记
触发器顾名思义,触发器是监听表中特定事件,如果有相关事件发生,那么将会触发触发器中定义的操作语法:CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_stmt下面举一个例子,在TABLE1上创建一个EXAMPLE触发器,监听的事件是,当TABLE1中有数据插入...原创 2020-04-07 16:30:54 · 147 阅读 · 0 评论 -
C++各种类型转换
前提知识继承:子类继承父类,会把父类数据原封不动的复制一份,再往后添加属于自己的方法(如果函数是虚函数的话,那么子类会复制一个虚函数表,子类重写该方法,在自己的类空间中覆盖掉父类)父类指针指向子类的时候,指的仅仅是子类中复制的父类空间,但如果是子类指针指向父类,则不行,一来子类会丢失属于自己的方法,二来如果重写了虚函数,那么虚函数表关系会混乱简单介绍一下虚函数与非虚函数的对同名函数的不同处...原创 2020-04-07 12:03:28 · 92 阅读 · 0 评论 -
优雅关闭是什么
学习自这篇博客优雅关闭是在结束传输的时候调用shutdown函数而不是close/closesocket函数好处调用close之后,即便仍有数据未发送,或者发送的数据尚未确认收到,对应的fd也会被销毁,也就是说连接直接中断调用shutdown,并且设置了参数SO_LINGER>0(该参数代表延时事件)之后,连接只有超过这个事件,或者发送完数据才会中断。shutdown()不会销...原创 2020-04-05 23:13:04 · 650 阅读 · 0 评论 -
面试题记录-网络
打开浏览器输入URL到目标网站,需要经过哪些过程DNS解析:从浏览器缓存中寻找目标IP从计算机本地寻找目标IP从本地DNS缓存中寻找目标IP从根DNS服务器中查找到二级域名服务器从二级服务器递推,直到找到域名,映射为IP,将IP返回给主机根据IP地址与端口,三次握手之后建立TCP连接。如果是https协议,则会有一个加密密钥验证过程建立起安全的加密信道后,请求都会使用发送...原创 2020-04-05 00:19:54 · 118 阅读 · 0 评论 -
HTTPs交换密钥过程
前提非对称加密公私钥能相互解开,但是对于被嵌套的公私钥,相当于嵌套的锁,一定要将外层的锁解开之后才能解开内层的锁有一个公证人,即证书中心,CA过程服务器产生公私钥将公私钥发送给CACA生成客户端浏览器公私钥CA使用客户端浏览器的私钥对共服务器的公钥进行加密,得到证书,返回给服务器CA将证书发给客户端服务器发送公钥与证书给客户端客户端利用公钥对证书解密,对比服务端公钥,确...原创 2020-04-04 20:33:15 · 1263 阅读 · 0 评论 -
lambda表达式
lambda表达是一个没有名字的函数,有点类似于inline声明的函数[外部变量访问方式说明符] (参数表) -> 返回值类型{ 语句块}其中,“外部变量访问方式说明符”可以是=或&表示{}中用到的、定义在{}外面的变量在{}中是否允许被改变。=表示不允许,&表示允许。当然,在{}中也可以不使用定义在外面的变量。“-> 返回值类型”可以省略...原创 2020-05-02 00:06:09 · 115 阅读 · 0 评论 -
用户线程与内核线程
内核的意思为减少系统本身的开销,将一些与硬件紧密相关,运行频率较高的模块独立开来(如中断处理程序、设备驱动程序,时钟管理、进程调度等),使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核,内核也是进程,该进程操作的是底层硬件用户线程最明显的就是TCB处于用户空间,由用户线程库进行管理对操作系统不可见,也就是操作系统无法直接管理,操作系统只能直接管理它所属的进程...原创 2020-04-03 11:05:32 · 142 阅读 · 0 评论 -
UNIX网络编程学习-第二部分
传输层UDP不可靠,本身没有任何确认机制,即不保证每次发送数据包对方都能收到,不保证接收到的数据包有序,不保证数据包只接受一次每个数据包都有一个长度无连接协议,最明显的特点就是当客户端通过一个socket给服务端发送请求之后,立马就可以使用同一个socket发送请求。TCP可靠,有确认机制,TCP自动重传数据,并等待,直到数次失败之后,标记故障含有预估往返时间的算...原创 2020-04-01 12:33:47 · 113 阅读 · 0 评论 -
UNIX网络编程学习笔记-第一部分
第一部分感觉内容比较多,但感觉解释并不多,我就把看到的理解了的记录下来,等晚点再来添砖加瓦。socket是每一个网络连接的端点,是一个特殊的文件课本首先举例:建立TCP socket连接的流程,如一个非并发C/S获取时间的结构客户端:发送请求,读数据#include "unp.h" //包含大量socket头文件int main(int argc, char **argv){...原创 2020-03-31 16:15:19 · 1394 阅读 · 0 评论 -
数据库引擎与索引
建立条件:对应字段不能经常发生改变,对应字段不能种类太少,如性别,否则索引用处不大,等需要索引举例表的主键、外键数据量超过300的表应该有索引;经常查询的表的字段应该建立索引;经常出现在where子句中的字段,应该建立索引;在选择性高的字段上建索引;在小字段上建索引;频繁进行数据更新(增,删,改)的表,尽量少建索引;索引的结构,有哈希索引,自适应哈希索引最常用的是b+树索引这...原创 2020-03-27 11:30:08 · 124 阅读 · 0 评论