C语言
Golang
Java面试题
操作系统
Java
JavaScript
Redis面试题
MySQL面试题
Nginx面试题
Linux面试题
MongoDB面试题
架构
微服务面试题
Git
TCP IP协议面试题
SpringCloud
C++面试题
开发工具
HTTP协议面试题
C语言生成随机数
C语言如何生成随机数,问题描述,在C 语言 中,如何生成一个随机数?
C语言生成随机数都一样
C语言生成随机数都一样,问题描述,在 C 语言 中,在一个 循环 中,连续生成 随机数,结果生成的随机数都一样,该如何在循环中,生成不一样的随机数?
Goland快捷键
Goland快捷键,Goland快捷键教程,Golang 的开发工具 Goland 的快捷键我们大体可以分为五大类,即:文件相关快捷键、代码格式化快捷键、查找和定位快捷键、代码编辑快捷键和界面切换快捷键。
Golang pprof
Golang pprof教程,在计算机性能调试领域里,profiling 就是对应用的画像,这里画像就是应用使用 CPU 和内存的情况。
Go Mod包管理教程
Go Mod包管理教程,随着 go 1.11 的发布,go 官方引入了 go module 来解决依赖管理问题,go module 被集成到原生的 go cmd 中。
Golang如何求平方根
Golang如何求平方根,问题描述,在 Go 语言 中,如何求一个 数字 的平方根。
Golang获取当前时间
Golang获取当前时间,问题描述,在 Golang 中,如何获取当前时间的 UNIX 时间戳。
Golang获取当前字符串时间
Golang获取当前字符串时间,问题描述,在 Golang 中,如何获取当前时间的 字符串 表示形式。
Golang判断元素在切片中
Golang判断元素在切片中,问题描述,在 Golang 中,如何判断一个元素是否在某个 切片 或者 数组 中,有现成的方法吗?
Go语言适合做什么
Go语言适合做什么,Go语言适合做什么教程,Go 语言 主要适合做服务器编程、分布式系统、数据库代理器、中间件、网络编程、数据库操作以及开发云平台等。
Go语言入门
Go语言入门教程,Go 不仅拥有 C 语言的简洁和性能,而且还很好的提供了 21 世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。
Golang获取字符串md5
Golang获取字符串md5,问题描述,在 Go 语言 中,如何计算 字符串 的 MD5 值。
Golang计算文件md5
Golang计算文件md5,问题描述,在 Go 语言 中,如何计算文件的 MD5 值。
Golang defer详解
Golang defer详解,Golang defer详解教程,Go 语言 中的 defer 语句用于延迟函数的调用,每次 defer 都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。
Golang defer案例
Golang defer案例讲解,Golang 中的 defer 可以帮助我们处理容易忽略的问题,如资源释放、连接关闭等。
Golang panic recover详解
Golang panic recover详解,recover() 用于将 panic 的信息捕捉。recover 必须定义在 panic 之前的 defer 语句中。在这种情况下,当 panic 被触发时,该 goroutine 不会简单的终止,而是会执行在它之前定义的 defer 语句。
Golang goroutine
Golang goroutine教程,在 Golang 中,我们也可以将 goroutine 称为协程,当一个程序启动的时候,只有一个 goroutine 来调用 main 函数,称它为主 goroutine,新的 goroutine 通过 go 语句进行创建。
Golang goroutine调度原理
Golang goroutine调度原理,goroutine简介,goroutine 是 go 语言 中最为 NB 的设计,也是其魅力所在,goroutine 的本质是协程,是实现并行计算的核心。
Golang channel使用
Golang channel使用,Golang channel使用教程,在 golang 中 channel 用于 goroutine 之间的通信,channel 是引用类型,需要使用 make 来创建 channel。在 Golang 中,用通信来共享内存,而不要用共享内存来通信。
Golang缓冲与无缓冲channel
Golang缓冲与无缓冲channel教程,golang 在语言层面支持并发编程,也就是 goroutine,可以看做一种轻量级的线程。程序启动时,其主函数即在一个单独的 goruntine 中运行,叫做 main goruntine。
Golang select使用
Golang select使用,Golang select详解,golang 中的 select 就是用来监听和 channel 有关的 IO 操作,当 IO 操作发生时,触发相应的动作。
Golang time after
Golang time after,Golang time after使用,在 golang 中,谁也无法保证某些情况下的 select 是否会永久阻塞。很多时候都需要设置一下 select 的超时时间,可以借助 time 包的 After() 实现。
Golang time tick
Golang time tick使用,After(d) 是只等待一次 d 的时长,并在这次等待结束后将当前时间发送到通道。Tick(d) 则是间隔地多次等待,每次等待 d 时长,并在每次间隔结束的时候将当前时间发送到通道。
Golang context使用
Golang Context使用,Golang Context使用教程,context 在 Go1.7 之后就进入标准库中了。它主要的用处如果用一句话来说,是在于控制 goroutine 的生命周期。
Golang Context使用案例
Golang Context使用案例,在 go 服务器中,对于每个请求的 request 都是在单独的 goroutine 中进行的,处理一个 request 也可能涉及多个 goroutine 之间的交互。
Golang Context案例
Golang Context案例,Golang Context案例,Golang 中的 Context 使用包括 WithCancel、WithDeadline、WithTimeout 和 WithValue。
Java容器面试题
Java面试题,题目,Java 容器有哪些?哪些是同步容器,哪些是并发容器?
Java垃圾回收面试题
Java面试题,题目,为什么 Java 要采用垃圾回收机制,而不采用 c/c++ 的显式内存管理?
Java线程生命周期面试题
Java面试题,题目,一个 线程 的生命周期有哪几种状态?他们是怎么样扭转的?
线程池的工作原理
Java面试题,题目,请讲一下线程池的创建方法,并介绍里面几个参数的作用,并讲讲你对里面的队列的了解。
死锁活锁饥饿锁
Java面试题,题目,请分别介绍一下 Java 的死锁,活锁和饥饿锁。
Java内存模型
Java面试题,题目,讲一讲 Jvm 内存模型。
Java对象头
Java面试题,题目,谈谈对象头的内存布局的理解,并谈谈你对 java 锁升级的了解
Jvm垃圾回收算法
Java面试题,题目,jvm 有哪些垃圾回收算法,聊聊他们的优缺点
Jvm的垃圾收集器
Java面试题,题目,聊聊 Jvm 的垃圾收集器
NIO 和 BIO 的区别
IO面试题,题目,讲讲 NIO 和 BIO 的区别
一致性hash原理
Java面试题,题目,谈谈你对一致性 hash 的了解。讲讲他的原理和实践。
Redis面试题
Redis面试题,题目,redis 性能比较好的原因。
Redis分布式锁实现方案
Redis面试题,题目,项目中有用到 redis 的分布式锁吗?是怎么实现的?
Redis面试题
Redis面试题,题目redis 在分布式锁中,如果线程 1 获取锁成功,还没有写到从数据库的时候,主数据库挂掉,线程 2 这个时候来获取锁,这个时候可以获取成功,用什么样的方式可以解决。
Redis面试题
Redis面试题,题目,Redis 的优势是什么?
Redis面试题
Redis面试题,题目,讲一讲 redis 的持久化机制,并讲讲他们的劣势和优势
Redis面试题
Redis面试题,题目,对 redis 这边的管道(Pipeline)了解吗?可以简单聊聊吗?
Redis面试题
Redis面试题,题目,Redis 过期键的删除策略是什么?
Redis的回收策略
Redis面试题,题目,Redis 的回收策略 (淘汰策略)是什么?
Redis的数据同步机制
Redis面试题,题目,redis 的同步机制了解吗?可以聊聊吗?
Redis事务的了解
Redis面试题,题目,请你讲讲对 redis 事务的了解。
Zookeeper分布式锁
Zookeeper面试题,题目,我们平时所说的 CAP 理论,请讲讲,zookeeper 满足了哪两个?讲讲 zookeeper 锁是怎么实现的?如果实现方式是所有的节点都监控一个临时节点,会产生 "惊群效应"。怎么解决的。
Zab协议
Zookeeper面试题,题目,请给我们讲一下 ZAB 协议。
Zookeeper面试题
Zookeeper面试题,题目,zookeeper 四种类型的数据节点。
Zookeeper保证顺序一致性
Zookeeper面试题,题目,zookeeper 是如何保证事务的顺序一致性的?
单点登录
Java面试题,题目,讲一讲单点登录原理。
HashMap和ConcurrentHashMap
Java面试题,题目,你了解 HashMap 吗?请讲讲 hashMap 的数据结构。ConcurrentHashMap 呢?
Java面试题
Java面试题,题目,讲讲你对 AQS 的理解
Java 内存屏障
Java面试题,题目,你对内存屏障了解吗?描述一下他们。
Mysql优化
Java面试题,题目,Mysql 查询优化怎么处理,你在平时工作中如果遇到需要优化的会怎么做?
kafka名词解释
Java面试题,题目,说说你对 kafka 的了解。讲讲里面的 producter,customer,partition 等词的含义。
redis主从复制
Java面试题,题目,redis 主从复制是怎么操作的?
mysql有哪些锁
Java面试题,题目,Mysql 有哪些锁?
spring生命周期
Java面试题,题目,请讲讲你对 spring 对象管理的生命周期的理解。
spring循环依赖
Java面试题,题目,Spring 循环依赖是什么样的场景,怎么解决循环依赖?为什么是三级缓存而不是二级缓存?
spring mvc生命周期
Java面试题,题目,Spring MVC 生命周期了解吗?讲一讲。
spring事务传播属性
Java面试题,题目,spring 事务的传播属性有哪些?
java面试题kafka消息追踪机制
Java面试题,题目,讲讲 kafka 维护消息状态跟踪的方法。
讲一讲kafka的主从同步机制
Java面试题,题目,讲一讲 kafka 的主从同步机制,讲一讲它的高可用机制。
kafka消费者活锁
Java面试题,题目,消费者故障,出现活锁问题如何解决?
kafka顺序一致性问题
Java面试题,题目,kafka 分布式的情况下,怎么保证消息的顺序消费?
mybatis符号替换
Java面试题,题目,Mybatis #{} 和 ${} 的区别是什么?
java面试题mybatis缓存
Java面试题,题目,讲一讲 Mybatis 的一级、二级缓存。
mybatis插件运行原理
Java面试题,题目,简述 Mybatis 的插件运行原理,以及如何编写一个插件。
redis 缓存雪崩穿透
Java面试题,题目,对缓存雪崩,穿透了解吗?讲讲其出现的场景和解决方案。
mysql binlog
Java面试题,题目,Mysql binlog 有哪些格式,这些格式有哪些特点?
三次握手和四次挥手
Java面试题,题目,对 tcp 了解吗?讲讲它的三次握手和四次挥手?为什么需要三次握手,为什么需要四次挥手。
spring mvc 父子容器
Java面试题,题目,spring mvc 中父子容器了解吗?讲一讲父子容器。
分布式事务
Java面试题,题目,对分布式事务有了解吗?讲讲分布式事务的实现方式。
mysql索引失效场景
Java面试题,题目,Mysql Innerdb 索引失效场景。
kafka消失丢失场景
Java面试题,题目,kafka 在什么样的场景下消息会丢失?
虚拟内存
虚拟内存,虚拟内存教程,第一层理解,每个进程都有自己独立的 4G 内存空间,各个进程的内存空间具有类似的结构。
孤儿进程
孤儿进程,孤儿进程教程,如果父进程先退出,子进程还没退出那么子进程将被托孤给 init 进程,这时子进程的父进程就是 init 进程(1 号进程)。
僵尸进程
僵尸进程,僵尸进程教程,如果一个进程已经终止了,但是其父进程还没有获取其状态,那么这个进程就称之为僵尸进程。
守护进程
守护进程,守护进程教程,守护进程就是在后台运行,不与任何终端关联的进程。
Linux进程状态
Linux进程状态教程,Linux 是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。
Linux系统负载教程
Linux系统负载教程,Linux 的系统负载,也就是 System Load 是指系统 CPU 繁忙程度的度量,即有多少进程在等待被 CPU 调度。
Linux buffer cache与swap
Linux缓存机制介绍,在 Linux 系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时。
Java是什么
Java 具有简单性、面向对象、分布性、编译和解释性、稳健性、安全性、可移植性、高性能、多线程性和动态性等特点。
Java教程
在学习 Java 教程时,我们主要需要了解面向对象、数据类型、运算符、流程控制、数组、方法、异常、包和访问权限、线程、泛型、IO、Java集合、枚举和反射等技术。
Dubbo入门案例
Dubbo入门教程,Apache Dubbo 是一款高性能的 Java RPC 框架,可以和 Spring 框架无缝集成。本案例运用了 Zookeeper 作为注册中心,使用 Spring 整合 Dubbo 框架,搭建了一个简易的 SOA 架构项目。
MyBatis逆向工程
MyBatis逆向工程教程,本案例运用了 MyBatis 逆向工程的技术,生成了实体类、Dao 接口、实体类映射文件,并演示了简单的增删改查以及条件查询等操作。
七牛云上传图片
七牛云上传图片,七牛云上传图片实现,描述,运用 Java 代码实现从本地上传图片到七牛云,并通过七牛云提供的临时域名访问图片。
JavaScript是什么
JavaScript是什么总结,JavaScript 简称 “JS”,是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。
Redis过期策略及实现原理
Redis过期策略及实现原理,描述,我们在使用 Redis 时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当我们设置了过期时间,Redis 是如何判断是否过期,以及根据什么策略来进行删除的。
Redis 16个数据库
Redis 16个数据库,在实际项目中 Redis 常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好 Redis 服务器后很多朋友应该会发现和有这样的疑问,为什么 Redis 默认建立了 16 个数据库。
Redis内存淘汰机制
Redis内存淘汰机制,描述,Redis 的用途非常广泛。作为一个高性能的内存数据库,它经常被用于缓存的业务场景。所谓缓存,即在第一次获取到数据的时候,把它暂存在内存中。
Redis数据持久化RDB与AOF
Redis数据持久化RDB与AOF,Redis 作为一个内存数据库,数据是以内存为载体存储的,那么一旦 Redis 服务器进程退出,服务器中的数据也会消失。为了解决这个问题,Redis 提供了持久化机制。
缓存穿透击穿与雪崩
缓存穿透击穿与雪崩,缓存穿透,概念,缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到数据库,从而压垮数据库。
布隆过滤器
布隆过滤器,布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。
Redis pipeline
Redis pipeline,什么是Redis pipeline,Redis 中的 Pipeline 指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可。
Redis脚本
Redis脚本,Redis为什么引入Lua,Redis 是高性能的 key-value 内存数据库,在部分场景下,是对关系数据库的良好补充。某些特定领域,需要扩充若干指令原子性执行时,仅使用原生命令便无法完成。
Redis事务
Redis事务,什么是Redis事务,Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。
Redis面试题Redis bitmap
Redis bitmap,什么是Redis bitmap,Redis 的 bitmap 是通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。
Redis HyperLoglog
什么是HyperLoglog,HyperLoglog 是 Redis 新支持的两种类型中的另外一种(还有一种是位图类型 Bitmaps),主要适用场景是海量数据的计算。特点是速度快,占用空间小。
Redis为什么这么快
Redis有多快,Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言 编写,官方提供的数据是可以达到 100000+ 的 QPS(每秒内查询次数)。
Redis变慢定位
Redis变慢定位,Redis 作为内存数据库,拥有非常高的性能,但我们在使用 Redis 时,经常时不时会出现访问延迟很大的情况,如果你不知道 Redis 的内部实现原理,在排查问题时就会一头雾水。
Redis主从模式
什么是Redis主从模式,一个 Redis 实例作为主机,其余的作为备份机。主机和备份机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取。
Redis哨兵模式
什么是Redis哨兵模式,Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息。
Redis集群cluster
什么是Redis cluster,Redis cluster 是 Redis 官方提供的分布式解决方案,在 3.0 版本后推出的,有效地解决了 Redis 分布式的需求,当一个 Redis 节点挂了可以快速的切换到另一个节点。
Redis集群Twemproxy与Codis
Redis常见集群技术,长期以来,Redis 本身仅支持单实例,内存一般最多 10~20GB。这无法支撑大型线上业务系统的需求。而且也造成资源的利用率过低——毕竟现在服务器内存动辄 100~200GB。
查看Redis内存使用
查看Redis内存使用,查看Redis内存使用,在 Redis 使用过程中,如果我们需要查看 Redis 的内存使用情况,我们可以使用 INFO 命令,具体命令如下:
Redis内存碎片
Redis内存碎片,查看Redis内存碎片率,在 Redis 使用过程中,经常会产生内存碎片,如果我们需要查看 Redis 的内存碎片率,我们可以使用 INFO 命令,具体命令如下:
Redis线程模型
Redis线程模型,Redis事件,不是讲线程模型吗?和事件有什么关系?实际上 Redis 是一个事件驱动程序,大白话理解一下:就是通过事件的方式来运行 Redis 的。
Redis分布式锁
Redis分布式锁,分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。
Redis底层数据结构
Redis底层数据结构,Redis 的五大数据类型也称五大数据对象,即分别为 string、 list、 hash、 set 和 zset,但 Redis 并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统 redisObject。
Redis跳跃表
什么是跳跃表,Redis 中的跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
Redis整数集合
Redis整数集合,Redis 中的整数集合(intset)并不是一个基础的数据结构,而是 Redis 自己设计的一种存储结构,是集合键的底层实现之一。
Redis压缩列表
Redis压缩列表,Redis 中的压缩列表不是基础数据结构,而是 Redis 自己设计的一种数据存储结构。它有点儿类似数组,通过一片连续的内存空间,来存储数据。
Hash算法
Hash算法,什么是Hash,Hash 也称散列、哈希,对应的英文都是 Hash。基本原理就是把任意长度的输入,通过 Hash 算法变成固定长度的输出。
一致性Hash
一致性Hash,什么是一致性Hash,一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和 CARP 十分类似。
Redis面试题
Redis面试题,redis简介,Redis 默认有 16 个数据库,使用select命令切换,库之间数据不共享。
Mysql内连接外连接
Mysql内连接与外连接,Mysql 查询可以分为内连接与外连接,同时,外连接也可以分为左外连接、右外连接与全外连接。
数据库三大范式
数据库三大范式,设计关系数据库时,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
MySQL权限控制
MySQL权限控制,对 MySQL 的权限的控制可以大致分为三个层面,即连接层面、数据库层面以及数据表层面,具体解释如下:1. 连接层面,即连接上允不允许(是否能登录到 MySQL 服务器)。
MySQL事务ACID
MySQL事务ACID事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个 sql 语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL 支持事务。
MySQL事务隔离级别
MySQL事务隔离级别,MySQL 的事务隔离级别可以分为四个等级,即:READ UNCOMMITTED(读未提交数据)、READ COMMITTED(读已提交数据)、REPEATABLE READ(可重复读)和 SERIALIZABLE(串行化)。
MySQL MVVC
MySQL MVVC,什么是MySQL MVCC,MVCC 就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。
MySQL binlog
MySQL binlog,什么是MySQL binlog,MySQL 的 binlog 是记录所有数据库表结构变更(例如 CREATE、ALTER TABLE)以及表数据修改(INSERT、UPDATE、DELETE)的二进制日志。
MySQL锁
MySQL锁,锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。
MySQL索引
MySQL索引,概述,用来加快查询的技术很多,其中最重要的是索引。通常索引能够快速提高查询速度。
MySQL索引原理
MySQL索引原理,概述,索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。
Mysql explain使用
MySQL explain使用,概述,MySQL 中的 explain 命令显示了 mysql 如何使用索引来处理 select 语句以及连接表。explain 显示的信息可以帮助选择更好的索引和写出更优化的查询语句。
MySQL索引优化与SQL优化
MySQL索引优化与SQL优化,概述,日常在 CURD 的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和 SQL 的编写,那如何让你编写的SQL语句性能更优呢?
Mysql聚簇索引
MySQL聚簇索引,什么是聚簇索引与非聚簇索引,聚簇索引是将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。非聚簇索引是指将数据与索引分开存储。
平衡二叉树B树和B+树
平衡二叉树B树和B+树,平衡二叉树,概念,平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构。
Mysql死锁解决
Mysql死锁解决,什么是死锁,所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
Mysql慢查询日志
Mysql慢查询日志,什么是MySQL慢查询日志,MySQL的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过 long_query_time 值的 SQL
innodb引擎四大特性
innodb引擎四大特性,innodb引擎四大特性,innodb 的引擎四大特性为:插入缓冲,二次写,自适应哈希和预读。
MySQL各引擎之间区别
MySQL各引擎之间区别,InnoDB,InnoDB 是 MySQL 默认的事务型引擎,也是最重要、最广泛的存储引擎。它的设计是用来处理大量短期事务,短期事务大部分是正常提交的,很少回滚。
MySQL innodb与myisam引擎区别
MySQL InnoDB与MyISAM引擎区别,MyISAM引擎,MyISAM 是 MySQL 的默认数据库引擎(5.5 版之前),由早期的 ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。
MySQL Select for update
MySQL Select for update,for update 是一种行级锁,又叫排它锁。一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行。
MySQL乐观锁与悲观锁
MySQL悲观锁与乐观锁,什么是悲观锁,悲观锁的特点是先获取锁,再进行业务操作,即 “悲观” 的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。
MySQL触发器
MySQL触发器,什么是触发器,触发器(trigger)是 MySQL 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程。
MySQL存储过程
MySQL存储过程,什么是存储过程,存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译。
MySQL视图
MySQL视图,什么是视图,视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据。
MySQL查询缓存
MySQL查询缓存,MySQL 缓存机制就是缓存 sql 文本及缓存结果,用 KV 形式保存再服务器内存中,如果运行相同的 sql,服务器直接从缓存中去获取结果,不需要在再去解析、优化、执行 sql。
MySQL面试题
MySQL面试题,SQL优化,SQL优化的几种方法,1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
Nginx优缺点
Nginx优缺点,Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务,也是一个 IMAP/POP3/SMTP 服务。
Nginx与Apache对比
Nginx与Apache对比,Nginx与Apache区别,优点,1. 轻量级,采用 C 语言 进行编写,同样的 web 服务,会占用更少的内存及资源。
Nginx与Apache选择
Nginx与Apache选择,Apache,apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache,apache 发展到现在,模块超多,基本想到的都可以找到
Nginx使用场景
Nginx使用场景,Nginx常用使用场景,Nginx 的常用使用场景包括 HTTP 服务器、静态服务器、反向代理、负载均衡、动静分离、统一访问入口、解决浏览器跨域问题和行为分析等。
正向代理与反向代理
正向代理与反向代理,什么是代理,代理其实就是一个中介,A 和 B 本来可以直连,中间插入一个 C,C 就是中介。刚开始的时候,代理多数是帮助内网 client 访问外网 server 用的。
反向代理好处
Nginx反向代理的好处,1. 保护了真实的 web 服务器,web 服务器对外不可见,外网只能看到反向代理服务器,而反向代理服务器上并没有真实数据,因此,保证了 web 服务器的资源安全。
Nginx有哪些特点
Nginx有哪些特点,Nginx的特点,热部署,我个人觉得这个很不错。在 master 管理进程与 worker 工作进程的分离设计,使得 Nginx 具有热部署的功能,那么在 7×24 小时不间断服务的前提下
Nginx master与worker进程
Nginx master与worker进程,工作模式,1. Nginx 启动后,会产生一个 master 主进程,主进程执行一系列的工作后会产生一个或者多个工作进程 worker。
Nginx IO模型
Nginx IO模型,Nginx 支持多种并发模型,并发模型的具体实现根据系统平台而有所不同。在支持多种并发模型的平台上,Nginx 自动选择最高效的模型。
Nginx多进程
Nginx多进程,Nginx 是通过基于异步及非阻塞的事件驱动模型和多进程机制实现高性能的。
Nginx惊群
Nginx惊群,惊群效应是什么,惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程
Nginx处理HTTP请求过程
Nginx处理HTTP请求过程,Nginx 处理 HTTP 请求的过程大概可以分为 11 个阶段,如下:1. Read Request Headers:解析请求头。2. Identify Configuration Block:识别由哪一个 location 进行处理,匹配 URL。
Nginx是如何实现高并发的
Nginx是如何实现高并发的,如果一个 server 采用一个进程(或者线程)负责一个 request 的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。
Nginx动静分离
Nginx动静分离,静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。
Nginx开启gzip压缩
Nginx gzip配,ginx gzip配置教程,ginx 开启 Gzip 压缩功能, 可以使网站的 css、js 、xml、html 文件在传输时进行压缩,提高访问速度, 进而优化 Nginx 性能。
Nginx动态添加模块
Nginx动态添加模块,很多时候,我们根据当时的项目情况和业务需求安装完 Nginx 后,后续随着业务的发展,往往会给安装好的 Nginx 添加其他的功能模块。
Nginx解决跨域问题
Nginx解决跨域问题,什么是跨域,跨域是前端开发中经常会遇到的问题,前端调用后台服务时,通常会遇到 No 'Access-Control-Allow-Origin' header is present on the requested resource 的错误,这是因为浏览器的同源策略拒绝了我们的请求。
Nginx 502错误原因和解决方法
Nginx 502错误原因和解决方法,不管你是做运维还是做开发,哪怕你是游客,时不时会遇到 502 Bad Gateway 或 504 Gateway Time-out。出现这页面,把服务重启下,再实在不行重启下服务器。
Nginx负载均衡
Nginx负载均衡,什么是Nginx负载均衡,在服务器集群中,Nginx 起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。
Nginx rewrite全局变量
Nginx rewrite全局变量,Nginx rewrite 常用的全局变量如下:
Nginx限制浏览器和爬虫
Nginx限制浏览器和爬虫,Nginx限制爬虫,修改 nginx.conf,禁止网络爬虫的 ua,返回 403,具体配置如下。
Nginx限制IP访问
Nginx限制IP访问,有时候我们需要针对屏蔽某些恶意的 IP 访问我们的网站,或者限制仅仅某些白名单 IP 才能访问我们的网站。这时候我们就可以在 Nginx 中通过简单的配置来达到目的。
Nginx限制IP访问频率
Nginx限制IP访问频率,限制所有单个ip的访问频率,http中的配置。
C10K问题
C10K问题,什么是C10K问题,所谓 c10k 问题,指的是服务器如何支持 10k 个并发连接,也就是 concurrent 10000 connection(这也是 c10k 这个名字的由来)。
漏桶算法和令牌桶算法
漏桶算法和令牌桶算法,背景,每一个对外提供的 API 接口都是需要做流量控制的,不然会导致系统直接崩溃。
Linux启动过程
Linux启动过程详解,第一步:开机自检,加载 BIOS,第二步:读取 MBR,第三步:Boot Loader grub 引导菜单,第四步:加载 kernel 内核,第五步:init 进程依据 inittab 文件夹来设定运行级别
Linux进程状态
Linux进程状态教程,Linux 是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。
Linux系统负载
Linux系统负载教程,Linux 的系统负载,也就是 System Load 是指系统 CPU 繁忙程度的度量,即有多少进程在等待被 CPU 调度。
Linux buffer cache与swap
Linux缓存机制介绍,在 Linux 系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件
Linux文件处理sed命令详解
Linux文件处理sed命令详解教程,Linux 中的 sed 是一种流编编器,用来对文本进行过滤与替换操作,同时,sed 命令能够完美的配合正则表达式使用。
Linux文件处理awk命令详解
Linux文件处理awk命令详解教程,Linux 中的 awk 是一个强大的文本分析工具,简单来说 awk 就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。
Linux网络IO模型
Linux网络IO模型,Linux 的五种 IO 模型,分别是:阻塞 IO、非阻塞 IO、多路复用 IO、信号驱动 IO 以及异步 IO。其中阻塞 IO、非阻塞 IO、多路复用 IO、信号驱动 IO 都属于同步 IO。
select poll与epoll
select poll与epoll,在操作系统中,程序运行的空间分为内核空间和用户空间,用户空间所有对 io 操作的代码(如文件的读写、socket 的收发等)都会通过系统调用进入内核空间完成实际的操作。
inode节点
inode节点,操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如 Linux 操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在 inode 和 block 中。
零拷贝技术
零拷贝技术,磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等。
MongoDB oplog
什么是MongoDB oplog,MongoDB 的 Replication 是通过一个日志来存储写操作的,这个日志就叫做 oplog。在默认情况下,oplog 分配的是 5% 的空闲磁盘空间。
MongoDB索引
MongoDB索引,什么是索引,索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。本质上目录是将书中一小部分内容信息(比如题目)和内容的位置信息(页码)共同构成。
MongoDB查询分析explain
MongoDB查询分析explain,explain 是 MongoDB 的一个重要的查询诊断工具,这个函数能够提供大量的查询相关的信息,该函数会返回查询计划、执行状态、服务器信息。
MongoDB查询与索引优化
MongoDB查询与索引优化,MongoDB 是高性能数据,但是在使用的过程中,大家偶尔还会碰到一些性能问题。MongoDB 和其它关系型数据库相比,例如 SQL Server 、MySQL、 Oracle 相比来说,相对较新。
MongoDB慢查询日志
MongoDB慢查询日志,类似于 MySQL 的 slow log, mongodb 可以监控所有慢的以及不慢的查询。这个工具就是 Profiling,该工具在运行的实例上收集有关 MongoDB 的写操作。
MongoDB监控工具mongostat
MongoDB监控工具mongostat,mongostat 是 mongodb 自带的状态检测工具,在命令行下使用,会间隔固定时间获取 mongodb 的当前运行状态,并输出。
IO密集型与CPU密集型
计算机结构回顾,首先回顾下计算机结构知识,如下图,运算器与控制器又被称为中央处理器,即 CPU(Center Process Unit)。存储器又可分为内存与外存。
雪花算法
全局ID生成教程,我们要生成全局唯一 ID,比较通用的算法有雪花算法、自增 ID 方案和 GUID 方案。
进程线程与协程
进程线程与协程区别,进程详解,定义,进程的出现是为了更好的利用 CPU 资源使到并发成为可能。
并发与并行
并行,并行就是指同一时刻有两个或两个以上的 “工作单位” 在同时执行,从硬件的角度上来看就是同一时刻有两条或两条以上的指令处于执行阶段。
多线程与多进程
进程详解,定义,进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
什么是0Day漏洞
什么是0Day漏洞,0day 漏洞是指负责应用程序的程序员或供应商所未知的软件缺陷。因为该漏洞未知,所以没有可用的补丁程序。
XSS攻击
什么是XSS攻击,Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行
CSRF攻击
什么是CSRF攻击,CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。
什么是防盗链
什么是盗链,盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。
正向代理与反向代理
什么是代理,代理其实就是一个中介,A 和 B 本来可以直连,中间插入一个 C,C 就是中介。刚开始的时候,代理多数是帮助内网 client 访问外网 server 用的。
DDoS攻击
DDoS攻击教程,DDoS 攻击,全称是 Distributed Denial of Service,翻译成中文就是分布式拒绝服务。一般来说是指攻击者利用 “肉鸡” 对目标网站在较短的时间内发起大量请求。
CC攻击
什么是CC攻击,CC(ChallengeCollapsar,挑战黑洞)攻击是 DDoS 攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求。
CGI
什么是CGI,CGI 是通用网关接口(Common Gateway Interface)的缩写。它主要用于服务器端动态输出客户端的请求(如 HTML 页面/二进制文件),也就是说客户端请求参数不同。
FastCGI
什么是FastCGI,FastCGI 是语言无关的、可伸缩架构的 CGI 开放扩展,其主要行为是将 CGI 解释器进程保持在内存中并因此获得较高的性能。
微服务特点
微服务特点,简单地说,微服务架构是一种以一些微服务来替代开发单个的大而全的应用的方法,每一个小服务都运行在自己的进程里,并以轻量级的机制。
微服务设计原则
微服务设计原则,微服务架构演进过程,在生活中时刻感受互联网好处的同时,在工作中可能感受的却是来自自互联网的一些压力,那就是我们传统企业的 IT 建设也是迫切需要转型。
微服务优缺点
微服务优缺点,微服务是用一组小服务构建的一个应用,服务运行在不同的进程中,服务之间通过轻量的通讯机制进行交互,并且服务可以通过自动化部署方式独立部署。
SOA架构与微服务架构区别
什么是SOA,SOA(Service Oriented Architecture)面向服务架构,它可以通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。
微服务最佳实践
设计微服务的最佳实践,微服务极大的改变了服务端引擎的架构方式。微服务不是一个单一的巨型的用来托管应用程序所有业务逻辑的代码库,而是反映了分布式系统模型。
微服务间通信
微服务间通信,许多架构师已经将微服务之间的通信划分为同步和异步两种模式。让我们一个一个来介绍。
使用微服务面临的挑战
使用微服务面临的挑战,使用微服务面临的挑战主要包括:固有的复杂性、分区的数据库架构和波及多个服务。
分布式与微服务区别
分布式与微服务区别,概念,集群是个物理形态,分布式是个工作方式。1. 分布式:一个业务分拆多个子业务,部署在不同的服务器上。 2. 集群:同一个业务,部署在多个服务器上。
接口幂等性
接口幂等性,什么是幂等性,幂等(Idempotent)是一个数学与计算机学的概念,常见于抽象代数中。
分布式事务
分布式事务,数据库事务,在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。
分布式CAP和BASE理论
分布式CAP和BASE理论,问题的提出,在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。
双因素身份认证
双因素身份认证,如您所知,现代世界已经进入数字时代,与此同时,我们看到了网络犯罪和在线欺诈的增加。
微服务pact契约测试
微服务集成测试,迁移到微服务对测试我们的系统产生了新的挑战。理论上每个微服务都应该是隔离的并可以独立操作。但在实践中一个服务如果没有其他部分通常没什么用。
康威定律
康威定律,康威定律是马尔文·康威 1967 提出的:“设计系统的架构受制于产生这些设计的组织的沟通结构。” 通俗的来讲:产品必然是其(人员)组织沟通结构的缩影。
什么是CICD
传统的应用发布模式,如果你经历体验过传统的应用发布,你可能就会觉得 CICD 有足够吸引你的地方,反之亦然。
JWT(JSON Web Token)
JWT(JSON Web Token),JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。
什么是DevOps
什么是DevOps,DevOps(Development 和 Operations 组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
Ribbon负载均衡
服务器端负载均衡,负载均衡是我们处理高并发、缓解网络压力和进行服务器扩容的重要手段之一,但是一般情况下我们所说的负载均衡通常都是指服务器端负载均衡。
服务熔断降级限流
服务熔断降级限流,当 Service A 调用 Service B,失败多次达到一定阀值,Service A 不会再去调 Service B,而会去执行本地的降级方法!对于这么一套机制:在 Spring cloud 中结合 Hystrix,将其称为熔断降级!
微服务限流
微服务限流,在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。
Service Mesh
Service Mesh,Service Mesh 又译作 “服务网格”,作为服务间通信的基础设施层。服务网格(Service Mesh)是处理服务间通信的基础设施层。
Istio
什么是Istio?官方对 Istio 的介绍浓缩成了一句话:翻译过来,就是 ”连接、安全加固、控制和观察服务的开放平台“。
Git与其他版本控制比较
git与其他版本管理工具区别,CVS 及 SVN 都是集中式的版本控制系统,而 Git 是分布式版本控制系统。
Git配置用户名密码
Git配置用户名密码,因为 Git 是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和 Email 地址。
Git版本库创建
Git版本库的创建,版本库又名仓库,英文名 repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除。
Git回退上一个版本
Git回退上一个版本,首先,Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD 表示当前版本,也就是最新的提交。
Git工作区和暂存区
Git工作区和暂存区,工作区(Working Directory) 就是你在电脑里能看到的目录。而版本库(Repository),工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
Git撤销修改
Git撤销修改,为什么 Git 比其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,而非文件。git 撤销修改分为丢弃工作区的修改和丢弃暂存区修改。
git-rm
Git删除文件,在 Git 中,删除也是一个修改操作。一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用 rm 命令删了:rm test.txt
Git远程仓库
Git远程仓库,添加远程仓库,把当前工作区添加到远程 git 服务器: git remote add origin git@github.com:haicoder/learngit.git
一文搞定Git
一文搞定Git,分布式版本控制系统,分布式版本控制系统 Git 客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。
Git分支
Git分支,Git分支详解,几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
Git工具
服务器上的Git, Git支持的协议,本地传输,SSH 协议,Git 协议,HTTP 协议
Git分支管理
Git分支管理,其他版本控制系统如 SVN 等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
Git标签管理
Git标签管理,Git 有 commit,为什么还要引入 tag?Git 的每次提交的 cimmit id 是一串很长的乱七八糟的数字和字母组合,根本不好找。
Git忽略文件
Git忽略文件,在 Git 中,要忽略特殊文件需要进行如下操作:1. 在 Git 工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件。
Git显示颜色
Git显示颜色,如果我们要让 Git 显示颜色,我们可以使用 git config 命令,加上 color 参数即可:$ git config --global color.ui true
Git配置别名
Git配置别名,在 Git 中,配置别名可以更方便我们的操作,常用的别名操作如下:$ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
Git中的origin和master
Git中的origin和master,首先要明确一点,对 Git 的操作是围绕 3 个大的步骤来展开的 : 1. 从 git 拉取数据(git clone) 2. 改动代码 3. 将改动传回 git(git push)
Git pull使用
Git pull使用,git pull 命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。git pull 命令的完整格式:git pull <远程主机名> <远程分支名>:<本地分支名>
Git push使用
Git push使用,Git Push语法,git push <远程主机名> <本地分支名>:<远程分支名>
Git fetch使用
git fetch使用,一旦远程主机的版本库有了更新(Git 术语叫做 commit),需要将这些更新取回本地,这时就要用到 git fetch 命令。
Git rebase使用
Git rebase使用,git rebase 用于把一个分支的修改合并到当前分支。
Git回滚单个文件
Git回滚文件,git回滚单个文件到指定版本,在使用 git 的过程中,我们要回滚某个文件到指定版本,可以按照如下操作。首先,查看提交记录:
Git帮助
Git帮助,Git 帮助相关的命令有三个,即 --help,help 和 man 命令,具体如下:git config --help,git help config,man git-sonfig。
Git config
Git config,Git config详解,Git 配置有三个级别,按照优先级为:本地配置、全局配置和系统配置。本地配置的命令为:git config --local
Git四种对象
Git四种对象,Git 使用 40 个 16 进制字符的 SHA-1 Hash 来唯一标识对象,Git 中有四种对象,分别为 blob、tree、commit 和 tag。
Git仓库
Git仓库,Git仓库,在 Git 中,初始化一个仓库的命令如下:git init
Git分支使用
Git分支使用,我们首先,使用如下命令常见一个仓库:git init git_checkout_merge
Git log
Git log,在 Git 中,我们要查看提交的日志,可以使用 git log 命令。
Git回退修改
Git回退修改,在 git 中,回退修改,可以使用 git reset 命令、git checkout 命令以及 git revert 命令。
Git重写提交记录
Git重写提交记录,在 Git 中,我们要重写或者修改提交的历史记录,可以使用 amend 命令,如下: git commit --amend touch "aaaa" >> master.txt git add master.txt git commit -m "confit rebase" git rebase master
SSH搭建Git服务器
SSH搭建Git服务器,我们可以使用 SSH 搭建 Git 服务器,具体操作如下: 1. 服务器和客户端分别安装git 2. 服务器上安装 ssh 服务 3. 在客户机上安装 ssh 客户端
Git远程协作
Git远程协作,Github,github 是一个代码托管的服务提供商,也是一个巨大的开源社区。他可以为个人或者企业提供代码托管,也可以在上面找到很多的开源项目的代码。
Git上传代码到Github
Git上传代码到Github,我们新建了一个 Git 工程,需要将其上传到 github,按照如下操作步骤:1. 创建工作空间: mkdir workspace,cd workspace
Git自动补齐
Git自动补齐,如果我们在使用 git 的过程中,git 不能够自动补齐,我们可以按照如下配置,设置自动补齐:1. 克隆仓库: git clone https://github.com/git/git.git
git checkout revert与reset
git checkout revert与reset,git checkout,git checkout 使用于撤销未提交的修改,命令如下:$ git checkout file-name
git的钩子脚本
Git钩子脚本,Git 可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为 Client 端的钩子和 Server 端的钩子。Client 端钩子被 operation 触发,比如 commit,merge 等,Server 端钩子被网络动作触发,比如 pushed commits。
Git在线学习网站
Git在线学习网站,Try Git,地址https://try.github.io/levels/1/challenges/1
Git历史记录查询
Git历史记录查询1. 查询提交记录:git log2. 查看提交记录并显示文件改变:
Git常用操作
Git常用操作,Git 常用操作包括 git 帮助相关命令、git config 命令、git 起别名、git 重命名、git ignore、git 分支、git 历史以及撤销修改等。
Git推送免密码
Git推送免密码,在使用Git 中,默认使用 push 时,是需要密码的,我们可以按照如下设置,使 git 推送免密码:
IP数据包格式
IP数据报,在 TCP/IP 协议中,使用 IP 协议传输数据的包被称为 IP 数据包,每个数据包都包含 IP 协议规定的内容。IP 协议规定的这些内容被称为 IP 数据报文(IP Datagram)或者 IP 数据报。
TCP数据包格式
源端口和目的端口字段,TCP 源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。TCP 目的端口(Destination Port):目标计算机的应用程序端口号,占 16 位。
UDP报文格式
UDP报文格式,UDP 报文的具体格式为:源端口( 2 字节) + 目的端口( 2 字节) + 长度( 2 字节) + 检验和( 2 字节) + 数据。
TCP协议的特点
TCP协议特点,什么是TCP协议,传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC793 定义。
UDP协议特点
UDP协议特点,UDP 协议全称是用户数据报协议,在网络中它与 TCP 协议一样用于处理数据包,是一种无连接的协议。在 OSI 模型中,在第四层——传输层,处于 IP 协议的上一层。
TCP与UDP协议对比
TCP与UDP协议对比,TCP/UDP概述,UDP 是一个简单的面向数据报的传输层协议:进程的每个输出操作都正好产生一个 UDP 数据报,并组装成一份待发送的 IP 数据报。
网络分层模型
网络分层模型,网络分层模型主要有两大类,一种是偏学术性的:OSI 七层网络模型;一种是偏应用性的:TCP/IP 网络模型,其又分为 四层模型 和五层模型。
OSI七层模型
OSI七层模型,什么是OSI,OSI(Open System Interconnect),即开放式系统互联。 一般都叫 OSI 参考模型,是 ISO(国际标准化组织)组织在 1985 年研究的网络互连模型。
TCP IP协议TCP IP四层模型
TCP/IP四层模型,TCP/IP 四层模型包括网络接口层、网络层、传输层和应用层。数据链路层包括操作系统中的设备驱动程序、计算机中对应的网络接口卡。
TCP三次握手与四次挥手
TCP三次握手与四次挥手,TCP概述,TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字。
什么是SYN洪水攻击
什么是SYN洪水攻击,SYN 洪水(半开连接攻击)是一种拒绝服务 (DDoS) 攻击,旨在耗尽可用服务器资源,致使服务器无法传输合法流量。通过重复发送初始连接请求 (SYN) 数据包
TCP TIME_WAIT和CLOSE_WAIT状态
TCP TIME_WAIT和CLOSE_WAIT状态,相信很多运维工程师遇到过这样一个情形:用户反馈网站访问巨慢,网络延迟等问题,然后就迫切地登录服务器
DNS域名解析过程
DNS基本概念,就是所谓的 “.”,其实我们的网址 `www.baidu.com` 在配置当中应该是 `www.baidu.com`.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。
TCP拥塞控制
TCP拥塞控制,什么是拥塞,我们都知道计算机网络中的资源是有限的。某段时间内网络中对资源的需求超过了网络中的可用部分,而导致网络性能下降的情况就是拥塞。
TCP状态转移
TCP状态转移,TCP 是一个面向连接的传输层协议,因此不论哪一方需要传输数据,都需要在双方之间建立一条传输连接。
IP地址分类
IP地址分类,IP 地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是 IP Address 的缩写。IP 地址是 IP 协议提供的一种统一的地址格式。
TCP滑动窗口
TCP滑动窗口,TCP的优势,从传输数据来讲,TCP/UDP 以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流控的数据传输
TCP粘包拆包即解决方案
TCP粘包拆包即解决方案,TCP 的粘包拆包问题是处于网络比较底层的问题,在数据链路层、网络层以及传输层都有可能发生。我们日常的网络应用开发大都在传输层进行。
TCP滑动窗口与回退N针协议
TCP滑动窗口与回退N针协议,1. 发送端和接收端分别设定发送窗口和接收窗口。
TCP重传机制
TCP重传机制,TCP 实现可靠传输的方式之一,是通过序列号与确认应答。在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。
TCP Nagle算法
TCP Nagle算法,TCP/IP 协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送 ACK 表示确认。
TCP KeepAlive
TCP KeepAlive,TCP Keepalive的起源,TCP 协议中有长连接和短连接之分。短连接环境下,数据交互完毕后,主动释放连接。
TCP MTU与MSS
TCP MTU与MSS,MTU,Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是 IP 层)最大一次传输数据的大小
TCP消息可靠性
TCP可靠性,TCP可靠性传输的工作原理1. 停止等待协议,2. 连续 ARQ 协议
TCP backlog参数
TCP backlog参数,backlog 参数主要用于底层方法 int listen(int sockfd, int backlog), 在解释 backlog 参数之前,我们先了解下 tcp 在内核的请求过程,其实就是 tcp 的三次握手:
TCP最大连接数
TCP最大连接数,tcp概述,服务器如何标识tcp连接,在 TCP 应用中,server 事先在某个固定端口监听,client 主动发起连接,经过三路握手后建立 TCP 连接。
SpringCloud Feign 时间问题
feign 调用,a 系统传参与 b 系统收参不一致。
C++面试题重载隐藏重写
重载隐藏重写(覆盖)在 C++ 中,重载、隐藏、重写(覆盖)的区别是什么?重载1. 同一个类中参数类型,参数个数或参数顺序不同但函数名和返回值相同的函数构成重载。
派生类访问基类
派生类访问基类,在 C++ 中,怎样使用派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量?主要有两种方式,即:使用作用域运算符和使用 using 语句。
C++多态
C++多态,概念,多态性可以简单地概括为 “一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
C++纯虚函数
C++纯虚函数,定义,纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。
虚函数表
虚函数表,C++ 的编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多层继承或是多重继承的情况下)。
虚继承
虚继承,在 C++ 中,多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次。
C++二义性
C++二义性,名字间隔概念,一个名字的间隔就是某个数据的名字从继承层次中首次出现到达最后派生类时中间隔了多少相同的名字。
构造函数虚函数
构造函数为什么不能为虚函数,在 C++ 中,虚函数的调用需要虚函数表指针,而该指针存放在对象的内容空间中;若构造函数声明为虚函数,那么由于对象还未创建。
虚析构
虚析构,C++ 中的虚析构有啥作用?为什么要虚析构,当要使用基类指针或引用调用子类时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。
C++类默认函数
C++类默认函数,创建一个 C++ 类时,默认会创建的函数有哪些?
C++面试题赋值与初始化列表
赋值和初始化列表,在 C++ 中,赋值和初始化列表的区别有哪些?
赋值运算符
赋值运算符,在C++ 中,为什么要重写赋值运算符?为什么需要重写,系统已经提供了默认的拷贝构造函数和赋值运算符,但都是浅拷贝。
C++ const使用
C++ const使用,const使用,C++ 中的 const 使用需要注意,const 对象必须初始化并且默认情况下,cosnt 对象只在文件内有效。const对象必须初始化,因为 const 对象一旦创建,就不能改变了。
C++ static使用
C++ static使用,在 C++ 中,static 的使用主要用于修饰静态全局变量、静态局部变量、静态函数,在面向对象中,static 可以用于修饰静态数据成员和静态成员函数。
C++ explicit
C++ explicit,explicit的使用,在 C++ 中,按默认规定,只用传一个参数的构造函数也定义了一个隐式转换。
C++ mutable
C++ mutable,mutable的使用,mutalbe 的中文意思是“可变的,易变的”,跟 constant(即 C++ 中的 const)是反义词。在 C++ 中,mutable 也是为了突破 const 的限制而设置的。
C++四大强制类型转换
C++四大强制类型转换,四大强制类型转换,为什么使用 C 语言 风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的 C++ 类型的强制转换呢?
C++智能指针
C++智能指针,智能指针,将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),并在析构函数里编写 delete 语句删除指针指向的内存空间。
进程间锁
进程间锁,在 C++ 中,进程间的锁有哪几种类型?
设计模式
设计模式,软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性。
设计模式的六大原则
设计模式的六大原则,开闭原则(Open Close Principle),开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
C++面试题进程与线程
进程与线程,定义,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
C++11特性
C++11特性,C++ 11 的新特性有哪些? 1. auto:auto 不能用来声明函数的返回值。2. Range-based for loops (基于范围的 for 循环)。3. nullptr
select poll与epoll
select poll与epoll,select,poll,epoll 都是 IO 多路复用的机制。I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪)。
C++ bind
bind,C++ 中的 bind 函数的最根本的作用就是可以把一个参数较多的函数给封装成参数较少的函数,因此对于 find_if 函数的问题,我们可以自定义一个含俩个参数的函数。
C++ 14特性
C++ 14特性,C++ 14 中的新特性如下: 1. 返回类型推导。2. 在这次发布中,关键字 auto 的作用扩大了。C++ 语言本身仍然是类型安全的。
C++面试题TCP TIME_WAIT
TCP TIME_WAIT,TCP 中的 ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
VSCode快捷键
VSCode快捷键教程,VSCode 快捷键可以分为窗口面板快捷键、基础编辑快捷键、导航快捷键、搜索和替换快捷键、多光标和选择快捷键、语言编辑快捷键、编辑器管理快捷键。
goland快捷键
goland快捷键,Go 语言 编译器 Goland 的快捷键大体可以分为:文件相关快捷键、代码格式化相关快捷键、查找和定位快捷键和代码编辑快捷键。
VSCode搭建Go语言开发环境
VSCode搭建Go语言开发环境,下载插件,首先,切换目录:cd %GOPATH%\src\github.com\golang
WebStorm快捷键
WebStorm快捷键,在开发过程中,我们使用快捷键可以大大加快开发的速度,下面我们就简单介绍 WebStorm 常用的快捷键。
CMake安装
CMake安装,安装 CMake 之前,首先我们需要下载 CMake,下载地址如下:
GCC安装更新
GCC安装更新,GCC安装,安装 GCC 之前,首先我们需要下载,下载命令如下:wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2下载完之后,我们使用如下命令进行解压:
Centos配置Vim自动提示
Centos配置Vim自动提示,升级VIM,在升级 VIM 之前,我们首先安装 vim 相关的依赖库,具体命令如下:
Vim升级更新
Vim升级更新,我们在 Linux 上,升级更新 vim 到 vim8.0。首先,我们到如下地址下载 vim:http://www.vim.org/download.php
Vim vundle配置
Vim插件Vundle,安装插件,Vim 的插件 Vundle 用于 vim 的代码提示,我们首先使用 git 下载 Vundle 插件,具体命令如下:
linux proxy squid
linux proxy squid,在 Linux 中,使用 squid 作为 proxy server,使不能上网的客户机通过 proxy 实现上网。
Vim常用操作
Vim常用操作,Vim 的常用操作可以分为移动光标、搜索替换、删除文本、复制粘贴、文本插入、多文本编辑、文本选择、保存退出、切分窗口以及设置与其他操作。
Vim vimrc配置
Vim vimrc配置,Vim 的 vimrc 配置,我们直接将 vimrc 拷贝到用户目录并命名为 ~/.vimrc,vimrc 配置如下:```shell set nocompatible set autoread syntax enable syntax on
Vim手册
Vim手册,Vim第一步,显示模式,命令 描述,set showmode 打开显示模式的开关
AutoMake使用
AutoMake使用,Automake 主要是用于 Linux 或者 windows 平台下 makefile 文件的自动生成的工具。Automake 的使用步骤如下:
gdb使用
gdb使用,gdb 的使用是直接输入 gdb 命令即可。gdb命令大全,gdb list命令。
Vim四种模式
Vim四种模式,vim 的四种模式,正常模式,命令模式,插入模式,可视模式。
Shell教程
Shell教程,UID,在 Shell 编程中,$UID 是一个全局变量用于表明当期的用户 ID,如果是 0 表明是 root 用户。
Shell字符串
Shell字符串,Shell字符串操作,Shell 中字符串的常用操作如下:操作说明,${#string},返回 $string 的长度。
Shell test
Shell test,测试表达式,Shell 中的测试表达式使用的是 test。格式一,test 测试表达式
Shell if
Shell if,Shell 中的 if 语句的使用语法如下: if[条件] then 指令 fi 或者: if[条件];then 指令 fi 分号相当于命令换行,上面两种语法等同。
Shell for和while
Shell for和while,While循环,Shell 中 while 循环的语法如下: while do 指令... done
Shell随机数
Shell随机数,Linux 系统产生随机数的五种方法: echo $RANDOM openssl rand -base64 8 date +%s%N head /dev/urandom|cksum cat /prpc/sys/kernel/random/uuid
Shell函数
Shell函数,Shell 中函数的定义语法如下:function 函数名() { 指令... return n }
Shell数组
Shell数组,数组的定义,Shell 中数组的定义有四种方式:方法1,array=( value1 values2 value3 ... )
shell调试
shell调试,Shell 脚本调试的语法为:sh [-nvx] scripts.sh
HTTP请求方法
HTTP请求方法- HTTP 1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。HTTP 1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT。
HTTP GET与POST对比
HTTP GET与POST对比,HTTP 中的 GET 一般用于获取/查询资源信息,也就是从指定的资源请求数据。 而 POST 一般用于向指定的资源提交要被处理的数据,也就是更新资源信息。
HTTP PUT与POST区别
HTTP PUT与POST区别,HTTP 中的 PUT 与 POST 方法的区别在于,PUT 方法是幂等的:调用一次与连续调用多次是等价的(即没有副作用),而连续调用多次 POST 方法可能会有副作用。
HTTP请求与响应报文
HTTP请求与响应报文,HTTP请求报文,HTTP 请求报文由四部分组成,分别是请求行、请求头、空行和请求体,其中空行也是组成部分之一,作用是进行分隔,必不可少。
http-interview-http-resp-header
HTTP请求与响应首部,通用首部,通用首部字段(General Header Fields),也就是请求报文和响应报文两方都会使用的首部:
Http中的Keep-Alive
Http中的Keep-Alive,HTTP 持久连接(HTTP persistent connection,也称作 HTTP keep-alive 或 HTTP connection reuse,翻译过来可以是保持连接或者连接复用)。
HTTPS如何保证安全
HTTPS如何保证安全,什么是HTTPS,HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),是为了保证客户端与服务器之间数据传输的安全。 近两年,Google、Baidu、Facebook 等这样的互联网巨头。
HTTP1.0与HTTP1.1区别
HTTP1.0与HTTP1.1区别,可扩展性,可扩展性的一个重要原则:如果 HTTP 的某个实现接收到了自身未定义的头域,将自动忽略它。
HTTP1与HTTP2区别
HTTP1与HTTP2区别,什么是HTTP 2.0,HTTP/2(超文本传输协议第 2 版,最初命名为 HTTP 2.0),是 HTTP 协议 的的第二个主要版本,使用于万维网。HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新。
完整的HTTP请求过程
完整的HTTP请求过程,当我们在浏览器栏输入一个网址,比如 `www.haicoder.net` 的时候,具体发生了什么呢?这个请求是怎么到达服务器及返回结果的呢?
HTTP与TCP/IP协议关系
HTTP与TCP/IP协议关系,TPC/IP 协议 是传输层协议,主要解决数据如何在网络中传输,而 HTTP 是应用层协议,主要解决如何包装数据。
HTTP优化
HTTP优化,HTTP 的相关优化主要包括持久连接 Keep-Alive、修改时间 Last-Modified 以及 If-Modified-Since、版本标记 ETag 以及 If-None-Match、缓存时间 Expires 以及 Cache-Control 和 gzip 压缩等。
HTTP协议之chunk编码(分块传输编码)
HTTP协议之chunk编码(分块传输编码),分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许 HTTP 由应用服务器发送给客户端应用。