自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(179)
  • 资源 (1)
  • 收藏
  • 关注

原创 WEB协议详解与抓包实战(二)

目录一. HTTP解决了什么问题1. HTTP发展2. 面对的困难3. 评估Web架构的关键属性1. 性能2. 可修改性3. rest架构二. 从五种架构风格推导出HTTP的REST架构2.1五种架构风格1. 数据流风格2. 复制风格3. 分层风格3.1 分层3.2 分层分层总结4. 移动代码风格5. 点对点风格2.2 风格演化三. 使用Chrome的Network面板分析HTTP报文3.1 Chrome整体面板3.2 Network面板3.3 控制器面板3.3 过滤器:按类型3.4 请求列表的排序3.5

2021-07-04 18:57:42 251

原创 WEB协议详解与抓包实战(一)

目录基于ABNF语义定义的HTTP消息格式基于ABNF语义定义的HTTP消息格式我们实际看下HTTP请求格式在macOS下输入telnet www.taohui.pub 80

2021-07-04 17:31:39 330

原创 GIT使用常见场景

一. Git基础1.1 git的三个作用域git config --global user.name ‘your_name’git config --global user.email ‘[email protected]’其中缺省默认代表localgit config --local *local只对某个仓库有作用*git config --global *global对当前用户所有仓库有作用*git config --system *system对系统所有登录的用户有效*

2021-07-02 09:18:10 354 2

原创 数据结构与算法 -- LFU (有空会画一个完整的架构图)

请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除最久未使用的键。「项的使用次数」就是自插入该项以来对其调用 get 和 put 函数的次数之和

2020-09-05 02:41:35 284

原创 腾讯客户端 一面

进程线程区别什么时候用进程 什么时候用线程线程的上下文有什么内存的结构一台计算机发送到另一台计算机数据的过程算法:一万亿int数,找到1千个最大的数腾讯 的ios开发

2020-08-31 17:14:00 193

转载 面试智力题

作者:代码不规范,测试两行泪链接:https://www.nowcoder.com/discuss/262595来源:牛客网WARNING长帖警告WARNINGOK,我已经在牛客网上做了大量的面筋观赏及大脑预演,发现了一种比较小清新的船新题型:智力题其实说是智力题倒不如说是逻辑题,因为本人IQ不高,就只能找找百度答案复盘练练逻辑能力了,下面是常见题目以及变种点赞,收藏,评论,我全都要~目录:1.赛马找最快<腾讯高频>2.砝码称轻重3.药瓶毒白鼠<腾讯>4.绳子两

2020-08-31 00:24:43 479

InnoDB阅读笔记

目录一. MySQL体系结构1.1 MySQL物理架构1.2 MySQL逻辑架构第二章 InnoDB存储引擎2.1 innodb 架构2.2 内存2.4 LRU List、Free List和Flush List2.5 重做日志缓冲2.6 额外的内存池一. MySQL体系结构1.1 MySQL物理架构1.2 MySQL逻辑架构Client :提供连接MySQL服务器功能的常用工具集Server :MySQL实例,真正提供数据存储和数据处理功能的MySQL服务器进程mysqld:MyS

2020-08-25 23:24:25 127

原创 【操作系统】第四章 非连续内存分配

为什么需要非连续内存分配来管理物理内存?现有的管理方法:1、分段 2、分页(其中最重要的是页表的设计与组成)连续内存分配的缺点:分配个一个程序的物理内存是连续的内存利用率较低有外碎片,内碎片的问题非连续分配的优点:一个程序的物理地址空间是非连续的更好的内存利用和管理允许共享代码与数据(共享库等…)支持动态加载和动态链接非连续分配的缺点:如何建立虚拟地址和物理地址之间的转换软件方案:开销较大硬件方案:分段和分页目录4.1非连续内存分配:分段4.1非连续内存分配:分段分段的管

2020-08-25 16:20:13 239

原创 【操作系统】 --死锁

目录一. 死锁产生的条件二. 解决死锁的办法2.1 预防死锁(破坏死锁产生的条件)2.2 避免死锁2.3 死锁检测2.4 死锁解除一. 死锁产生的条件资源互斥。一类资源同一时间只能是给一个进程请求与保持。 进程在获取其他资源被阻塞时,对已经获得的资源保持不放不可剥夺。 进程获得的资源是不可被剥夺抢占的。(打印机等)形成了环路等待。 进程与资源之间形成了环路等待。二. 解决死锁的办法2.1 预防死锁(破坏死锁产生的条件)资源一次性分配只要有一个资源得不到分配,那么不给这个进程分配资源

2020-08-21 16:38:00 147

原创 volatile关键字

volatile 特性保障了线程之间的可见性,这其中可见性的保证是基于CPU的内存屏障指令,被JSR-133抽象为happens-before原则(先行发生原则)阻止编译时和运行时的指令重排,编译时JVM编译器遵循内存屏障的约束,运行时依靠CPU屏障指令来阻止重排。如何保证的可见性?为了保证效率,线程对共享变量的操作都是在工作内存中进行的,不能直接读写主内存的变量。为了提高效率,jvm采用性能较高的工作内存。主内存中存储的是共享变量的本尊,工作内存中存储的是主内存中的副本。另外不同线程之间

2020-08-17 23:27:55 118

原创 【字节跳动】面筋

java基础equals hashcode类加载器hashmap 数据结构数据库acid 一致性是什么隔离级别 rr 如何实现的网络http 状态码 502 504 区别https 流程操作系统死锁条件sqlid student_id class_id求top10的学生数的班级id算法反转m-n的链表 要求一趟完成...

2020-08-10 23:13:30 202

原创 AbstractQueuedSynchronizer

AQS(全称AbstractQueuedSynchronizer)是一个抽象类。被设计利用一个原子int值表示状态的同步器的一个基类。是JDK提供的一个实现FIFO的等待队列的阻塞锁和相关同步器的一个同步框架。Nodestatic final class Node { static final Node SHARED = new Node(); static final Node EXCLUSIVE = null; static final in.

2020-08-10 16:17:22 95

原创 ConcurrentHashMap源码

目录put逻辑初始化桶扩容逻辑put逻辑//onlyIfAbsent 默认传的falsefinal V putVal(K key, V value, boolean onlyIfAbsent) { //如果put的key或者 value 为空那么抛出异常 if (key == null || value == null) throw new NullPointerException(); //得到hash值 int hash = spread(key

2020-07-30 19:54:53 90

原创 线程池 简单总结

newCachedThreadPool:corePoolSize == 0maximumPoolSize == Integer.MAX_VALUEkeepAliveTime == 60Lunit == TimeUnit.SECONDSworkQueue == SynchronousQueue(同步队列)通俗:当有新任务到来,则插入到SynchronousQueue中,由于SynchronousQueue是同步队列,因此会在池中寻找可用线程来执行,若有可以线程则执行,若没有可用线程则创建一个线

2020-07-28 14:02:18 102

原创 【操作系统】第三章 连续内存分配

目录3.1 计算机体系结构及内存分层体系一、计算机系统结构主要包含了三大内容:二、内存的层次机构:cpu要访问的指令和数据所处的位置在什么地方三、操作系统到底要完成的重点事情四、两种不同的空间五、在操作系统中管理内存的不同方法3.2 地址空间与地址生成一、地址空间的定义二、逻辑地址生成三、完成逻辑地址到物理地址的映射过程四、地址的安全监测的过程3.3 连续内存的分配:内存碎片与分区的动态分配一、内存碎片问题二、分区的动态分配3.4 连续内存分配:压缩式与交换式碎片整理一、压缩式(compression)碎片

2020-07-25 00:47:38 221

原创 【操作系统】第二章 启动、中断、异常和系统调用

目录2.1 操作系统的启动2.2 操作系统的终端、异常、和系统调用2.1 操作系统的启动(1)CPU, I/O, 内存通过总线连接。(2)DISK:存放OS;BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。(3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0.(4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否正常)。(5)步骤:-BIOS: 将Bo

2020-07-24 22:47:36 205

原创 【操作系统】第七章 进程与线程

目录进程进程是操作系统对正在运行的程序的一种抽象,一个系统上可以执行多个进程。进程是操作系统资源分配和调度的基本单位。进程拥有虚拟内存的抽象,在32位系统中,每一个进程可以分配4G内存,其中高地址的1G是内核持有,另外的3G是用户空间。...

2020-07-17 11:28:18 202

原创 图解TCP/IP阅读笔记

目录一. TCP/IP基础知识应用层表示层会话层传输层网络层数据链路层物理层数据发送/接受流程用邮件发送早上好的数据流向接受流程数据链路层IP模块处理TCP模块应用程序的处理二. 数据链路层无线网络PPP 协议一. TCP/IP基础知识应用层HTTP,SMTP(邮件),FTP(文件传输)TLNET,SSH(远程登陆)SNMP 网络管理表示层HTML 属于表示层的内容MIME(邮件格式)MIB(网络管理传输数据)会话层传输层TCP优点:面向有连接的传输层,可以保证两端通信

2020-07-12 10:52:59 407

原创 Go channel源码解读

下面是channel 的源码type hchan struct { qcount uint // total data in the queue 队列中当前数据个数=len(chan) dataqsiz uint // size of the circular queue channel的大小=cap(chan) //如果 qcount 和 dataqsiz 的值相同,则表示缓冲区用完了。 buf unsafe.Pointer // po

2020-07-11 01:25:31 330

原创 头条高频算法题总结(不断更新)

目录25. K 个一组翻转链表3. 无重复字符的最长子串102. 二叉树的层序遍历215. 数组中的第K个最大元素1. 调用系统实现好的api2. 用快速排序 partion方法3. 用堆排序25. K 个一组翻转链表class Solution { public ListNode reverseKGroup(ListNode head, int k) { if(head == null || head.next == null){ return head

2020-07-10 02:59:49 1182

原创 channel与goroutine的常见管理方法

一. 限制开启goroutine数量package mainimport ( "fmt" "sync" "time")var wg = sync.WaitGroup{}func process(data chan int, i int) { defer wg.Done() fmt.Printf("go func: %d, time: %d\n", i, time.Now().Unix()) data <- i}func main() { limitNum :=

2020-07-09 22:59:58 190

原创 数据结构与算法 -- 内存置换算法LRU

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。如果密钥存在,则更新其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。你是否可以在 O(1) 时间复杂度内完成这两种操作

2020-07-08 11:00:23 157

原创 数据结构与算法 -- 树形DP相关题型解题思路

目录一. 找出最大的平衡二叉树二.一. 找出最大的平衡二叉树列出一棵树所有的可能是平衡二叉树的可能性把这些信息简化 成为每一颗树都要返回的公共信息,跟左右子树没关写出递归。先给出递归退出条件,分析此时返回的信息是什么然后直接拿到所有的左右子树的信息开始依据拿到的左右子树信息开始封装自己的信息,然后向上返回。/** * 1. 首先找出可能性 * 2. 简化信息 * 3. 改成递归 */public class 最大平衡二叉树 { public static cla

2020-06-27 23:06:30 139

原创 数据结构与算法 -- Morris遍历算法

目录一. 传统做法与时间复杂度二. morris 时间复杂度 空间复杂度三. 算法流程四. 先序遍历五. 中序遍历六. 后序遍历一. 传统做法与时间复杂度遍历到树底后需要返回其上一个节点去遍历其右子树,所以传统是递归或者自己用个栈模拟递归操作。时间复杂度:O(N),空间复杂度:O(N)二. morris 时间复杂度 空间复杂度时间复杂度O(N) 空间复杂度:O(1)三. 算法流程当前节点记为cur,如果cur无左孩子,则cur向右移动,cur=cur.right如果cur有左孩子,则找到

2020-06-21 22:39:24 183

原创 数据结构与算法 --单调栈

目录一. 单调栈介绍二. 相关例题2.1 最大矩形2.2 柱状图中最大的矩形2.3 保卫方案一. 单调栈介绍是一种 栈, 对于出栈顺序递增叫单调递增栈,递减叫单调递减栈。二. 相关例题2.1 最大矩形leetcode 85. 最大矩形https://leetcode-cn.com/problems/maximal-rectangleclass Solution { public int maximalRectangle(char[][] matrix) { if

2020-06-21 12:09:04 128

原创 Git 常用命令教程

目录提交git add < filename >git commit -m < messgae >git loggit reset git aliasgit reset commitId --hard/soft/mixed分支Git checkout -b < name > < template >git checkout < branchname >git merge < branchname >git push --set-ups

2020-06-08 10:52:52 116

原创 数据结构与算法 -- KMP算法

目录一.背景二. 思路三. 例题一.背景给两个字符串 s1 s2 ,求s2在s1中是否出现过,出现过的话,给出在s1中的第一个索引。二. 思路首先根据s2维护一个前缀后缀表,比如:abbac : [-1, 0, 0, 0, 1]然后在与s1进行比较,比如:miabbabbac 与 abbac首先有两个下标指针分别分i, j;s1[i]与s2[j]进行比较,不一样。判断j能不能跳到自己维护的前缀表里的前缀,此时next[j] =-1 说明此时j就是第一个字符,说明第一个字符都匹配不上,那么i

2020-05-29 11:14:28 159

原创 Go web 基础 --处理请求与响应

目录一. 请求1.1 请求首部1.2 请求主体1.3 go 与html 表单 content-type1.3.1 From字段1.3.2 PostFrom字段1.3.3 MultipartFrom 字段1.3.4 FormValue1.4 总结二. 响应2.1 服务器返回json一. 请求1.1 请求首部func header(w http.ResponseWriter, r *http.request){ h := r.Header h := r.Header["Accept-Encoding"

2020-05-10 23:21:52 240

原创 Go web 基础 -- Restful风格请求

一.Restful风格请求在目前所学内容中每个请求都需要绑定一个HandlerFunc,而在实际项目中会有很多URL,且可能出现满足特定规律的URL,例如: /sxt/it和/sxt/baizhan都是以/sxt/开头.且如果这两个URL里面代码也差不多时,写两个Func就属于代码冗余了.可以使用restful风格把满足特定格式url和功能类似的代码提入到一个func中实现代码复用.二....

2020-05-07 17:40:04 420

原创 Go web基础 -- Cookie常用设置

一.Cookie 简介Cookie就是客户端存储技术.以键值对的形式存在在B/S架构中,服务器端产生Cookie响应给客户端,浏览器接收后把Cookie存在在特定的文件夹中,以后每次请求浏览器会把Cookie内容放入到请求中二.Go语言对Cookie的支持在net/http包下提供了Cookie结构体Name设置Cookie的名称Value 表示Cookie的值Path 有...

2020-05-07 14:38:52 198

原创 Go web 基础 -- 正则验证

一. 正则表达式正则表达式:(Regular Expression)正则表达式就正则字符和普通字符组成字符串的规则正则内容如下单字符: . 任意字符(标志s==true时还包括换行符) [xyz] 字符族 [^xyz] 反向字符族 \d P...

2020-05-07 13:30:16 303

原创 Go web基础 -- ajax与json

一.JSON简介轻量级数据传输格式总体上分为两种:一种是JSONObject(json对象){"key":value,"key":value}一种是JSONArrayP(json数组),包含多个JSONObject[{"key":"value"},{"key":"value"}]key是string类型,value可以是string类型(值被双引号包含),也可...

2020-05-07 12:03:02 355

原创 Go web 基础 -- 文件上传下载

目录一.文件上传一.文件下载简介二.代码一.文件上传文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析HTML表单(form)enctype(Encode Type)属性控制表单在提交数据到服务器时数据的编码类型.enctype=”application/x-www-form-urlencoded” 默认值,表单数据会被编码为名称/值形式enctype=...

2020-05-07 10:38:51 1063

原创 Go web 基础 -- 模版嵌套

一.模版嵌套在实际项目中经常出现页面复用的情况,例如:整个网站的头部信息和底部信息复用可以使用动作{{template “模版名称”}}引用模版引用的模版必须在HTML中定义这个模版{{define "名称"}}html{{end}}执行主模版时也要给主模版一个名称,执行时调用的是ExecuteTemplate()方法{{define "layout"}}<!DO...

2020-05-07 10:11:03 300

原创 Go web 基础 -- 表单Action

一. ActionGo语言官方文档给出action(动作)的列表。"Arguments"和"pipelines"代表数据的执行结果{{/* a comment */}} 注释,执行时会忽略。可以多行。注释不能嵌套,并且必须紧贴分界符始止,就像这里表示的一样。{{pipeline}} pipeline的值的默认文本表示会被拷贝到输出里。{{if pipeline}} T1...

2020-05-07 10:03:57 228

原创 Go web 基础 -- 在模版中调用函数

一.调用方法在模版中调用函数时,如果是无参函数直接调用函数名即可,没有函数的括号例如在go源码中时间变量.Year()在模版中{{时间.Year}}在模版中调用有参函数时参数和函数名称之间有空格,参数和参数之间也是空格给定go文件代码package mainimport ( "net/http" "html/template" "time")func welcome...

2020-05-07 09:53:26 298 1

原创 Go web 基础 -- html模版

一. 向模版传递数据可以在HTML中使用{{}}获取template.Execute()第二个参数传递的值最常用的{{.}}中的".“是指针,指向当前变量,称为"dot”在{{}}可以有的Argument,官方给定如下- go语法的布尔值、字符串、字符、整数、浮点数、虚数、复数,视为无类型字面常数,字符串不能跨行- 关键字nil,代表一个go的无类型的nil值- 字符'.'(句点,...

2020-05-07 01:51:10 252

原创 Go web 基础 -- http请求

第一种方式 – 实现Handle接口package mainimport ( "fmt" "net/http")type myHandle struct {}type myOtherHandle struct {}func (mh *myOtherHandle)ServeHTTP(w http.ResponseWriter, r *http.Request) { f...

2020-05-06 23:24:00 354

原创 Go web 基础 -- 对数据库配置以及增删改查

目录一. 配置mysql驱动包二. 前置操作三. 增加数据操作四. 更新数据操作五. 删除操作六. 查询数据操作6.1 查询一部分数据6.2 查询全部数据一. 配置mysql驱动包新建一个项目叫second_project在项目根目录下执行go mod init second_project 这样我们就能用mod管理包了使用go get github.com/go-sql-driver/...

2020-05-06 18:07:02 270

原创 Go语言基础案列学习 --点对点通信

目录一. 概述一. 概述点对点 就是客户端a 与客户端b通信需要借助一个中间服务器 也就是a像服务器发送信息 服务器再像b转发a发送的信息本次练习需要先注册用户名本次操作没有持久化操作服务器端代码:package mainimport ( "fmt" "net" "strings")type User struct { Username string Othe...

2020-05-06 10:54:05 447

EDF数据查询处理技术综述

看完这个帮助你了解知识图谱的基础-RDF到底是个啥。。。。

2018-12-01

空空如也

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

TA关注的人

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