自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《clean code》读后感

本书名为《整洁代码》,主要讨论了如何让代码变得简洁,可读,易维护。作者认为,相比于让代码跑起来,让代码保持整洁更加重要。

2021-02-25 15:50:25 332

原创 Redis持久化

文章目录一、持久化二、RDB:保存某个时间点的全量数据快照1.什么是RDB2.触发机制(1)手动创建(2)自动创建3.最佳配置4.实验三、AOF1.什么是AOF2.三种策略3.日志重写4.日志重写策略(1)bgrewriteaof(2)AOF重写配置5.AOF重写流程6.配置四、Redis持久化的取舍与选择1.RDB对比AOF一、持久化持久化,顾名思义就是将数据持久保存。因为Redis数据都保存在内存中,对数据的更新将异步地保存到磁盘上。主流数据库的持久化方式:快照:记录某一时刻数据的状态 (Re

2020-09-19 16:23:19 310

原创 瑞士军刀Redis

一、慢查询1.客户端请求的生命周期慢查询发生在第三阶段:执行命令客户端超时不一定是慢查询,但慢查询是客户端超时的一个可能因素。2.slowlogredis的slowlog是redis用于记录慢查询执行时间的日志系统。由于slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性能。(1)slowlog-log-slower-thanslowlog-log-slower-than表示slowlog的划定界限,只有query执行时间大于slowlog-lo

2020-09-18 23:00:47 296

原创 Redis API的理解和使用

文章目录一、通用命令二、单线程三、数据结构和内部编码1.字符串一、通用命令keys 用于查找所有符合给定模式 pattern 的 keykeys在生产环境中一般不使用,因为keys会阻塞其他命令。dbsize 返回当前数据库的 key 的数量exists key 用于检查给定 key 是否存在,存在返回1,不存在返回0del 删除一个/多个keyexpire key seconds 设置key的过期时间ttl key 查看key剩余过期时间,persist key 去掉key的过期时间

2020-09-16 23:10:05 231

原创 Redis初识

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis有以下8种特性:速度快持久化多种数据结构支持多种编辑语言功能丰富简单主从复制高可用、分布式...

2020-09-16 20:42:27 228

原创 手写一个MINI SpringMVC

文章目录一、开发准备1.Gradle2.仿Spring的项目结构二、Web功能开发1.Web服务器2.Web服务模型3.Servlet4.集成Tomcat对于一个只会使用SpringBoot而不知道其内部原理的菜鸡,准备系统学习一下Spring的实现。于是第一节课学习的是《仅需2小时 手写MINI Spring MVC框架》。一、开发准备1.Gradle在Web开发时,常用的依赖管理工具通常是Maven。不过Gradle相比于Maven语法更加简单,且不需要安装,更加灵活,所以此项目使用Gradle

2020-09-14 13:45:16 324

原创 面试中常问的Java IO模型到底是什么?

文章目录一、同步阻塞IO(BIO)二、同步非阻塞IO(NIO)三、IO多路复用1.Linux中的IO多路复用最近在面试中常常被问到IO模型,于是想在网上找找对应的讲解,可都没有一个详细好理解且带例子的。下面会介绍Java的几种IO模型,并且均给予代码演示。Java中最常用的模型个人认为有以下四种:同步阻塞IO(Blocking IO)同步非阻塞IO(Non-Blocking IO)IO多路复用异步IO(Asynchronous IO)一、同步阻塞IO(BIO)同步阻塞IO可以说是最简单的

2020-09-12 14:28:06 328

原创 C++指针与引用

C++的指针和引用一直是在上学期间考试的重难点,也是最难搞懂的部分。希望这次可以彻底掌握这两点。一、指针1.定义上来先给出定义,定义还是比较好看懂的。定义指针本身就是一个变量,其符合变量定义的基本形式,它存储的是值的地址。对类型T,T*是“到T的指针”类型,一个类型为T*的变量能保存一个类型为T的对象的地址。例如int a = 122; int* b = &a,b就是一个指针变量,保存着a的地址。间接访问通过一个指针访问它所指向地址中的值的过程称为间接访问或者引用指针。这个用于执行间

2020-09-09 15:16:26 390

原创 C++学习——基础篇

从今天起,开始学习C++。一、概述C++是一种编译型语言,除了编译型语言还有哪种层次和类型呢?1.编程语言的层次和类型机器语言(01),汇编语言编译型语言:C++、C解释型语言:Basic、Python、Java(编译成.class文件,再由JVM编译)脚本语言:bash、csh从上到下使用层次更接近人类使用,但运行效率逐渐降低。2.何为编译型语言编译型语言一般需要经历编译和链接的过程,才能变成真正可执行的程序。编译:将用户的源代码编译成若干个目标模块;链接:将目标模块与它们所

2020-09-05 09:25:44 241

原创 趋势科技一面二面面经

趋势科技是一家做网络的公司,所以对于Linux、网络、C++比较重视。Java倒是没怎么问:一面

2020-08-30 15:45:28 480

原创 美团秋招凉经

一面说一下面向对象和面向过程的区别。final修饰一个类的目的是什么?为什么不能被继承?在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。JRE,JDK,JVM分别是什么意思。说一下HashMap的底层原理。红黑树相比于AVL树有什么优势?红黑树利用了缓存,以空间换时间。牺牲了部分平衡性,以换取删除/插入操作时少量的旋转次数,整体来说,性能优于AVL树。Concurrent的底层原理。1.8之后为什么用CAS来实现了

2020-08-27 17:07:23 185

原创 青颖飞帆二面三面面经

二面·技术面Mybatis是怎么将xml文件映射为Java类的?SpringBoot在启动的时候做了什么事?说一下对redis的理解,和MemCache的区别?Redis 是单线程的,MemCache是多线程的;Redis支持更丰富的数据类型Redis可以将数据持久化存储到磁盘,也可以进行数据恢复。为什么Redis的速度比数据库快?Redis所有的数据均存放于内存,操作也是在内存中进行。Redis 是单线程的,避免了上下文切换使用多路IO复用模型数据库和文件系统有区别吗?

2020-08-25 16:20:32 818 1

原创 操作系统提升篇

一、线程同步1.互斥量(1)定义互斥量可以保证指令的先后执行顺序,保证了指令的原子性。互斥量(互斥锁)是最简单的线程同步方法,只有加锁/解锁两种状态。(2)例子2.自旋锁使用了自旋锁的线程会反复检查锁变量是否可用。如果一个线程未请求到锁,会一直占用CPU循环等待。优点:避免了进程或线程上下文切换的开销缺点:会占用CPU资源,等待时间过长则会影响其他进程。例子...

2020-08-23 21:57:00 223

原创 青颖飞帆一面面经

感觉这个公司虽然不大,问的问题倒不是很水。问题虽然不深,但是涉及面比较广,问题也都是很基础的题目。面试官水平还可以,在面试的时候也会引导去回答问题,最后还提出了建议。还是挺不错的面试体验的。C语言和Java感觉有什么不同?怎么理解面向对象?√Java对象的管理是什么样的?Java栈中存放什么对象(存放基本数据类型和引用变量)√Java的垃圾回收的过程。√ Java怎么手动触发GC×System.gc();Java的GC是由JVM自行调动的,在需要的时候才执行,上面的指令只是告诉JVM尽快GC一

2020-08-20 23:02:08 1228

原创 操作系统基础篇

一、概览1.What&Why操作系统是管理计算机硬件和软件资源的计算机程序。管理配置内存、决定资源供需顺序、控制输入输出;提供让用户和系统交互的操作界面2.操作系统的基本功能统一管理计算机资源(处理器、IO设备、存储器、文件)实现了对计算机资源的抽象,用户无需面向硬件接口编程。提供了用户与计算机之间的接口(图形界面、命令行、系统调用)。3.操作系统相关概念并发性:两个或多个事件可以在同一时间间隔发生(和并行区分)共享性:操作系统中的资源可供多个并发的程序共同使用。

2020-08-20 10:48:22 593

原创 百度测开二面三面

一面更比一面难,BAT果然不是那么好进的。1.计算机网络TCP连接断开时,为什么最后要等待2MSL?TCP的连接并没有分段,接收端怎么知道接收到了一个完整的消息?浏览器上面的小锁,为什么有时候是红色的?说一下证书是怎么认证的?https为什么安全性更高?2.操作系统说一下“信号量、互斥锁、条件变量”的区别。...

2020-08-15 17:42:55 492

原创 InnoDB存储引擎

一、InnoDB存储原理1. 记录存储方式:页内外存交换的基本单位:Mysql将数据从外存读入内存不是以记录为单位,这样消耗太大,是以页为单位,每个页里填充记录。每页大小为16KB。页头:记录页面的控制信息,包括页的左右兄弟页面指针、页面空间使用情况等。虚记录:最大虚记录:比页内最大主键还大最小虚记录:比页内最小主键还小记录堆:行记录存储区,分为有效记录和已删除记录两种自由空间链表:已删除记录组成的链表未分配空间页尾:存储页面校验信息2.页内记录维护页内的数据是按照主键

2020-08-14 21:41:10 176

原创 百度测开一面

原本以为测试应该会很简单,没想到面试也挺难的。1.项目聊一聊你的秒杀系统是怎么测试的?库存超卖是怎么测试的?并发量提升到了多少2.Java聊一聊Java虚拟机和内存模型线程同步的方式3.基础计算机的32位、64位是什么意思Linux熟练吗,平时都用来干什么Get和Post的区别4.场景题有100万个数字,给出一个数字判断是否存在。用什么方法好?什么都可以提示:我要查多次,不能每一次都查找吧?(二分查找×)Linux中可以怎么查Java中有什么可以用的(我说

2020-08-14 12:37:58 146

原创 Redis面试

一、Redis简介Mysql的数据都存放在磁盘中,读取时IO压力大,所以缓存数据库应运而生。1.缓存中间件—Memcache和Redis的区别Memcache:代码层次类似Hash支持简单数据类型不支持数据的持久化存储不支持主从不支持分片Redis数据类型丰富支持数据磁盘持久化存储支持主从支持分片2.为什么Redis这么快Redis可以达到100000+QPS。完全基于内存,绝大部分请求是纯粹的内存操作数据结构简单,对数据操作也简单采用单线程,避免了处理并发问题

2020-08-07 17:26:56 154

原创 字节跳动提前批java一面

一、HashMap讲一下HashMap为什么1.7及之前扩容时会形成环HashMap是怎么扩容的,为什么会有高低位的区别,数组长度为什么是2的n次方为什么链表要变成红黑树二、TCPTCP/IP协议有哪四层?TCP和UDP的区别TCP和UDP分别的使用场景TCP的四次挥手,为什么最后要等待2MSL?TCP出现粘包是怎么解决的?三、数据库索引在数据库中以什么结构存储?B+树和B树的区别?优势是什么聚集索引和稀疏索引的区别创建联合索引时需要注意什么数据库的四种隔离级别,R

2020-07-29 10:06:53 253

原创 页面级高并发秒杀优化

一、商品列表页面缓存实现1.页面缓存要展示一个页面时,先从缓冲中取;如果取不到,再进行渲染,然后将渲染后的结果写入缓存。对商品列表页进行优化,修改toList()这个Controller。之前是直接返回html的文件名,让SpringBoot负责渲染。现在将代码改为: @RequestMapping(value = "/to_list",produces = "text/html") @ResponseBody public String toList(Model model,

2020-06-30 19:55:33 336

原创 JMeter压测

一、JMeter入门下载JMeter并解压,通过打开bin目录下的jmeter.bat来启动。启动后界面如下:假如要对/goods/to_list进行压测,首先添加线程组(Thread Group),可以设置线程数、启动时间、循环次数等属性。然后在线程组中添加Http请求默认值,配置地址:端口。再添加一个Sample-Http请求,配置请求方式和接口地址。添加一个聚合报告(Aggregate Report)用来展示结果,也可以添加别的监听器。运行——可以看到总体的结果:这是在1000个线程时的

2020-06-29 11:12:25 302

原创 秒杀功能开发及管理后台

一、数据库设计数据库要设计以下几个表:商品表、订单表、秒杀商品表、秒杀订单表。之所以多设计一个秒杀商品表,是为了更好的维护和扩展。1.商品表CREATE TABLE `NewTable` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID' ,`goods_name` varchar(16) NULL DEFAULT NULL COMMENT '商品名称' ,`goods_title` varchar(64) NULL DEFAUL

2020-06-27 18:22:09 1055

原创 实现登录功能

实现登录功能一、数据库设计设计一个用户表:CREATE TABLE `miaosha_user` (`id` bigint(20) NOT NULL COMMENT '用户ID,手机号码' ,`nickname` varchar(255) NOT NULL ,`password` varchar(32) NULL DEFAULT NULL COMMENT 'MD5(MD5(pass明文+固定salt)+salt)' ,`salt` varchar(10) NULL DEFAULT NU

2020-06-25 21:49:09 1136

原创 Packet Tracer实验复习

根据老师所给的复习重点,复习分为以下几部分:RIP实验(第六次)VLAN & ACL实验(期中考试题)NAT(附件里的第18章)一、RIP实验1.题目要求按照下图搭建网络,实现不同路由主机间通信。2.要点分析需要添加Serial口,这就需要路由器之间用Serial DCE线连接,并且是连在路由器的Serial口。需要配置RIP路由协议。3.实验过程(1)首先按照题目要求搭建出网络。这里要注意了,路由器本身是没有Serial口的,需要添加一个WIC-2T配件。此外

2020-06-23 20:26:10 1971

原创 框架搭建

一、Result结果封装后端返回给前端的结果应该是一个规范化的,每个回复的格式都是一样的。它应该包括:code,message,data。1.ResultResult类应该包括这三者,并且在成功时应该有一种预设的返回。@Datapublic class Result<T> { private int code; private String msg; private T data; private Result(T data) { th

2020-06-22 10:51:18 177

原创 快速上手Spring Boot整合Redis

快速上手Spring Boot整合Redis一、非关系型数据库NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性

2020-06-21 19:56:28 219

原创 归并排序

归并排序分两种,自顶向下和自底向上:一、自顶向下这种方式的思路是,将数组两等分的递归拆成最小的数组(也就是1/0个元素),然后在一个一个的拼接起来。相比于自底向上,这种是更容易理解的,因为拆分不需要我们手动进行。 /** * 自顶向下的归并排序,用到的是递归 * @param nums */ public void mergeSortT2B(int[] nums,int left,int right){ if(left==right) re

2020-06-20 20:17:17 188

原创 课程概要

课程概要一、项目框架搭建Spring Boot环境搭建继承Thymeleaf,Result结果封装集成MyBatis+Druid继承Jedis+Redis安装+通用缓存Key封装二、实现登录功能数据库设计明文密码两次MD5处理JSR303参数校验+全局异常处理器分布式Session三、实现秒杀功能数据库设计商品列表页商品详情页订单详情页四、JMeter压测JMeter压测自定义变量模拟多用户JMeter命令行使用Spring Boot打war包五、页

2020-06-19 11:05:58 287

原创 Future和Callable

一、概览1.Runnable的缺陷Runnable不支持返回值,因为run()是一个void方法。也不能抛出checked Exception。这是因为再往上抛出,也没法处理了,不如在这里处理。2.Callable接口类似于Runnable,实现它的call方法就像是实现Runnable中的run方法一样。不同的是它是有返回值的。源码public interface Callable<V> { /** * Computes a result, or throw

2020-06-16 19:46:00 164

原创 AQS

一、为什么需要AQS仔细观察锁和协作类,就会发现有一个共同点:闸门。既然这些协作类,它们有很多工作都是类似的,所以如果提取出一个工具类,那么就可以直接用。对于ReentrantLock和Semaphore的实现而言,就可以屏蔽很多细节,只关注自己的业务逻辑就可以了。1.如果没有AQS就需要每个工具类自己实现:同步状态的原子性管理线程的阻塞与解除阻塞队列的管理2.Semaphore和AQS的关系Semaphore内部有一个Sync类,其继承了AQS。同样的,CountDownLatch

2020-06-13 14:45:34 131

原创 控制并发流程

一、概览二、CountDownLatch1.作用倒数结束之前,一直处于等待状态。直到倒数结束,此线程才继续工作。2.方法CountDownLatch(int count)构造函数,参数count为需要倒数的值。awiait()调用这个方法的线程会被挂起,直到count为0才继续执行。countDown()调用一次这个方法,会将count减1。3.代码示例假设这样一个场景:一件产品需要五个人都质检完成后才能进行下一轮。public class countDownDemo {

2020-06-12 14:19:15 249

原创 并发容器类

一、并发容器概览ConcurrentHashMap: 线程安全的HashMapCopyOnWriteArrayList:线程安全的ArrayListBlockingQueue:是一个接口,表示阻塞队列,非常适合用于作为数据共享的通道。ConcurrentLinkedQueue:高效的非阻塞并发队列,使用链表实现。可看作一个线程安全的LinkedList。ConcurrentSkipListMap:是一个Map,使用跳表的数据结构进行快速查找。二、ConcurrentHashMap1.Map简介

2020-06-10 21:55:38 253

原创 final关键字和不变性

一、什么是不变性如果对象在被创建后,状态就不能被修改,那么它就是不可变的。具有不变性的对象一定是线程安全的,我们不需要对其采取任何额外的安全措施,也能保证线程安全。二、final1.修饰方法修饰方法表示这个方法不可以被重写不能修饰构造方法引申:static修饰的也不能重写2.修饰类表示不可被继承String就是final的3.修饰对象表示对象的引用不可变,而对象本身的属性可以变化。...

2020-06-02 16:04:03 214

原创 CAS

一、什么是CASCAS即Compare And Swap。CAS主要用在并发领域,用来实现不可被打断的数据交换操作。CAS有三个操作数:内存值V、预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才将内存值修改为B,否则什么都不做。最后返回现在的V值。使用代码模拟:public class SimulatedCAS{ private volatile int value; //使用synchronized来保证原子性 public synchronized int

2020-06-01 15:57:20 105

原创 Atomic包

一、原子类一个操作是不可中断的,即便多线程情况下也可以保证;java.util.concurrent.atomic包中的类都是具有原子性的;原子类相比于锁的优势:粒度更细,变量级别通常效率更高,高度竞争下效率降低二、6类原子类三、Atomic基本类型原子类AtomicInteger就是对Integer的封装,利用CAS实现。常用方法public final int get()获取当前的值public final int getAndSet(int newValue)获取

2020-05-31 16:51:55 174

原创 IPv6(邻居发现)

邻居发现Neighbor Discovery一、邻居发现的功能是一系列消息和过程的集合,代替了IPv4中的 ARP、ICMPv4用于节点时:地址解析、确定邻居节点链路地址有没有改变、判断邻居节点是否可达用于主机时:发现邻居路由器、发现地址前缀和其他配置参数用于路由器:用于通告消息、通知主机下一跳的最佳地址三个主要功能组:Host-Router Discovery FunctionsHost-Host Communication FunctionsRedirect Function

2020-05-31 10:46:21 2477

原创 WirelessLAN 无线局域网

一、概述1.Wireless network(1)无线广域网 WWANSGSM,GPRS,CDMA,3G,4G,5G。卫星网络(Satelite Networks):Iridium(2)无线城域网 WMANS城市范围内,几十公里WiMAX :802.16多跳WiFi(3)无线局域网 WLANSWiFi:802.11(4)无线个域网 WPAN蓝牙2.用处作为有线网络的扩充楼栋之间Nomadic Access 游牧接入。 个人设备Ad Hoc networking 自组织

2020-05-25 21:00:40 1076

原创 ICMPv6

一、概述ICMPv6向源节点报告关于目的地址传输IPv6包的错误和信息,具有差错报告、网络诊断、邻节点发现和多播实现等功能。提供三个框架:多播侦听(Multicast Listener DIscovery)邻居发现移动IPICMPv6消息类型错误消息Error messages(Type最高位是0,即0-127)通告消息Informationl messages(128-255)二、结构...

2020-05-24 16:08:25 324

原创 IPv6头部

一、IPv6数据包的结构IPv6报文 分为三个部分:头部、扩展头、上层协议数据单元。IPv4报文:头部、上层协议数据单元IPv6头部始终存在,大小固定40字节。扩展头可能有0个或多个,且长度不固定。二、IPv6头部1.结构2.域Payload Length负载长度:最长65535字节,包含扩展头和上层协议PDU。Next Header:三、IPv6扩展头排序:Hop-by-Hop Options header逐跳选项头Destination Options head

2020-05-23 17:37:51 2550

空空如也

空空如也

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

TA关注的人

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