
笔记
文章平均质量分 72
天边有朵云
这个作者很懒,什么都没留下…
展开
-
面向对象编程的特性
面向对象的特性原创 2023-01-25 09:40:37 · 165 阅读 · 0 评论 -
SOLID原则总结
SOLID原则,帮助设计更易扩展、维护的软件原创 2023-01-25 09:30:00 · 1057 阅读 · 0 评论 -
设计模式 校招知识点总结
设计模式6大原则单一职责:一个类只需要做好一件事,复杂事通过多个类的合作完成举例:Linux的实现开闭原则:对扩展开放,对修改关闭里氏替换原则:父对象能做的事,子对象也能做依赖倒置:上层模块不应该依赖下层模块,应该都依赖于抽象举例:Spring依赖反转接口隔离:客户不应用依赖它不需要的接口,多个专一接口优于一个复杂接口迪米特原则:最少知道原则,对象应该对其他对象的了解越少越好,解耦对象,封装隐藏实现细节...原创 2021-03-15 16:19:09 · 254 阅读 · 0 评论 -
HTTP 校招知识点总结
HTTPHTTP与TCP连接HTTP的无连接指的是? 每次请求都是相互独立的 一次HTTP请求建立一个TCP连接?处理完毕连接断开? Connection:keep-alive,使一次TCP连接用于多个请求,有超时时间 get和post请求方法的区别 Get Post 语义 get表示从服务器取,应该只是检索数据 post表示上传实体到服务器,通常会对服务器产生影响 传送数据的方式 放到URL里 放到请求体里 ...原创 2021-03-13 11:49:28 · 447 阅读 · 0 评论 -
MySQL索引 校招知识点总结
定义:是一种为实现快速查找的数据结构全文索引概述:在一个或多个文档中查找单词出现的位置实现方式:倒排索引实施例:比如下面对这张文档-内容表建的索引存放单词的信息:(文档ID:出现位置-是文档的第几个单词)图引自linux高性能服务器编程2565149B+树索引计算树高:每个key指上的区间是[当前key, 下一个key) ,左闭右开的区间,所以n个节点、k个key的树高为B+树和Hash索引的区别 B+树 Hash 精确的等值查询.原创 2021-03-13 11:02:49 · 187 阅读 · 0 评论 -
锁
作用:并发场景下控制多个执行实体对共享资源的访问,资源有限,保证操作不互相干扰 多个执行实体之间的同步、互斥机制,比如Java内置对象锁,控制多线程对代码临界区的访问举例:MySQL程序的锁是用来实现事务隔离,此时共享的是数据 Java的锁是多线程并发访问对象,此时共享的是对象 Linux的锁是多进程并发访问共享内存、内核、共享链接库的举例:图书馆有个意见簿,分类:乐观锁: CAS自旋锁:临界区短暂时,自旋等待来获取锁,读取一个值修改后,通过Compare And Set原创 2021-03-12 11:30:23 · 123 阅读 · 0 评论 -
右值引用和移动语义
C++11新特性右值引用 左值 右值 意义 有名对象 临时对象 取地址 可用取地址符&获取地址 不可 常见类型 字面量、表达式、返回值的函数 声明引用 & && 用处 实现移动语义,减少内存复制 移动语义vector<string> method1(const vector<string>& V){ vect...原创 2021-03-03 11:13:22 · 128 阅读 · 0 评论 -
TCP相关的几个问题
本文内容:复用TCP报文段里的序列号部分? 发送数据长度如何确定,发送方怎么知道自己该发哪些字节了? 正常发送数据时应该用哪个标识 TCP报文段里的头部长度的作用何在? TCP头里的关键项和作用疑惑1:复用TCP报文段里的序列号部分?TCP通过字节序列号+确认机制来保证数据不丢失,接收方每接收一个报文段,就要发回一个ACK确认段,TCP报文头里有序列号 和 确认序列号,那么为什么不复用序列号这部分呢,通过ACK标识位来判断是发送时的序列号还是ACK确认序列号?这样就能一个报文段减少4字原创 2021-02-26 11:29:41 · 170 阅读 · 0 评论 -
Git 学习
本文内容Git 核心特点 Git文件状态、所处区域 分支 常用命令Git 核心特点分布式:每个本地仓库都有完整的项目文件和目录(含各个版本),本地操作更有效率,主库损坏时可从其他仓库里取数据进行恢复直接记录文件‘快照’,而非记录文件不同版本间的内容变化指针字串:每个文件修改后会进行校验和计算,得到一个40 个十六进制字符的串,作为该文件的标识和索引Git区域Git目录:一个项目就是一个Git目录,含.git文件,是保存元数据和对象数据的地方,克隆时就是复制这个目原创 2021-02-25 10:23:26 · 108 阅读 · 0 评论 -
Linux命令笔记
netstat:IP、TCP、UDP等协议的统计数据a:展示所有socket p:显示PID 查看端口占用 netstat -anp | grep 3306find:按文件属性进行查找name:按名称(可匹配正则) amin:最近访问时间(minute) atime:最近访问时间(hour) empty:空 mmin:最近修改时间 user group size:+,- 大于、小于grep:在指定文件、路径下的文件中查找符合pattern的行c:统计, i:不区分大小写.原创 2021-01-28 21:48:34 · 171 阅读 · 0 评论 -
HashMap 总结
本文内容哈希表 实现,关键参数,遍历方式,put操作过程 多线程场景下的问题 与其他容器的区别 HashTable HashSet ConcurrentHashMap 哈希表:存储 键值对 的一种数据结构,用空间换时间,查询时间复杂度O(1),最坏O(n)解决冲突的方法:链表法、线性再散列、二次再散列实现用链表法解决冲突,jdk8引入了红黑树,所以底层实现是 数组+链表/红黑树,下表列出jdk8做的改进 jdk8 jdk7 扩容时索引计算方式 .原创 2021-02-24 10:57:44 · 123 阅读 · 0 评论 -
并发简史
单程序最初的计算机只能一次运行一个程序,它能访问所有资源,必须从头到尾执行完毕才能换下一个程序执行。多道程序(OS, 进程)为了能让计算机一次执行多个程序,人们开发出了OS,抽象出了进程,基于时间片的调度能使得计算机 '同时' 执行多个程序,这就能满足多用户的需要资源利用:IO等待时,可以让其他程序执行 公平:多用户、多程序基于时间片交替执行 便捷:多进程一个完成一种任务通过交互,而不是一个程序完成全部任务线程(多CPU)多CPU场景下,一个进程只能占用一个CPU会浪费一个程序可能包含原创 2021-02-23 20:51:23 · 107 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap1.7(分段锁)1.8 CAS + synchronized初始化时:循环CAS,成功的线程进行初始化put时:锁分离,锁住链表头的对象,提高并发程度get:volatile包装拿到最新的节点数据原创 2021-02-23 20:30:48 · 123 阅读 · 0 评论 -
synchronized 和 volatile
synchronezed进出同步代码块时会进行内核态到用户态的切换,所以1.8进行了优化将锁分为4个级别:无锁、偏向锁、轻量级锁、重量级锁(对象头的Mark Word里做标记)无锁->偏向锁 一个线程看到对象头的无锁标记时,就把自己的线程ID写入,变成偏向锁,把原先的保存在栈中备份; 偏向锁->轻量级锁 线程发现偏向锁中的ID与自己一致时,无额外操作,直接进入同步块; 不一致时,进行CAS尝试修改线程ID为自己的,修改失败,锁升级为轻量级锁 轻量级锁->重量原创 2021-02-23 20:27:45 · 140 阅读 · 0 评论 -
JVM
JVMJava内存模型(JMM)java如何编译成字节码? 解析与填充符号表 词法分析、语法分析 填充符号表(KV对,标识符与它的声明类型、作用域、地址等) 注解处理 语义分析与字节码生成 标注检查: 变量声明、 变量与赋值的类型匹配 数据及控制流分析: 局部变量使用前是否赋值、 每条路径是否都有返回值、 ...原创 2021-02-23 20:15:08 · 137 阅读 · 0 评论 -
多线程和并发 校招知识点总结
多线程实现线程的方式继承Thread类,start创建线程,调用run方法 实现Runnable接口 Callable返回一个Future,表示有返回值的执行 线程池停止线程的方法在循环体里用一个标志位,条件达到自然停止 stop()方法,已废弃,会把finally等都停掉 Interrupt(),判断中断了就结束(类似标志位)线程间通信volatile一个共享变量 wait/notify lock JUC下的工具类并发队列ConcurrentLinkedQueue原创 2021-02-23 20:13:34 · 401 阅读 · 0 评论 -
Java Web
Web开发ServletJdbcSSM框架,Spring BootSpringSpring的来历翻译自https://blog.youkuaiyun.com/bntx2jsqfehy7/article/details/78898595的笔记考虑这么一个场景,实现一个UserService类,里面包含对User表的增删查改操作,该类依赖于UserDao进行SQL操作于是小孟同学在每个方法里UserDao userDao = new UserDaoImpl();很好,每个方法都有Us原创 2021-02-23 18:57:59 · 169 阅读 · 1 评论 -
春招 笔记
Java数据结构和算法OSMySQL网络RedisRabbitMQ原创 2021-02-23 18:51:27 · 132 阅读 · 0 评论 -
Redis多机的三种模式
主从复制作用:读写分离(写主--读从),提高并发性复制过程:主生成自己当前的RDB文件,并开启一个子线程记录生成期间处理的指令 主发送RDB给从,从复制主 主发送记录生成期间处理的指令给从,从完成复制,主从一致指令传播:主将写命令传播给所有的从,以便主从一致重复制主从连接断开后,从发现不一致,进行重复制主从双方分别维护一个偏移量,分别表示主发送的字节数,从接收的字节数主维护一个最近发出的字节列表及对应的偏移量,若从缺的那部分还在列表,则发送给从,不需要执行完整的复制否则原创 2021-02-23 18:32:52 · 166 阅读 · 0 评论 -
Redis
Redis的应用Redis多机的三种模式原创 2021-02-23 18:32:25 · 309 阅读 · 0 评论 -
Linux
多核 和 多CPU的区别 多核是一个CPU里有多个计算引擎,可以让多线程并行工作; 多CPU是多个CPU,可以多进程并行工作 CPU内含Cache和MMU(分页内存管理单元,处理虚存映射的) 所有多CPU有多个地址空间,可以让多进程并行多线程 对于提高并发性的意义重复利用多核CPU的特性 处理单个请求时,IO繁忙时让出CPU资源...原创 2021-02-23 18:11:28 · 355 阅读 · 0 评论 -
TCP 校招知识点总结
TCPTCP报头发送方、接收方的主机、端口号;序号号、确认号;控制位,窗口,选项(最大段尺寸)流量控制(接收方发送接收窗口大小)发送窗口大小=Min(接收窗口,拥塞窗口)持续计时器 --- 0窗口探测拥塞控制慢开始发送数据分段前先试探下网络情况设定拥塞窗口为1,每经过一轮传输后,成倍增长窗口大小拥塞避免每经过一轮传输后,窗口大小增长1if 拥塞窗口大小<慢开始阈值 执行慢开始算法else 执行拥塞避免算法快重传超原创 2021-02-23 18:05:43 · 161 阅读 · 0 评论 -
Java
基础关键字访问控制修饰符public, protected, 缺省默认, private逻辑控制符break, continue, goto类修饰符public, final, abstract变量修饰符final, static, volatile方法修饰符final, static, synchronized类关系符extends, implement, class, interface,集合ListLinkedListArrayL..原创 2021-01-22 14:21:07 · 316 阅读 · 4 评论 -
MySQL
SQL语法JOIN语句INNER JOIN:两个表中字段匹配的行才保留(两个表都不一定完整) CROSS JOIN:笛卡尔积 LEFT OUTER JOIN,RIGHTOUTER JOIN:一个表完全保留(未匹配上的右边补NULL),另一个表中字段匹配的保留 FULL JOIN:两个表中行都保留 这里OUTER JOIN是用于在ON过滤掉行之后加回的,使得表的行全部完整MySQL事务特性以及实现SQL优化复制...原创 2021-02-23 17:55:15 · 190 阅读 · 0 评论 -
Innodb 锁实现事务隔离性
SQLJOIN语句INNER JOIN:两个表中字段匹配的行才保留(两个表都不一定完整) CROSS JOIN:笛卡尔积 LEFT OUTER JOIN,RIGHTOUTER JOIN:一个表完全保留(未匹配上的右边补NULL),另一个表中字段匹配的保留 FULL JOIN:两个表中行都保留这里OUTER JOIN是用于在ON过滤掉行之后加回的,使得表的行全部完整...原创 2021-01-29 16:34:07 · 124 阅读 · 0 评论 -
MySQL事务实现 校招知识点总结
本章内容 1.事务特性介绍,举例 2.redo log如何实现持久性 3.undo log如何实现原子性事务四大特性:ACIDA:Atomic,原子性,即事务中的操作要么全部完成,要么全部失败 D:Durability,持久性,即commit操作完成后,事务对数据库的修改就该有效; 主要是修改操作是先修改内存中的数据拷贝,以后才刷新回磁盘中,所以如果这时服务器宕机,修改就丢失了 redo log如何实现持久性innodb引擎通过Force Log at Commit机...原创 2021-02-23 17:46:19 · 129 阅读 · 0 评论 -
布隆过滤器 学习
本文内容用处、特点、应用场景 原理 优缺点 改善用处:测试一个元素是否在集合中特点:常量级别空间、时间复杂度 能告诉你某个元素一定不存在 或 可能存在 于集合应用场景:网络爬虫去除重复URL,一定未访问过的URL 垃圾邮件地址 缓存穿透,将可能存在的数据放入,过滤掉不存在数据原理:多哈希函数的映射,一个很长的二进制位表+多个哈希函数初始时位表全为0 添加:多个哈希函数计算多个位置,将对应位置上位表置1 查询:多个哈希函数计算多个位置,如果有一个位置为0,则元素.原创 2021-02-23 14:59:47 · 111 阅读 · 0 评论 -
网络
OSI七层模型 与 TCP/IP五层模型应用层、表示层、会话层 (TCP/IP里都归到应用层里)传输层、网络层、数据链路层、物理层表示层:数据格式转化、数据加密、压缩会话层:建立、管理、终止会话 (DNS) 维护两者之间的通信、验证,传输大文件时,通信失效时从校验点恢复TCPHTTPHTTPSHTTPS工作流程ARP概述:Address Resolution Protocol,将IP地址--解析成--MAC物理地址流程...原创 2021-02-22 22:18:11 · 356 阅读 · 0 评论 -
HTTPS 工作流程
本文内容HTTPS工作流程图解 CA证书 认证服务器身份HTTPS大概流程如下,百度百科里还有协商加密算法、服务器认证客服端身份的完整流程CA证书认证身份有一个权威机构负责下发CA证书,服务器申请时需要带上自己的身份信息,CA机构会用私钥对证书进行签名,一般浏览器都会存有CA机构的公钥,可以用来验证证书的有效性CA证书 包含服务器的公钥、身份信息,通过CA认证后,就可以认为服务器是安全的了...原创 2021-02-22 20:46:12 · 213 阅读 · 0 评论 -
MySQL复制 了解
本文内容MySQL复制功能概述,应用场景 工作流程 原理 常见问题、解决方案概述:让一台服务器与另一台保持同步(数据一致),用于构建高可用、高性能的应用应用场景:水平扩展,负载均衡 主从复制--读写分离 容灾恢复工作流程:图片引自 “MySQL技术内幕:InnoDB存储引擎 图8-5"主 数据修改时,写入binlog从 用IO线程读取主的binlog,写入从的中继日志relaylog SQL线程读取relaylog...原创 2021-02-22 10:24:44 · 163 阅读 · 1 评论 -
RabbitMQ 了解
本文内容什么是消息队列? 优缺点、应用场景 RabbitMQ的组件、工作流程什么是消息队列?区别于CS架构下,客户端发出请求,服务器处理请求,发回响应的同步模式,消息队列则通过引入一个存放请求的中间层,来实现异步处理请求的模式,在某些场景下很有用优点:业务解耦: 比如说, 下订单要修改库存,订单系统需要调用库存系统的接口,如果库存系统出问题则会影响订单系统, 用消息队列可以持久化订单消息,等库存系统恢复后再取消息处理 再比如 系统A依赖于系统B、C,调.原创 2021-02-21 15:46:20 · 271 阅读 · 0 评论 -
Docker 简记
作用:将 应用 以及 能使应用运行起来的环境 一起打包成集装箱目标:一次构建,到处运行核心概念: 从抽象角度看 镜像:文件+元数据(环境变量、端口映射等),应用运行时的快照 容器: 将应用快照恢复并运行,运行中的应用 从实现的角度来看 镜像:一堆只读层堆积成的 文件系统 容器:一堆只读层 + 一可写层 组成的文件系统 层:对文件所做的修改的集合 Dockerfile FROM 声...原创 2021-02-19 16:29:23 · 84 阅读 · 0 评论 -
Redis的应用
缓存:内存数据库、过期,适合存储一些热点数据 问题: 缓存不一致 修改数据时,对缓存和数据库修改是非原子的 (1) 先缓存失效再修改数据库 (2) 先修改数据库再缓存失效 可能缓存删除失败,可以用消息队列来保存缓存一致性(重复删除) 缓存穿透 用户请求了缓存中没有的Key,导致请求打到数据库, ...原创 2021-02-19 15:51:10 · 91 阅读 · 0 评论 -
Java内存模型JMM
深入理解Java虚拟机 12.3节笔记什么是Java内存模型?主内存+工作内存; 定义了一些操作协议,来规范对主内存、工作内存的访问; 定义了共享变量的访问规则,即如何将对象写入内存,从内存种取出类比计算机内存模型由于CPU与内存之间速度不匹配,所以引入了缓存,由此导致了缓存一致性问题,需要协议来约定如何对主内存、高速缓存读写Java内存模型定义了8种操作来规范对主内存、工作内存进行访问的过程八种操作如下lock,unlock对主内存变量进行加锁,解锁,只允许一个线程.原创 2021-02-18 18:07:03 · 108 阅读 · 0 评论 -
网络IO模型
IO复用:让一个进程阻塞在select, poll, epoll系统调用上, 让内核监视多个文件描述符,一旦就绪(数据抵达内核缓冲区),就通知进程进行读写(内核->用户进程)select#define FD_SETSIZE 1024struct fd_set{ //每一位表示一个文件描述符, //容量数目由FD_SETSIZE确定,所以处理的文件描述符数目受到了限制 long int fds_bits[FD_SETSIZE/sizeof(long int)];//所以可以...原创 2021-02-18 15:53:15 · 150 阅读 · 0 评论 -
MySQL SQL优化 实践笔记
1原创 2021-02-08 09:01:32 · 137 阅读 · 0 评论 -
算法笔记
快排区间左闭右开,第二重while循环 移动指针时用开,i或j==哨兵时,交换哨兵,最后递归时注意mid不要再参与堆排序TopK问题维护一个含K个数的最小堆,遍历数组,比根小则丢弃,最后堆剩下的即为TopK,O(NlogK)数学'全错位'排列问题n个信封,全部装错了,问有多少种排列方式假设f(i)表示i个信封的排列方式,f(1),f(n-1)已知,n>=2; 考虑f(n), 当n放到位置i上时,可分两种情况进行讨论i放到n上,其他n-2个又构成了全错位排原创 2021-01-26 20:24:01 · 1697 阅读 · 0 评论 -
TCP 聊天室 实现v1
在学习网络编程,于是自己做小项目练手linux系统下使用基本socket API实现一个简易的聊天室,CS两端能 交互 收发消息Client:#include <arpa/inet.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include &l...原创 2020-05-01 18:31:04 · 294 阅读 · 0 评论 -
C++学习笔记(二.继承成员的访问控制)
突然了解到访问控制符不光能出现在类定义的成员前,还能出现在第二个位置(派生列表中),两种情况交织起来访问控制令人迷茫所以写个博客梳理一下,总觉得这个继承关系跟现实生活中的人际关系其实差不多,所以拿老李一家三代人打个比方出场人物如下:老李:基类的内部成员函数老李的财产:房屋、卧室、保险柜,基类成员,分别以public,protected,private修饰李妈:老李的妻子,基类的友元大李...原创 2020-01-10 15:59:45 · 136 阅读 · 0 评论 -
C++学习笔记(一. 面向对象特性:继承、动态绑定)
C++设计目标为系统程序设计提供Simula语言的程序组织功能(类、类的层次结构),同时提供C语言的效率和灵活性.[1]早期C++ 即 带类的C面向过程与面向对象C是一门面向过程的语言,如果我们想表示两个类之间的关系,只能用 组合、包含 的形式(一个类作为另一个类的属性),如果以图表表示,其实相当于以 文氏图 的方式来表示,当实体数目变多时,图会变得庞大复杂难以辨认。实体 生物{ ...原创 2020-01-10 08:36:37 · 198 阅读 · 0 评论