自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并查集 (以9.3号贝壳的技术笔试 [家族关系] 为例)

这篇文章有参考另一个小姐姐博客,她写的比较详细☞  https://blog.csdn.net/xu1105775448/article/details/82077944 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。并查集是一种树型的数据结构,用于处理一些不...

2018-09-04 10:34:23 524

转载 深入分析Volatile的实现原理

本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改...

2018-08-26 10:46:48 275

原创 初识Shell

运行方式我的test.sh文件#!/bin/bashlspwddate第一种,为当前文件加上可执行权限,作为可执行文件,需要给代码第一行加上 #!/bin/bash$ chmod +x test.sh$ ./test.sh cgdb        Desktop    googletest-release-1.8.0  Pictures   test.sh...

2018-08-26 09:48:13 284

转载 设计模式的六大原则

关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来。  原作者博客链接:http://blog.csdn.net/LoveLion/article/category/738450/7一.单一职责原则  原文链接:http://blog.csdn.net/loveli...

2018-08-25 17:25:02 669

原创 Py-plug-in (HTTP服务器)

HTTP基本框架关于 HTTP 这部分内容请移步之至☞ https://blog.csdn.net/J4Ya_/article/details/80892967主要学习以下几个部分 HTTP 请求的方法 HTTP 报文格式(主要理解 GET 请求和 POST 请求) HTTP 状态码 URL 格式  服务器开发流程(HttpServerStart...

2018-08-13 23:59:34 367

原创 selenium - 浏览器操作

本片博客主要介绍有关于浏览器的操作 浏览器的最大化 设置浏览器的宽、高 操作浏览器的前进后退  浏览器最大化 为了使我们"观看"脚本运行的效果,我们通常会将浏览器调整至全屏模式 API: maxsize_window() from selenium import webdriverimport timebrowser = webd...

2018-08-08 10:08:49 333

原创 selenium - 元素的定位和添加等待

注意: 本文使用的是火狐的webdriver, 要求火狐浏览器必须是 54 一下版本getckodriver也最好不要下载最新的版本1.chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list2.Firefox的驱动geckodriver 下载地址:https://github.com/mozill...

2018-08-08 09:44:17 738

原创 单元测试、集成测试、系统测试、验收测试

本文是按照开发阶段划分测试技术单元测试单元测试是对软件组成单元进行测试,目的是检验软件基本组成单元的正确性,测试对象是软件设计的最小单位 - 模块,又称为模块测试单元测试的实质是代码测代码 测试阶段: 编码后或者编码前(TDD,编码前属于测试驱动开发) 测试对象: 最小模块 测试人员: 白盒测试工程师或开发工程师(这一点很好的体现了代码测代码的实质) ...

2018-08-06 09:33:17 7430 1

原创 cvte面筋(2018秋招提前批)

面试岗位: C/C++后台开发工程师cvte一面(电话面,22分钟)有没有用c++做过什么项目(畅聊) 讲一下项目 序列化和反序列化怎么实现的 ,还问了一下jsoncpp这个库 当前是一个聊天室,如何扩展为多个 传输过程是用什么协议完成的 为什么选择udp udp和tcp的区别 对tcp的滑动窗口的了解 ......

2018-08-05 17:11:46 1811

原创 工厂模式(C++)

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。<依旧来自百度百科>为什么要有工...

2018-07-26 09:35:26 1161

原创 动态规划 - 数字和为sum的方法数

问题描述:给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)第二行为n个正整数A[i](32位整数),以空格隔开。输出描述:输出所求的方案数 示例1...

2018-07-25 17:38:33 4365 3

原创 单例模式(C++)

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。<来自百度百科>简单地说,单例模式表示的含义是某一个类...

2018-07-24 16:27:23 305 1

原创 I/O多路复用 epoll

epoll初识epoll是为了处理大量的句柄而作了改进的poll;它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法 epoll相关系统调用epoll_create -> 创建epoll模型(即内核中的软件资源)// 创建一个epoll句柄int epoll_create(int size); 自Linux2.6....

2018-07-23 14:28:14 282

原创 C++智能指针 shared_ptr + weak_ptr

前面所讲解的scoped_ptr(unique_ptr)对于拷贝构造函数和赋值运算符的重载解决方法是直接防拷贝,禁止使用这两个函数,但是不能避免的在有些场景中,我们不仅需要资源管理即初始化,资源退出即释放,我们还需要对这个对象进行拷贝或者赋值,在这种车场景下,就诞生了shared_ptrshared_ptr原理: 引用计数当p1起始被创建出来以后,引用计数的值为1,当进行了赋值或者...

2018-07-22 23:53:09 1381 2

原创 C++智能指针 unique_ptr (scoped_ptr)

首先提出: scoped_ptr是boost库中对这个只能指着的叫法,unique_ptr是C++11标准库中对这个智能指针的叫法上一篇我们讲解了智能指针中的auto_ptr,但是auto_ptr中还是有很大的缺陷,于是在boost库中,各位民间大佬提出了另外几种智能指针,分别是 scoped_ptr,shared_ptr,还有配合shared_ptr使用的weak_ptr这一片我们讲解一...

2018-07-22 19:05:30 2273

原创 C++智能指针 auto_ptr

RAII(Resource Acquisition Initialization)  资源分配即初始化。定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源正确的初始化和释放。为什么要使用智能指针? 请看如下代码bool doSomething(){    // 如果时间执行失败了就返回false    return ...

2018-07-22 00:29:03 253

原创 软件测试 - 基础篇

软件测试的生命周期需求分析 -> 测试计划 -> 测试设计 、 测试开发 -> 测试执行 -> 测试评估 软件测试 & 软件开发生命周期 需求阶段: 测试人员了解需求,对需求进行分解,得出测试需求 计划阶段: 根据需求编写测试计划/测试方案 编码阶段: 编写测试用例就是对需求的一个测试,验证需求有没有问题 测试阶段: 按...

2018-07-18 09:10:23 286

原创 I/O多路复用 - poll

函数结构int poll(struct pollfd* fds,nfds_t nfds,int timeout);参数: fds : 这是一个poll函数监听的结构列表,每一个元素中,包含以下的内容 (文件描述符、监听的事件集合、返回的事件集合) nfds : 表示fds数组的长度 timeout : 这里是整型,单位就是毫秒, timeout为0,-1,或者其...

2018-07-17 11:44:51 245

原创 I/O多路复用 - select

了解select,首先我们先了解一下这两句话select只负责等(即并不数据搬迁,不处理数据)等待文件描述符的读就绪或者写就绪select函数select系统调用是用来让我们监视多个程序的文件描述符的变化;程序会停在select这里等,知道被监视的文件描述符至少有一个达到了就绪状态;函数原型参数:_nfds : 表示需要监视的最大文件描述符 + 1;__restrict __readfds : 需...

2018-07-16 12:32:18 219

原创 聊一聊系统 (Linux下实现群聊系统)

1.原理  客户端从标准输入读取数据,将数据序列化后发送至网络; 服务器端使用多线程+生产者消费者模型 生产者从网络中读取数据,并将读取到的用户信息添加至用户列表中,将数据放至数据池中; 消费者从数据池读取数据,并广播给所有在用户列表中的用户; 数据经过网络以后,反序列化再次发给客户端,实现群聊功能;  2.所用技术  ...

2018-07-15 16:43:54 1468 1

原创 软件测试 - 概念篇

1.需求1.1 概念满足用户的期望或正式规定文档(合同, 规定, 规范)所具有的条件和权能用户需求: 一般比较简单/粗略;软件需求: 或叫做功能需求,该需求会详细描述开发人员必须实现的软件功能;吃饭的例子:用户需求: 我饿了软件需求: 想吃炒菜米饭,锅包肉,冰淇淋...需求不一定完全正确,需求也需要测试2.Bug2.1 概念当规格说明书是存在的并且是正确的,程序与规格说明书之间的不匹配才是错误;当...

2018-07-13 21:17:19 325

原创 TCP协议如何提高传输效率

本片主要讨论TCP协议在保证可靠传输的前提下,如何提高传输效率;提高性能滑动窗口快重传延迟应答捎带应答滑动窗口如果我么每一次发送一个数据,都要给一个ACK应答,收到ACK应答以后再去发送下一个数据(如下图),那么我们的效率会比较低,大部分的时间都浪费在等待ACK应答上;既然一发一收的效率比较低,那么我们可以一次发送多条数据,这样使等待的时间重叠在一起,那么我们就可以大大的提供性能;窗口的大小是无需...

2018-07-11 18:44:14 7815

原创 TCP协议如何保证可靠传输

本片主要谈论如何保证TCP可靠传输,并在可靠传输的基础上提高效率;可靠性校验和序列号确认应答超时重传连接管理流量控制拥塞控制确认应答(ACK)机制TCP将每个字节的数据进行了编号,即为序列号;1-1000是数据序号,确认序号是收到的数据序号+1;超时重传机制情况1: 数据丢包主机A发送数据给主机B后,可能会因为网络拥堵等原因,数据无法到达主机B;如果主机A在一定时间间隔内没有收到B的应答,A就会重...

2018-07-10 21:59:43 478

原创 TCP协议 - 基础篇

TCP协议TCP全称为"传输控制协议(Transmission Control Protocol)"TCP协议格式注意: TCP协议中如上的内容是在一行的,这里为了便于绘图,才将协议分为了多行!源/目的端口号: 表示数据从哪里来,到哪里去;32位序号/确认序号: 为实现可靠传输;4位TCP报头长度: 表示这个TCP头部有多少个 32位比特位(有多少4字节),所以TCP头部最大长度是 15*4 = ...

2018-07-09 08:32:00 333

原创 UDP协议

UDP协议格式16位UDP长度表示整个数据报(UDP首部+UDP数据)的最大长度;不可靠传输 : 如果校验出错,就直接丢弃;UDP特点无连接 : 知道对端的IP和端口号就直接进行传输,不需要简历连接;不可靠 : 没有确认机制,没有重传机制;如果因为网络故障无法发送到对方,UDP协议层也不会给应用层返回任何的错误信息;面向数据报 : 不能灵活的控制读写数据的次数和数量; 应用层交给UDP多长的报文,...

2018-07-04 10:24:53 178

原创 浅谈 HTTP

URL格式URL即'网址'服务器地址实际上是指ip地址,这里用域名表示,便于记忆http服务器端口号默认80,可以不使用80带层次的文件路径不同,访问服务器上的文件就不同查询字符串 : 都是以键值对的方式存储的, 键和值之间使用等号分隔,每一组键值对之间用 & 分隔片段标识符 : 表示要跳转到本页面的某一部分urlencode和urldencode即 '编码' 和 '解码'我们可以看到,在...

2018-07-03 08:36:53 399

原创 守护进程

认识守护进程守护护进程也称精灵进程(Daemon),是运⾏在后台的⼀种特殊进程。它独⽴于控制终端并且周期性地执⾏某种任务或等待处理某些发⽣的事件。Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和⽤户交互。其它进程都是在⽤户登录或运⾏程序时创建,在运⾏结束或⽤户注销时终⽌,但系统服务进程(守护进程)不受⽤户登录注销的影响,它们⼀直在运⾏着。这种进程有⼀个名称叫守护...

2018-06-30 10:25:22 151

原创 进程间关系

进程组每个进程除了有⼀个进程ID之外,还属于⼀个进程组。进程组是⼀个或多个进程的集合。通常,它们与同⼀作业相关联,可以接收来⾃同⼀终端的各种信号。每个进程组有⼀个唯⼀的进程组ID。每个进程组都可以有⼀个组⻓进程。组⻓进程的标识是,其进程组ID等于其进程ID。组⻓进程可以创建⼀个进程组,创建该组中的进程,然后终⽌。只要在某个进程组中⼀个进程存在,则该进程组就存在,这与其组⻓进程是否终⽌⽆ 关。通过 ...

2018-06-30 10:19:57 113

原创 读者写者模型

读者写者模型锁类型 : 读写锁应用场景 :对于一块公共资源来说,读取的频率比较高,但是写的频率很低.通常而言,在读的过程中,往往伴随着查找的操作,中间消耗着大量的时长,如果给这种代码加锁,就会极大的降低我们的效率.所以在读的时候是不需要加锁的,大家共享公共资源,但是不会修改,那么就不存在数据读错的问题.但是当有人要写这个数据的时候,我们就必须要加锁,为了避免有读者读取到的数据不是当前修改过的数据....

2018-06-28 12:26:17 309

原创 生产者消费者模型

生产者消费者模型生产者 生产者消费者模型锁类型 - 挂起等待锁一种场景这里指上面的仓库,我们可以用栈,链表等数据结构构造. 两个角色生产者 - 负责向上面的仓库中生产资源,仓库已满时,需等待到仓库有空为止.消费者 - 负责消费上面仓库中的资源,仓库为空时,虚等待到生产者向仓库中生产了商品为止.三种关系生产者 & 生产者 -> 互斥消费者 & 消费者 -> 互斥生产者 &...

2018-06-27 17:21:56 155

原创 Linux - 线程同步

条件变量使用互斥锁可以解决线程安全的问题,保证多线程下临界资源数据的正确性.但是仅仅互斥还是会存在一些问题.某个线程获取锁之后, 发现数据没有就绪, 又立刻释放锁.如果这个线程的优先级很高, 那么就可能在释放了锁之后又立刻尝试获取锁, 再立刻释放.依次类推. 这样虽然并没有发生死锁, 但是这个线程空转又占用了锁资源, 导致其他线程很难获取到这个锁.条件变量:当一个线程互斥的访问某个变量时,在某一线...

2018-06-26 15:21:49 166

原创 Linux - 线程互斥

互斥量(mutex)很多变量需要在线程间共享,这个变量就称为共享变量,可以通过共享数据完成线程之间的交互.但是,多个线程并发的操作共享变量就会出现问题.如下模拟实现一个网上购票系统:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>int ticke...

2018-06-24 17:35:58 316

原创 STL - vector的使用

vector结构start指向这块空间的起始位置finish指向有效元素的后一个位置end_of_storage指向这块空间的下一个位置vector的迭代器 vector迭代器的底层其实就是一个原生指针,对迭代器的 ++ 等同于对指针做 ++ 操作,对迭代器的解引用 (*) 等同于对原生指针解引用,取其内容.vector迭代器的操作(图片截取自cplusplus):这里演示begin,end,rb...

2018-06-19 10:55:12 223

原创 C++ - STL

STL概念 STL是C++标准库最重要的组成部分,STL即标准模板库,不仅是一个可复用的组件库,而且是一个包罗算法和数据结构的软件框架。STL的六大组件容器 - 一些数据结构迭代器空间配置器适配器算法仿函数以算法和容器为核心。容器什么是容器容器是用来存放数据的,因为现实中我们考虑到不同的应用场景,所以需要最合适的容器来存放数据。 常见的数据结构:array、list、tree、stack、queu...

2018-06-18 20:49:26 196

原创 Linux - 线程特性举例

这里主要演示线程的以下几个特性线程共享同一地址空间(全局变量,堆,栈)线程退出引起进程退出多线程充分利用多核CPU资源同组线程共用同一地址空间全局变量#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>//1.共享全局区资源int g_count = ...

2018-06-17 17:04:48 168

原创 Linux - 线程控制

内核中并没有线程的概念,只有PCB的概念,所以线程并没有系统调用。但是为了使用户操作线程方便,就有大佬封装了一个POSIX线程库,可以使我们在用户层完成线程的创建销毁、以及其他操作。POSIX线程库使用时需要包含 <pthread.h> 头文件链接这些线程库时,需要加上编译命令 “-lpthread”选项创建线程int pthread_create(pthread_t *thread,...

2018-06-15 21:42:45 218

原创 Linux - 线程基础概念

什么是线程线程是能够运行和调度的最小单位进程实际运作的单位是进程中单一顺序的执行流(例如,一个进程中的main函数,是由线程执行起来的)一个进程可以并发执行多个线程进程和线程进程/任务是资源分配的基本单位线程/轻量级进程(这个叫法只针对于Linux而言,别的OS下不一定是)是资源调度的基本单位我们平常说的pid(getpid() 得到的),其实是这个进程的唯一标识符,也是这个进程中主线程的唯一标识...

2018-06-06 16:28:26 287

原创 Linux - 信号

信号,将内核和进程联系起来,是操作系统内部交互的机制。通过kill -l指令查看所有信号注意,这里没有32,33号信号,也是从这里将信号分为两类,1~31位普通信号,34~64为实时信号信号产生原因 通过键盘按键产生信号ctrl-c:2号信号(SIGINT),终止当前运行进程,注意:ctrl-c 产生的信号只发给前台进程ctrl-\:3号信号(SIGQUIT),终止进程并且产生coredump文件...

2018-06-06 16:18:33 212

原创 进程间通信 - 信号量

信号量信号量实际上是一个计数器,作用是统计临界资源的多少,保护临界资源。信号量本身也是临界资源进程互斥各进程要求共享资源,而有些资源必须互斥使用,因此进程就会竞争这些资源,称为互斥。一次只允许一个进程使用的资源叫做临界资源。互斥资源的的程序段叫做临界区。进程同步多个进程需要相互配合完成一项任务。信号量和P、V原语信号量        同步 :P、V在同一进程中        互斥 :P、V在不同进...

2018-06-04 11:21:30 227

原创 进程间通信 - 共享内存

共享内存                                                                如上图所示,多个进程之间通过自己的页表,映射到物理内存的共享区,现在这些进程都可以对这个共享区域的数据进行操作,且一个进程操作了这块空间的数据,其他的进程也可以“看得到”。和管道/消息队列比起来共享内存的效率是比较高的           管道和消息队列在执行数据...

2018-06-04 09:12:00 184

空空如也

空空如也

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

TA关注的人

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