自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 centos8配置ORM odp环境

http://blog.sina.com.cn/s/blog_8c5b6d0d0102z8kh.html

2021-04-13 13:52:16 122

原创 HTTPS是如何保证安全的?

为什么需要HTTPS?简单的答案就是http不是安全的协议。如何保证HTTP的安全性?机密性对数据保密,只能被可信的人访问,其他人不可见。完整性内容不可被第三者修改身份认证第三方认真机构证明不可否认不能否认发生过的事HTTPS中的S如图:SSL/TLSSSL即安全套接层(Secure Socket Layer),处于OSI模型中的第...

2020-03-20 22:15:43 603

转载 HTTP服务是如何开始的?

HTTP是什么?HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol。HTTP的内容?本章应该掌握的关键字:URI:统一资源标识符 HTML:超文本标记语言,描述超文本文档 HTTP:超文本传输协议,传输超文本http 版本发展以及新添功能http 0.9 只有get方法,纯文本形式,只读,短链接 http 1....

2020-03-16 19:21:56 210

原创 如何"愉快的"填写问卷星

从业务开发,了解http本质。问卷星代刷方法:python+selenium 通过自动化测试工具正常填写,方法低效,容易出现安全检测(本文不讲)。 post请求,模拟包发送,简单快捷,跳过安全检测,缺点:需要对http协议有所了解,对请求包进行分析。开始设计问卷,我将从测试简单的单选,多选,填空上进行请求包分析。选择一款带有右键检查的浏览器,本文采用google浏览器。...

2020-03-13 01:34:23 3712 2

翻译 回溯算法

理解回溯算法小时候,我们在构建迷宫时,往往会之构建一个出口,如何我们去把迷宫和回溯算法理解起来呢? 我们往往采取得方式是一条路走下去,遇到堵塞,我们回到未堵塞得点,然后退回上一次未选过的选项,我们就可以不断试错,走向出口。实际上这就是一种回溯的思路,真正的意思是,在成功之前,我们会一直在错误的路上。实例1 8皇后问题题目意思很简单,一个8*8矩阵,求出8位皇后放在矩阵中,条件是皇后之...

2020-03-04 23:51:48 106

翻译 分治算法

如何理解分治算法分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。递归得操作步骤:分解:将原问题分解成一系列子问题; 解决:递归地求解各个子问题,若子问题足够小,则直接求解; 合并:将子问题的结果合并成原问题。分治...

2020-03-02 22:36:03 95

翻译 贪心算法:如何使用贪心算法

贪心算法:每次取极端值应用:哈夫曼编码,Prim和Kruskal最小生成树算法,还有Dijkstra最短路径算法如何理解贪心法的理解,大概是在有限数量下,对数据的总和有极值点,但是在分步进行的时候,前者的结果不影响后者的选择权。例如:假设我们有一个可以容纳 100kg 物品的背包,可以装各种物品。我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同。为了让背包中所装物...

2020-02-28 22:35:25 449 1

翻译 堆应用

29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?王争2018-11-28 优先级队列 利用堆求TOP K 利用堆求中位数 优先级队列 优先级队列,故明思义,他首先应该是应该是队列,队列的特点是先进先出,而在优先级的队列中,按照优先级顺序进行出队. 例子合并有序小文件 假设我们有...

2020-02-25 22:04:42 153

原创 堆与排序

数据结构与算法之美28 | 堆和堆排序:为什么说堆排序没有快速排序快?王争2018-11-26堆排序是一种原地的,时间复杂度为O(nlogn)的排序算法在美团一面中,问到了堆排序的手写,太久没有看堆排序,所以在这个环节错失良机.堆是一个完全二叉树 堆中每一个节点的值都必须大与其子树的值 父节点的序号,与左右节点之间存在着关系 .parent *2+1=left...

2020-02-24 23:00:00 125

翻译 constexpr:一个常态的世界

初识 constexpr#include <iostream>#include<array>using namespace std;int sqr(int n){ return n*n;}int main(){ int b; cin>>b; int a[b]; const int n=sqr(3);...

2020-02-23 13:59:42 369

翻译 哈希算法:你会如何存储重要数据

什么是哈希算法将任意长度的二进制值映射为固定长度的二进制串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值.hash算法要求:从哈希值不能反向推导出原始数据 (映射是单向的) 输入数据通过算法得到HASH值 散列冲突的概率要小 哈希算法执行效率尽量高效HASH算法的应用 安全加密 唯一标识 数据校验 散列函数...

2020-02-22 22:12:52 1125

翻译 散列表:如何去优化一个可用的散列表

散列表的查询效率并不能笼统地说成O(1),它给散列表函数,装载因子,散列冲突都有关系问题 如果散列函数将所有的数据都散列到同一个槽里,如果我们使用的开链方式,那么效率从O(1)退化到O(n)...

2020-02-21 19:57:58 247

翻译 编译期能做些什么?一个完整的计算世界

编译期计算C++模板,可以实现在编译期间模拟一个完整的图灵机模板元编程的基本概念:它仍然有一些实用的模板代码#include <iostream>using namespace std;template<int n>class factorial{public: static const int value=n*factorial<...

2020-02-20 23:17:31 234

翻译 数据结构与算法之美:散列表

如何实现一个单词拼写检查功能?散列思想散列表的英文叫“Hash Table”,也叫Hash表,Hash表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展。规律:散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列...

2020-02-18 19:47:55 106

翻译 自动类型推断和初始化

auto自动类型推断,就是编译器能够根据表达式的类型,自动决定变量的类型(C++14 还有函数的返回类型)auto并没有改变C++是静态类型语言这一事实,使用auto的变量类型仍然是编译时就确定的。例如for (auto it = v.begin(), end = v.end(); it != end; ++it) { // 循环体}模板类型推导法则受限...

2020-02-17 16:11:05 136

翻译 迭代器和好用的新for循环

什么是迭代器迭代器是一个通用的概念,并不是一个特定的类型,他实际上是一组对类型要求。他的最基本要球就是从一个端点出发,下一步,下一步地到达另一个端点。输入迭代器的要求:对象支持*操作,解引用取得容器内的某个对象 I对象支持++,指向下一个对象。 I对象可以和I或S对象进行相等比较,判断是否遍历到了特定位置C++和begin和end返回的类型I和S必须是相同的,C++17开始,...

2020-02-17 13:35:17 137

翻译 异常:用还是不用,这是个问题

异常机制异常处理并不意味着需要写显示的try和catch。异常安全的代码,可以没有任何try和catch异常安全的概念:异常安全是指当异常发生时,既不会发生资源泄漏,系统也不会处于不一致的状态。内存分配。如果new出错,按照C++,一般会得到异常bad_alloc,对象的构造也就失败,在catch捕捉到这个异常之前,所有栈上对象会全部被析构,资源全部被自动清理。办法 :适当组...

2020-02-15 21:19:17 118

翻译 左值右值->引用折叠->完美转发,究竟在解决什么问题?

移动语义的产生值分左右lvalue: 等号左边的表达式,既有名字又有地址的表达式 变量,函数,数据成员名字 左值引用的表达式 如++x ,x=1 ,cout<<' ' 字符串字面量 int & operator==(const int &lhs); ofstream & ope...

2020-02-14 12:16:31 272

翻译 高性能http服务器:I/O模型与多线程模型

网络编程实战 33讲:I/O模型和多线程模型实现盛延敏main reactor线程是一个acceptor线程,阻塞至event_dospathcer的dispatch方法上。等待事件发生,连接完成,创建tcp_connection以及channel对象 主线程如何判断子线程已经完成初始化并启动,而继续执行? 子线程阻塞在dispatch上,一旦事件发生,查找channel_map,找...

2020-02-13 16:47:48 261

翻译 高性能HTTP服务器:设计和思路

设计需求reactor模型,可以灵活使用ppoll/epoll事件分发机制 主从 reactor模型加线程池模式。将连接和读写分离 http协议内容解析大概可以分为这三块进行实现。主从Reactor模型设计:主反应堆一直在感知连接建立事件,如果有连接成功建立,主反应堆线程通过accept方法获取已链接套芥子,按照一定算法选取一个从反应堆线程,并把链接号的套接字加入到这...

2020-02-12 23:11:57 724

翻译 RAII管理:智能指针的出现

现代C++30讲https://time.geekbang.org/column/article/169263 最早auto_ptr实现智能指针最基本的功能:对超出作用域的对象进行释放,从根本上消除资源泄漏的可能性。auto_ptr 是通过由 new 表达式获得的对象,并在 auto_ptr 自身被销毁时删除该对象的智能指针。它可用于为动态分配的对象提供异常安全、传递动态分配对...

2020-02-10 14:20:16 85

翻译 异步I/O搜索

reactor模式与proactor模式的区别与联系阻塞/非阻塞 VS 同步异步阻塞I/O发起read请求,线程会被挂起,一直等到内核数据准备好,并把数据拷贝到应用程序的缓冲区中,拷贝过程完成,read请求调用才返回。第二种是非阻塞I/O。 非阻塞的read请求在数据未准备好的情况下立即返回,应用程序可以不断轮旬内核,直到数据准备好,内核将数据拷贝到应用程序缓冲,...

2020-02-09 20:44:19 149

翻译 linux利器:epoll的前世今生

非阻塞I/O加上I/O复用,渐渐帮助我们在高性能网络编程这个领域搭建了初步的基石/epoll增添足够的动力.select poll epoll 的区别由图可知 epoll的性能是最好的,也很稳定,变化不大epoll还是一种I/O多路复用技术epollepoll通过监控注册的描述字,来进行I/O事件的分发处理。不同于poll的是,epoll提供 level-tri...

2020-02-08 20:24:45 293

翻译 I/O多路复用遇上线程:使用Poll单线程处理所有I/O事件

fork进程和pthread线程来处理多并发,这两种技术使用简单,但是性能却会随着并发数的上涨而快速下降,并不能满足极端的高并发的需求。更好的方法 I/O事件分发事件驱动设计:GUI,Web事件驱动的好处时占用资源少,效率高,可扩展性强,是支持高性能高并发的不二之选设计的思想时,一个无限循环的事件分发线程在后台运行,一旦用户在界面上产生某种操作一个事件会被产生并放置到事件队列中,这个事...

2020-02-08 20:23:52 212

翻译 epoll源码剖析 上

epoll的性能分析epoll的性能凭什么就要比poll或者select好呢?一个是事件集合: 在每次使用poll或者select之前,都需要准备一个事件集合,传递给内核,进行分析 并在内核空间构建相应的数据结构来完成对事件集合的注册。 epoll则不是这样,epoll维护了一个全局事件集合,通过epoll句柄,可以操纵这个事件的集合,增加,删除或修改这个事件集合...

2020-02-08 20:22:42 74

转载 使用阻塞I/O和线程模型:换一种轻量的方式

线程方式 进程切换上下文的代价时比较高的,轻量级的模型可以处理多用户链接请求,这就是线程模型线程由操作系统内核管理,每个线程都有自己的上下文,包括一个可以唯一标识线程的ID,栈,程序计数器,寄存器等。在同一个进程中,所有的线程共享该进程的整个虚拟地址空间,包括代码,数据,堆,共享库。线程池...

2020-02-07 01:26:17 102

翻译 非阻塞I/O:提升性能的加速器

非阻塞I/O配合I/O多路复用 是高性能网络编程中的常见技术阻塞 VS 非阻塞当应用程序调用阻塞I/O完成某个操作时,应用程序应该被挂起,等待内核完成操作,内核所作的事情是将CPU时间切换成其他有需要的进程,网络应用程序在这种情况下就会得不到CPU时间该做的事情当应用程序调用非阻塞I。O完成某个操作时,内核立即返回,不会把CPU时间切换给其他进程,应用程序返回后,CPU时间继续完成其他...

2020-02-03 14:12:21 159

翻译 poll 另一种多路复用

select方法是多个UNIX平台支持的非常常见的I/O多路复用技术,通过描述符集合来表示检测的I/O对象,通过三个不同的描述符集合来描述检测I/O事件,可读,可写,异常 。 select 的缺点是 所支持的文件描述符的个数是有限的。在Linux系统中,selectd的默认最大值为1024poll函数的原型与内乎交互的数据结构有所变化,也突破了文件描述符的个数限制int poll...

2020-02-02 23:29:29 114

翻译 i/o 多路复用

多路复用的作用是把标准输入,套接字都看作I/O的一路,多路复用的意思,在任何一路有事件发生,通知应用程序去处理相应的I/事件 。int select(int maxfd,fd_set *readset,fd_set *writeset,fd_set *exceptset,timeval *timeout)maxfd待测试的描述符基数,三个描述符集合 读描述集 写 ,异常描述集分别注...

2020-02-01 23:52:37 69

翻译 网络编程实战:检查数据的有效

对端的异常状况可以通过read调用,对EOF的判断,随时防范对方程序崩溃但是 不是每种情况都可以通过读操作来感知异常 比如服务器完全崩溃,或者网络中断的情况下,此时如果阻塞套接字,那么会一直阻塞在read等调用上,没有办法感知套接字异常其实有几种办法来解决这个问题第一个办法是给套接字的read操作设置超时,如果超过了一段时间就认为链接已经不存在,struct timeval ...

2020-01-31 20:18:02 139

翻译 网络编程实战 17 TCP 并不总是可靠的

故障分类通过是否有FIN包进行分类无Fin包很多原因导致网络中断,TCP程序并不能及时感知到异常信息,除非网络的其他设备。如路由器发出一条ICMP报文,说明目的网络或主机不可达,这个时候通过read或write调用就返回Unreachable的错误read设置超时将能检测write将重传多次后标识异常系统崩溃导致无FIN包特殊情况,崩溃后重启系统将返...

2020-01-29 23:59:40 183

翻译 MYSQL如何保证主备一致 笔记

MYSQL实战45讲 --林晓斌背景binlog可以用来归档,也可以用来做主备同步问题如何做到主备一致呢?一个主库,一个备库,主库的根新都会同步过来,然后在本地执行,这样保持主备一致将备库设置为只读状态主要是:将查询语句放在备库执行,设置只读可以防止数据操作防止逻辑有bug,比如切换出现双写...

2020-01-29 14:43:52 169

转载 极客时间 15讲,如何解决地址已经被使用的方法?

联系:Time_wait状态: 作用 1 保证连接的终止,保证对FIN的确认发送到对端如果没有time_wait状态,将返回RST错误,被东方将产生错误 2 为了让旧连接的重复分结在网络中自然消失危害:1 资源占用2 内存资源占用在time_wait时间,即会出现Adress areadyin use 重复占用的状态。解决...

2020-01-18 16:43:13 375

转载 极客网络编程实战14讲 UDP是否可以连接?

UDP是否可连接?udp也是可以用来connecttcp connect 调用引起TCP三次握手。UDP connect调用并不会引起和服务器目标端交互,不会触发所谓的握手和应答。为什么?主要是为了让应用程序能够接受 异步错误的信息。服务器不开启,客户端程序不会报错,会阻塞至recvfrom上connect操作,将UDP套接字建立了"上下文" 该套接字和端口进行绑定,...

2020-01-17 17:55:06 399

原创 leetCode 622 循环队列

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircul...

2018-09-19 23:05:14 714

原创 LeetCode 38 报数

报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作  "one 1"  ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2",  "one 1" ("一

2018-09-01 21:21:14 270

原创 LeetCode 203 删除链表中的节点

删除链表中等于给定值 val 的所有节点。示例:输入: 1-&gt;2-&gt;6-&gt;3-&gt;4-&gt;5-&gt;6, val = 6输出: 1-&gt;2-&gt;3-&gt;4-&gt;5先将其余位置节点为val的值删除,最后删除头结点      class Solution {    public:        ListNode* remove...

2018-08-23 23:09:04 82

原创 leetCode 27. 移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前...

2018-08-23 22:28:51 70

原创 LeetCode 21. 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1-&gt;2-&gt;4, 1-&gt;3-&gt;4输出:1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4 解答 class Solution { public:     ListNode* mergeTwoLists(ListNode* l1, ...

2018-08-22 21:40:15 75

原创 LeetCode 14 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入

2018-08-19 21:03:44 137

空空如也

空空如也

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

TA关注的人

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