自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ypt

最初的梦想,终会抵达!

  • 博客(78)
  • 资源 (1)
  • 收藏
  • 关注

原创 经典的测试面试题(详细)

1.给你一个网站,如何测试?首先,查找需求说明书,网站设计等相关文档,分析测试需求。制定测试计划、确定测试范围和测试策略,一般可以包括以下几个部分:功能测试、界面测试、性能测试、数据库测试、安全性测试、兼容性测试。设计测试用例:功能测试可以包括但不限于以下几个方面:(1)链接测试,链接是否正确跳转,是否存在空页面或者无效页面,是否有不正确的出错信息的返回;(2)提交功能的测...

2018-09-06 17:27:18 3321

原创 MySQL基础篇(详细)

一、MySQL数据库基础1.什么是数据库?高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)2.目前主流的数据库有哪些?SQL Server:微软产品,.Net程序员的最爱,中大型项目; Oracle:甲骨文产品,Java程序员,大型项目,适合处理复杂的业务逻辑; MySQL:sun公司产品,现在也属于甲骨文,中型和大型项目,并发性好,不适合做复杂的业务; DB2...

2018-09-01 20:41:19 729

原创 测试用例设计——微信发朋友圈(详细)

对于一个待测试的对象,我们通常通过以下几个方面来进行测试:功能测试、可靠性测试、易用性测试、效率、可维护性、可移植性、安全性测试、界面测试等。本文将其分成两个方面来看:(1)站在测试人员的技术测试角度(功能测试、可靠性测试、兼容性、可维护性、效率、可移植性、安全性测试、可维护性)(2)站在用户的角度(功能测试、易用性测试)站在测试人员的技术测试角度:1.功能测试功能测试是软...

2018-08-31 18:04:00 39743 1

原创 如何编写测试用例?(详细分析)

一、概念1.什么是测试用例?为了实施测试而向被测系统提供的一组集合;2.测试用例的作用?检验软件是否满足用户的需求,体现一个测试人员的工作量、展现测试用例的设计思路;3.测试用例包含哪些内容?用例编号、用例名称、测试背景、前置条件、优先级、重要级、测试数据、测试步骤、预期结果、实际结果、备注;4.编写测试用例的流程?需求分析---->提取测试点---->测试用...

2018-08-20 09:25:11 4390

原创 基于Huffman树的文件压缩(详细)

文件压缩开发平台:Visual Studio 2008开发技术:哈夫曼树,堆排序项目流程:(1)统计要压缩的文件中各字符出现的次数,利用数据结构中的小堆来构建Huffman树,每次在堆顶选出两个出现次数较小的字符先进行构建,将它们相加的结果又放进堆里面,直到堆里面的数据被取完,这样字符出现次数多的离Huffman树的根节点就比较近,字符出现次数少的离Huffman树的根节点就比较远...

2018-08-16 16:44:42 8295 7

原创 mini聊天室(Linux下基于UDP实现的群聊系统)

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

2018-08-15 23:34:09 2464 1

原创 软件测试的基本流程(详细)

软件测试的基本流程:需求分析阶段:阅读需求,理解需求,分析需求点,参与需求评审会议。测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围,进度安排,人力物力分配,整体测试策略的制定。编写测试用例:适当的了解设计,搭建测试用例框架,根据需求和设计编写测试用例。测试执行阶段:搭建环境准备数据,执行冒烟测试(预测试)然后进入正式测试(系统测试、回...

2018-08-09 16:56:02 42786

原创 开发模型和测试模型

软件的生命周期软件的生命周期是指:从软件产品的设想开始到软件不再使用而结束的时间。软件的生命周期分为六个阶段:需求分析、计划、设计、编码、测试、运行维护。开发模型1.瀑布模型(Waterfall Model)适用场景:适合需求变化少的项目、是串行的。优点:(1)强调开发的阶段性;(2)强调早期计划及需求调查;(3)强调产品测试。缺点:(1)依赖于早期...

2018-08-08 20:59:25 1110

原创 如何对一个水杯进行测试?(详细)

在面试过程中,如果面试的是有关测试的岗位,那么必然会被问到测试相关的知识,测试一个水杯等问题是经常被问到的,那么今天我们就来讨论一下从哪些方面对一个水杯进行测试?1.功能(1)水倒水杯容量的一半(2)水倒规定的安全线(3)水倒满且流出来(4)水杯容量刻度与其他水杯一致(5)盖子拧紧水倒不出来(6)烫手验证2.性能(1)使用最大次数或时间(2)掉地上不易损坏...

2018-08-08 16:25:43 30274 4

原创 死锁和产生死锁的四个必要条件以及如何避免和预防死锁

什么是死锁如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程就是死锁的。死锁出现的场景(1)多个线程:彼此申请对方资源而导致的死锁。A申请B的资源时,因为资源被占用,A会被挂起等待B释放资源,同时B申请A的资源,因资源被占用B挂起等待A释放资源,而AB都处于挂起状态又无法释放资源,便形成了死锁。(2)单个线程:A有自己的资源,但还要申请新的资源,...

2018-08-08 15:43:38 22709

原创 二叉树的遍历(前序、中序、后序、层序)

1.二叉树基础(1)定义:有且仅有一个根节点,除根节点以外,每个节点只有一个父节点,最多有两个子节点,子节点有左右之分。(2)存储结构:二叉树的存储结构可以采用顺序存储结构,也可以采用链式存储结构,其中链式存储更加灵活。在链式存储中,二叉树的每个节点采用结构体表示,结构体包含三个域:数据域、左指针域、右指针域。2.二叉树遍历“遍历”是二叉树各种操作的基础,二叉树是一种非线性结构...

2018-08-08 15:10:02 573

原创 一次完整的HTTP请求

一次完整的HTTP请求所经历的7个步骤1.建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称为是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TC...

2018-07-30 19:43:19 1072

原创 malloc/free、new/delete的异同

malloc/free、new/delete的异同相同点:都可用于申请动态内存和释放内存,进行动态内存管理。不同点:(1)操作对象不同。malloc 与 free 是 C++/C  语言的标准库函数,new/delete 是 C++ 的操作符。对于非内部数据类的对象而言,只用 malloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执...

2018-07-29 12:06:23 349

原创 static关键字的作用

内存分区1)堆:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表,若程序员不释放,程序结束时由系统释放。2)栈:由编译器自动分配和释放,存放函数的参数值、局部变量的值等,操作方式类似数据结构中的栈。3)全局(静态)存储区:存放全局变量和静态变量,包括DATA段(全局初始化区)和BSS段(全局未初始化区),程序结束后由系统释放。其中,BSS段的特点是在程序执行之前BSS...

2018-07-29 09:29:29 280

原创 排序算法(七大经典排序算法)

排序算法在我们的现实生活中应用非常广泛,我们应该很好的掌握。下面我们将对7种常见算法逐个进行介绍:常见的排序算法:1.插入排序(1)直接插入排序思路分析:思路分析:①在长度为N的数组,将数组中第i  [1~(N-1) ] 个元素,插入到数组 [0~i] 适当的位置上。②在排序的过程中当前元素之前的数组元素已经是有序的了。③在插入的过程中,有序的数组元素,需要向右...

2018-05-26 17:32:14 3393

原创 Linux下查看文件内容的命令和工具

在Linux下如果我们想要查看一个文件里面的内容,除了用编译器将其打开查看之外,Linux还提供了几条命令,可用不用打开文件就能把文件内容输出到显示屏上进行查看。1.catcat命令主要用来查看文件内容,创建文件,合并文件,追加文件等。1.1、查看文件格式:cat 文件名称说明:这条命令会把文件内容全部输出到显示屏上。cat -n 文件名称:查看文件内容,并对每一行进行编号。cat -b 文件名称...

2018-05-26 15:30:09 3489

原创 Linux下的查询命令

1.whichwhich命令是在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。也就是说,使用which命令,就可以看到系统命令是否存在,以及执行的到底是哪一个位置的命令。命令格式:which + 可执行文件名称which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。2.whereiswhereis命令用于程序名的搜索,而且只搜索二进制文件...

2018-05-25 18:54:08 364

原创 Linux下find指令的详解

我们都知道,Linux下一切皆文件,所以对于Linux来说 find 是一条很重要的命令。Linux下面的 find 指令用于在目录结构中搜索文件,并执行指定的操作。它提供了相当多的查找条件,功能比较强大。在不指定查找目录的情况下, find 会对整个系统进行遍历。即使系统中含有网络文件系统,find 命令在该文件系统中同样有效。在运行一个非常消耗资源的 find 命令时,很多然都倾向于把它们放在...

2018-05-25 18:51:04 445

原创 单例模式

什么是单例模式有时候我们会有这样的需求,需要一个类只能有一个对象被实例化,这时我们可以使用单例模式。单例模式通过类本身来管理其唯一实例,在设计这个类的时候,让它只能创建一个实例并提供对此实例的全局访问。因此单例模式有两个基本的条件:(1)确保一个类只有一个实例被创建 (2)提供一个对实例的全局访问指针常见的单例模式的实现常用的单例模式实现方法有两种:饿汉模式和懒汉模式懒汉式单例模式:...

2018-05-25 16:22:57 322

原创 宏的用法与简介

预处理指令例如:#include<stdio.h>    #include<stdlib.h>    #define MAX 100......因为它们是由预处理器解释的,所以称为预处理指令。预处理器读取代码,然后对其进行修改,并把修改过的代码传给编译器,再由编译器编译。在我们上述的例子当中预处理器用库函数stdio.h,stdlib.h的内容替换执行第一二条预处理指令,就...

2018-05-21 20:59:49 339

原创 线程安全与可重入函数的区别与联系

线程安全线程安全是多个线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取结束并且释放了锁,其他线程才可使用,保证了数据的一致性。与之对应的则是线程不安全,对数据的访问不提供保护机制,导致多个线程先后更改数据造成数据的不一致问题,这是一个非常严重的问题。从之前的二元信号量到生产者消费者模型都存在很严重的线程不安全问题,不过那只是线程安全性问题的一...

2018-05-20 11:56:44 3494 2

原创 生产者消费者模型(一)——模拟单线程的互斥与同步

在现实的软件开发过程中,经常会碰到如下情景:某个模块负责产生数据,这些数据由另外一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程和进程等)。产生数据的模块称之为生产者,而处理数据的模块就是消费者。条件变量在正式开始生产者与消费者模型之前,我们应该对条件变量有一个新的认识。条件变量(Condition Variable):它的作用是描述资源的就绪状态,属于线程的一种同步机制。互斥锁用于上...

2018-05-19 13:54:28 1079

原创 Linux信号处理机制(三)——信号捕捉

本文主要针对信号捕捉展开话题,文中可能会提到前两篇博客中的知识点,对此迷惑的可以查看前两篇博客:信号引入、阻塞信号内核是如何捕捉信号的?如果信号的处理动作是用户自定义的函数,在信号递达时就调用这个函数,这称为信号捕捉。由于信号处理函数的代码是在用户空间执行的,处理过程较为复杂,我们画图来进行解释:上图很好的说明了信号捕捉时用户态和内核态的切换(用户处理信号最好的时机是程序从内核态切换至用户态的时候...

2018-05-18 17:57:10 4060 4

原创 Linux信号处理机制(二)——阻塞信号

信号在内核中的表示信号在内核中一般有三种状态:(1)信号递达(Delivery):实际执行信号的处理动作称为信号递达;(2)信号未决(Pending):信号从产生到递达之间的状态;(3)信号阻塞(Block):被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作;注意:阻塞与忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示...

2018-05-16 23:27:28 4830 5

原创 Linux信号处理机制(一)——信号引入

信号在最早的Unix系统中被引入,内核可用信号通知进程系统所发生的事件。在现实生活中,我们每天都在接触信号,下课铃声、红绿灯、闹钟等都是信号。信号的本质操作系统给进程发送信号,本质上是给进程的PCB中写入数据,修改相应的PCB字段,进程在合适的时间去处理所接受的信号。我们模拟...

2018-05-14 17:48:09 6253

原创 指针相关概念详解

说起指针,这是很多人头疼的问题,因为它这几个概念相当混淆,下面我们来分析一下这几个概念:int num = 10;         //假设num的地址是0x0000004Cint *p = NULL;        //假设p的地址是0x0035FA94p = #指针的内容:指针里面存放的是地址指针p里面存放的是num的地址(&num),即指针p里面存放的内容是0x000...

2018-05-07 18:02:14 408

原创 static、extern、volatile作用

static:作用:1.进行内部链接指定(将全局变量或者函数限定为仅在本文件内可用)。          2.改变局部变量的生命周期。          3.改变存储类型使得局部变量由原来的栈上改变为静态区,在整个程序结束才释放。          4.定义一个变量时,加上static前缀,定义的变量默认初始化为0。extern:作用:1.进行外部链接指定(使得全局变量或者函数在其他文件内可以使用...

2018-05-07 17:14:37 435

原创 const在C语言中的用法

用const来修饰变量常量和变量的样子完全一样,只是常量的值不允许被修改。例如:下面这两种声明方式所产生的效果是一样的const int a = 10;int const a = 10;用const来修饰指针int const *p;const int *p;上面的两个声明方式产生的效果是一样的,p都是一个指向整型常量的指针,因为const修饰的是*p,所以我们不能修改p所指向的值,但是我们可...

2018-05-04 18:06:26 370

原创 动态内存简介

为什么要使用动态内存?通常当我们声明一个数组时必须要指定数组的长度,但是数组的长度只有在程序运行的时候才知道,这是因为它所需的内存空间取决于输入数据的类型。这种方法虽然简单,但是它的缺点也是显而易见的,它极大的限制了程序的灵活性和健壮性。这种方式受到了人为的限制,一旦我们输入的数据元素超过了数组长度,它就无法处理这种情况,所以通常我们将数组的长度设置的很大,但是问题又来了,如果数组很大,我们输入的...

2018-05-04 16:30:42 214

原创 多线程编程(二)——互斥锁与死锁问题

二元信号量提供了一种很方便的方法来确保对共享变量的互斥访问,即每个共享变量与一个信号量 s(初始为1)联系起来,然后P(s)和V(s)操作将相应的临界区包围起来。互斥锁是以提供互斥为目的的二元信号量,二者均属于挂起等待锁。互斥锁(针对于线程)互斥锁用于确保同一时间只有一个线程能访问被互斥锁保护的资源(互斥锁是针对于线程的)。锁定互斥量的线程与解锁互斥量的线程必须是同一个线程。互斥锁的引入必须对互斥...

2018-05-02 23:06:39 859

原创 多线程编程(一)——线程的创建、等待、分离、结合与终止

什么是线程?在Linux kernel中是不存在线程的,或者说没有真正意义上的线程,Linux下的线程都是用进程来模拟的,线程的实现就是多个共享数据信息的进程,我们称之为“轻量级进程”。多线程的引入多线程是指操作系统在单个进程内支持多个并发执行路径的能力,线程属于进程的的多个执行流。linux多线程设计包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POS...

2018-04-24 17:12:46 599

原创 进程间通信——信号量(Semaphore)

在Linux中支持System V进程通信的手段有三种:消息队列(Message queue)、信号量(Semaphore)、共享内存(Shared memory)。下面我们阐述一下信号量的进程间通信方式以及工作原理。IPC的一点补充Linux中的内存空间分为系统空间和用户空间。在系统空间中:由于各个线程的地址空间是共享的,即一个线程可以随意访问 kernel 中任意地址,所以无需进程通信机制的保...

2018-04-22 21:21:14 1335

原创 进程间通信——共享内存(Shared Memory)

共享内存是System V版本的最后一个进程间通信方式。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任...

2018-04-16 16:19:17 145262 35

原创 进程间通信——消息队列(Message queue)

在Linux中,IPC消息队列是一个双向通信的全内存设计,即内核保证了读写顺序和数据同步,并且是性能比较好的先进先出的数据结构。消息队列的应用场景:比如异步任务处理,抢占式的数据分发,顺序缓存区等。消息队列的产生原因消息队列其实就是消息传输过程中保存消息的容器,既然有了管道,为什么要出现消息队列呢?理由如下:(1)生命周期:匿名管道和命名管道都是随进程的,意味着管道的生命周期是随进程的退出而退出的...

2018-04-16 10:34:06 2198

原创 进程间通信——管道(匿名与命名)

从物理上分,可以将管道分为同主机的进程之间的通信和不同主机间的进程之间的通信。从通信方式上来分,管道又分为匿名管道和命名管道,下面就匿名管道和命名管道的特性作以阐述。匿名管道(pipe)[含义]:管道是一个进程的数据流到另一个进程的通道,即一个进程的数据的输出作为另一个进程的数据的输入,管道起到桥梁作用。比如:当我们输入:ls -l | cat test 其中的 ls 和 cat 是两个进程, |...

2018-04-13 18:01:57 598

原创 海量数据——TopK问题

TopK问题是一个经典的海量数据处理问题,比如微博热搜每隔10分钟都会更新出排行前10的热门搜索信息,再或者通过大数据找出一个地区最爱吃的水果等,都可以使用TopK问题来解决,其核心思想就是最小堆的引入。TopK问题分析在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常被称为TopK问题。下面我们通过一个简单的例子来说明:假如面试官给你100W个数据,请找出其...

2018-03-27 15:54:31 1822

原创 解决大数据相关问题

在学习生活过程中,我们往往会遇到一些大数据方面的问题,那么遇到这些看似比较简单但数据量又非常庞大的题目时我们又该如何解决问题呢?1.给超过100G大小的log file,log中存放着IP地址,设计算法找到出现次数最多的IP地址?100G的文件中存放着IP地址,我们如何来找到出现次数最多的IP地址呢?普通的遍历方法肯定是不行的,这时候我们便需要解决大数据问题最常规的方法——文件分割。文件分割确实可...

2018-03-26 16:59:29 418

原创 剑指offer——合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。链表的结点定义如下:struct ListNode{ int val; ListNode* next;};例如输入如图所示的链表1和链表2,合并之后为链表3:链表1:链表2:链表3:这是一个经常被各公司采用的面试题。在面试过程中,最容易犯的两个错误是:合并出来的链表要么中间断了,要么并没有做到递增排序程序...

2018-03-24 18:21:40 245

原创 剑指offer——反转链表

题目:定义一个函数,输入链表的头结点,反转该链表并输出反转后链表的头结点,链表结点结构定义如下:struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是...

2018-03-24 17:38:05 157

原创 剑指offer——3/24

1.堆栈溢出一般是什么原因导致的?堆栈溢出一般是循环的递归调用导致的,如果使用大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄漏直到内存耗尽。2.什么是中断?中断时CPU做什么工作?中断是指在计算机执行期间,系统内发生任何非寻常的或者非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或者调度新的进程...

2018-03-24 16:13:45 163

基于Huffman树的文件压缩

基于Huffman树和堆实现对不同类型的文件进行压缩和解压缩。

2018-08-16

空空如也

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

TA关注的人

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