自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

@另维

日常练习笔记

  • 博客(121)
  • 收藏
  • 关注

原创 HTTP 的重定向应用场景和常见问题

跳转

2020-08-19 23:06:54 2071

原创 Wireshark 抓包分析 HTTP 请求、响应报文格式

文章目录报文结构HTTP 请求报文的请求行请求方法GET/HEADPOST/PUT其他方法URIURI 的格式URI 的编码HTTP 响应报文的状态行状态码HTTP 请求、响应头部字段HTTP 协议再规范文档里详细定义了报文的格式,规定了组成部分,解析规则,还有处理策略,所以可以在 TCP/IP 层之上实现丰富灵活的功能,例如连接控制、缓存管理、数据编码、内容协商报文结构HTTP 协议是一个”纯文本“的协议,在实际传输的数据前要附加一些头数据,不过头数据都是ASCII码的文本,可以很容易地用肉眼阅读,

2020-08-19 14:29:55 16426 1

原创 Wireshark 抓包分析-使用网址、域名访问 Web 服务器后面发生了什么?

使用 IP 地址访问 Web 服务器首先打开 Wireshark,选择 ”HTTP TCP port(80)“ 过滤器,再鼠标双击 ”Npcap loopback A dapter“,开始抓取本机 127.0.0.1 地址上的网络数据。接着在 Chrome 浏览器地址栏输入”http://127.0.0.1/“,再按下回车键,等欢迎页面显示出来后 Wireshark 就会有铺获的数据包。如下:抓包分析在 Wireshark 里可以看到,一共抓取 11 个包,耗时约 0.65 秒,接着看按下回车后数

2020-08-19 12:05:02 9248

原创 Java 类库提供了几种线程池? 分别有什么特点?

线程池Java语言虽然内置了多线程支持,启动一个新线程非常方便,但是,创建线程需要操作系统资源(线程资源,栈空间等),频繁创建和销毁大量线程需要消耗大量时间如果可以复用一组线程:在没有任务时线程处于空闲状态,当请求到来:线程池给这个请求分配一个空闲的线程,任务完成后回到线程池中等待下次任务(而不是销毁)。这样就实现了线程的重用。为每个请求都开一个新的线程虽然理论上是可以的,但是会有缺点:线程生命周期的开销非常高。每个线程都有自己的生命周期,创建和销毁线程所花费的时间和资源可能比处理客户端的任务

2020-08-16 11:25:09 343

原创 Java程序发生死锁原因?如何定位和避免?

文章目录什么情况下产生死锁死锁的定位方式如何在编程中尽量预防死锁什么情况下产生死锁死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。死锁的定位方式利用 jstack 等工具获取线程栈,然后定位互相之间的依赖关系,进而找到死锁。如果是比较明显的死锁,往往 js

2020-08-15 21:06:54 280

原创 同步机制解决多线程带来的线程安全问题

文章目录线程同步synchronized 对象锁常见的原子性操作同步方法多线程主要是为了提高我们应用程序的使用率。但同时,这会给我们带来很多安全问题!在多线程的环境下,线程是交替执行的,一般他们会使用多个线程执行相同的代码。如果在此相同的代码里边有着共享的变量,或者一些组合操作,我们想要的正确结果就很容易出现了问题线程同步当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行这个时候,有个单线程模型下不存在的

2020-08-15 15:34:10 326

原创 多线程基本概念、生命周期、中断机制等小结

文章目录进程和线程多线程创建线程线程的执行顺序线程的生命周期中断线程守护线程小结进程和线程在计算机中,程序的一次执行获得或者一个任务称为一个进程。好比浏览器就是一个进程,视频播放器是另一个进程某些进程内部还需要同时执行多个子任务。例如,在看视频一遍看着视频一遍发弹幕,查询分集介绍,我们把子任务称为线程进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程操作系统调度的最小任务单位其实不是进程,而是线程。常用的Windows、Linux等操作系统都采用抢占式多任务,如何调度线程完全

2020-08-15 13:30:15 493

原创 怎么理解 TPS、QPS、RT、吞吐量这些性能指标

文章目录理解那些性能指标概念响应时间 RT每秒事务数量 TPS每秒查询数 QPS每秒请求数 QPS吞吐量每秒点击数 HPS每秒 / 每分钟调用次数 CPS/CPM压力工具中的线程数和用户数与 TPS业务模型响应时间如何设置小结两个层面定义性能场景的需求指标:业务指标和技术指标。所有的技术指标都是在有业务场景的前提下制定的,而技术指标和业务指标之间也要有详细的换算过程。常见性能指标:理解那些性能指标概念响应时间 RTResponse Time。可以简单理解为:网络传输(请求)时间+服务器处理(

2020-08-14 01:58:04 3906

原创 理解 LoadRunner,基于此工具进行后端性能测试的详细过程

文章目录LoadRunner 的基本原理LoadRunner 的主要模块Virtual User GeneratorLoadRunner ControllerLoadRunner Analysis如何基于 LoadRunner 性能测试性能需求收集及负载计划制定录制并增强虚拟用户脚本识别被测应用使用的协议录制脚本完善录制得到的脚本验证脚本的正确性创建并定义性能测试场景执行性能测试场景分析测试报告LoadRunner 的基本原理后端性能测试工具通过虚拟用户脚本生成器生成基于协议的虚拟用户脚本,然后根据性能

2020-08-11 01:25:12 483

原创 System.arraycopy()、copyOf()、clone() 方法的简单比较

1、System.arraycopy():此方法源码如下public static native void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);此方法是一个本地方法,方法对应的实现不在当前文件里,而是在其他语言实现的文件的,比如C,C++。越接近本地方法,也就是越低层的效率是最高2、Arrays.copyOf()public static <T,U> T[] copyOf(U[] or

2020-08-09 23:41:34 797

原创 Collection 和 Map 的详细笔记

文章目录Collection 集合提供的功能描述ListArrayListLinkedList功能描述VectorSetQueue/DequeCollection 集合是集合层次结构的根界面,用于传递集合。JDK 不提供此接口的直接实现,而是提供子接口的实现。扩展了我们熟知的三大集合。每种集合的通用逻辑都被抽象到相应的抽象类中。提供的功能描述添加功能删除功能判断功能获取功能长度功能交集功能转换为数组List是有序集合提供了方便的访问、插入、删除等操作ArrayList是应用更

2020-08-09 21:23:20 265

原创 Set 集合的源码分析

Set 接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。不包含重复元素的集合。并且最多一个空元素。继承的层次结构HashSet实现 Cloneable,可以调用 Objec.Clone() 方法实现 Serializable,该类具有序列化功能域信息private transient HashMap<E,Object> map;//定义一个Object对象作为HashMap的valueprivate static final

2020-08-09 20:57:43 286

原创 移动 APP 的测试方法,以及移动专项测试的思路与方法

移动端应用可以细分为三大类:Web App、Native App 和 Hybrid App。以下主要介绍这三类移动应用的测试方法,以及移动专项测试的思路与方法。文章目录三类移动应用的特点三类不同移动应用的测试方法移动应用专项测试的思路和方法交叉事件测试兼容性测试流量测试耗电量测试弱网络测试边界测试总结三类移动应用的特点Web App 指的是移动端的 Web 浏览器,和 pc 端的 Web 浏览器无差,只是依附的操作系统不再是 Windows 或 Linux了,而是 IOS 和 Android。Web

2020-08-05 10:49:57 2284

原创 HashMap 源码分析只读这一篇就够了

HashMap 简介HashMap 是基于 哈希表的 Map 接口实现的,它存储内容是键值对<key,value> 映射。此类不保证映射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作(get 和 put) 提供稳定的性能。数据结构1> HashMap 在 JDK1.8 之前的存储原理...

2020-08-04 16:04:50 162

原创 ArrayList 和 LinkedList增删等操作性能怎么判断?

了解点 Java 集合框架可能听到 ArrayList 底层是数组,增删慢,查找快;LinkedList 底层是双向链表,增删快,查找慢,这样的判断全面吗?那觉知此事要躬行嘛,以下我分别从源码角度和实际测试得结论。添加元素从源码角度1> 在列表尾部添加// ArrayList public boolean add(E e){ ensureCapacityInternal(size+1);//确保内部数组有足够的空间 elementData[size++]=e;//将元素加入到数

2020-08-02 10:31:15 353

原创 LinkedList增删该查操作的源码分析

文章目录LinkedList 数据结构继承结构源码分析类的属性构造方法无参构造带参构造内部类常用方法添加操作remove(Object o)get(index)indexOf(Object o)总结LinkedList 数据结构底层使用双向链表结构,即有一个头结点和尾结点,意味着可以从头开始正向遍历,或者从尾逆向遍历,并且可以直接针对头部和尾部进行操作由于使用链表实现,添加和删除性能好、查询比较低。由于实现了Deque,可以做队列或双端队列,栈,完成相应操作。在执行任何操作的时候都必须先遍历此列表

2020-08-01 22:48:15 258

原创 ArrayList 增删改查等操作的源码分析

ArrayList 的数据结构ArrayList 底层的数据结构就是数组,数组元素类型为 Object 类型,即可以存放所有类型数据。对该类的实例的所有操作底层都是基于数组的。实际大小:size容量:CAPACITY继承结构ArrayList 是直接继承自 AbstractList,为什么不是 List?这里的设计思想:我们知道接口中的方法都是抽象的,而抽象类中可以有抽象方法,还可以有具体的方法。这里是让 AbstractList 实现接口中通用方法,而它具体的子类 ArrayList 可

2020-08-01 16:43:29 658

原创 性能测试七种常用方法,以及四大应用领域

文章目录常用的七种性能测试方法后端性能测试前端性能测试代码级性能测试压力测试配置测试并发测试可靠性测试性能测试的四大应用领域能力验证能力规划性能调优缺陷发现小结常用的七种性能测试方法根据实际项目经验可以分为以下七种,接着我们来详述每一种。后端性能测试其实我们平时听到的性能测试大多指后端性能测试,也就是服务器性能测试。是通过性能测试工具模拟大量的并发用户请求,然后获取系统性能的各项指标,并且验证各项指标是否符合预期的性能需求的测试手段。这里的性能指标,除了包括并发用户数、响应时间和系统吞吐量外,还应

2020-07-27 22:51:34 3143

原创 不同视角下的软件性能与性能指标

对软件性能最普遍的理解就是软件处理的及时性。但其实,从不同的系统类型,以及不同的视角去讨论软件性能,都会有所区别。文章目录不同类型的系统,软件性能的关注点各不相同中断用户严重的软件性能运维人员严重的软件性能软件设计开发人员眼中的软件性能算法设计包含的点:架构设计包含的内容性能最佳实践包括地点数据库相关地点软件性能的可测试性包含的点性能测试人员眼中的软件性能衡量软件性能的指标并发用户数响应时间系统吞吐量不同类型的系统,软件性能的关注点各不相同Web 类应用和手机端应用,一般以终端用户感受到的端到端的响

2020-07-25 00:47:38 396

原创 衡量测试的充分性和完整性-测试覆盖率

文章目录需求覆盖率代码覆盖率最常用的三种代码覆盖率指标代码覆盖率的价值代码覆盖率的局限性代码覆盖率工具代码覆盖率工具的实现原理小结从广义角度讲,测试覆盖率主要分为两大类,一类是面像项目于的需求覆盖率,另一类是更偏向技术的代码覆盖率。需求覆盖率测试对需求的覆盖程度,通常是将每一条分解后的软件需求和对应的测试建立一对多的映射关系,最终目标是保证测试可以覆盖每个需求,以把证软件产品的质量。我们通常采用 ALM,Doors 和 TestLink 等需求管理工具来建立需求和测试的对应关系,并以此计算测试覆盖率

2020-07-23 23:00:17 2954

原创 软件开发阶段的自动化测试技术,什么样的项目适合自动化测试

什么是自动化、为什么自动化测试自动化测试的本质是先写一段代码,然后去测试另一段代码为什么自动化?优势?自动化测试可以替代大量的手工机械重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上;自动化测试可以大幅提升回归测试的效率,非常适合敏捷开发过程;自动化测试可以更好地利用无人值守时间,去更频繁地执行测试,特别适合现在非工作时间执行测试,工作时间分析失败用例的工作模式;自动化测试可以高效实现某些手工测试无法完成或者代价巨大的测试类型,比如关键业务 7×24 小时持续运行的系统

2020-07-23 00:15:26 573

原创 在项目中如何做好单元测试

什么是单测,如何做好单测单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。单元测试都是以自动化的方式执行,所以在大量回归测试的场景下更能带来高收益。单元测试的对象是代码,以及代码的基本特征和产生错误的原因,然后你必须掌握单元测试的基本方法和主要技术手段,比如什么是驱动代码、桩代码和 Mock 代码等。第一,代码的基本特征与产生错误的原因要做到代码功能逻辑正确,必须做到分类正确并且完备无遗漏,同时每个分类的处理逻辑必须正确

2020-07-22 00:25:10 1201

原创 高效的缺陷报告和测试计划的编写

利用对需求的理解、严密的逻辑推理能力,迅速找出软件中的潜在缺陷,并以缺陷报告的形式递交给开发团队,是与开发工程师交流沟通的重要桥梁,也是测试工程师日常工作的重要输出。开发工程师可以根据缺陷报告快速理解缺陷,并精确定位问题。同时,通过这个缺陷报告,开发经理可以准确预估缺陷修复的优先级、产品经理可以了解缺陷对用户或业务的影响以及严重性。虽然软件企业通常都有缺陷管理系统,比如典型的 ALM(以前的 Quality Center)、JIRA、Bugzilla、BugFree 和 Mantis 等。当使用这类系统递

2020-07-21 01:07:52 309

原创 基于用户登录测试用例设计产生一点对用例设计的理解

为个人博客项目的用户登录设计测试用例的过程中,让我发觉用例是越写越多,更多的用例覆盖率会越高,但是也慢慢发现这可能是一个没有穷尽的测试,同时测试的周期或长。衡量下来什么才算是好的测试用例?特此贴上用例设计的链接什么才算好的测试用例通常,第一反应可能会是“发现了软件缺陷的测试用例就是好的用例”,那“如果说测试用例发现了缺陷就是好用例,那么在该缺陷被修复后,同样的用例难道就不是好用例了吗?”。可能我们还会说“发现软件缺陷可能性大的测试用例就是好用例”,这话还是蛮有道理的,“又该用什么方法来量化测试用例发

2020-07-21 00:37:50 314

原创 用户登录的常规可复用性测试用例设计

以上登录仅仅考虑的时网页中登录的部分情况。关于 APP 登录测试1、登录失败后二次登录(1)输入正确的用户名,不输入密码,点击登录;登录失败后,再次输入正确的密码登录并观察登录情况(2)输入正确的用户名和错误的密码登录失败后,再次输入正确的密码登录并观察登录情况(3)输入未注册的用户和任意密码登录失败后,再次输入正确的用户名和密码,观察登录情况2、修改密码后(1)修改完密码后是否重定向到登录界面(2)修改完密码后,分别使用原密码和新密码登录(3)在其他终端修改密码后,本终端是否自动下线?下.

2020-07-20 23:09:07 538

原创 软件开发模型和软件测试模型的简单介绍

文章目录软件开发的模型软件测试的模型软件的生命周期:从产品设想到不再使用而结束的时间,可以分为 6 个阶段:需求分析、计划、设计、编码、测试、运行和维护软件开发的模型✅瀑布模型(Waterfall Model)其他模型的基础框架,每个阶段只执行一次,是先行顺序进行的开发模型优点:强调开发的阶段性、早期计划和需求调查、强调产品测试缺点:不能适应变化的需求,由于单一流程风险性往往推迟至后期测试才显露✅螺旋模型(Spiral Model)开发初期需求不很明确的渐进式的开发,适用于规模大复杂度

2020-07-18 22:52:50 431

原创 DNS协议:网络世界的地址簿-域名解析和负载均衡

当我们在网咯上冲浪的时候面对的网站特别多,如果全部用 IP 地址进行访问,恐怕很难记住。于是,就需要一个地址簿,根据名称,产看具体的地址。DNS 服务器我们冲浪时候可以记住一些网站名称,但是详细的 IP 相较之就比较难,因而也需要一个地址簿,就是DNS 服务器。由此 DNS 在日常生活中多么重要,人们上网需要访问他,这对它来讲也是巨大挑战。一旦出了故障,整个互联网将瘫痪。另外,上网的人分布在全世界各地,如果大家都去同一个地方,访问一台服务器,时延将非常大。因而,DNS 服务器,一定要设置成高可用、高并

2020-07-13 23:27:49 401

原创 HTTPS 协议:点外卖的过程原来这么麻烦

用 HTTP 协议,看个新闻还没有问题,但是换到涉及财务交易场景中,就存在很多的安全风险。例如,要下单支付,如果还用 HTTP 协议,很有很能被黑客盯上哦。比如你发送一个点外卖的请求,这个网路包被截获了,若在服务器恢复你之前,黑客假装自己是外卖网站,然后给你回复一个假消息:“银行卡号,密码”。这时候发过去不就出事了?怎么解决这个问题呢?一般的思路就是加密。加密分为两种方式一种是对称加密,一种是非对称加密。在对称加密算法中,加密和解密使用的密钥是相同的。也就是说,加密和解密使用的是同一个密码。因此,对称

2020-07-12 22:49:11 193

原创 应用层 HTTP 协议:浏览网页原来有这么复杂的过程

HTTP 协议几乎是每个人上网用的第一个协议。比如看新闻我们会登录 http://www.163.comhttp://www.163.com 是个 URL,叫作统一资源定位符。之所以叫统一,是因为它是由格式的。其中 HTTP 称为协议,www.163.com 是一个域名,表示互联网上的一个位置。由的 URL 会有更详细的位置标识,例如 http://www.163.com/index.html 。正是因为这个东西是统一的,所以当你把这样一个字符串输入到浏览器的框里时,浏览器才知道如何进行统一处理。HTT

2020-07-03 12:48:22 3751

原创 如何做到靠谱—传输层协议 TCP(下)

文章目录TCP 如何做到靠谱?如何实现一个靠谱的协议?顺序问题和丢包问题确认与重发机制流量控制问题拥塞控制问题小结我们前面说到玄奘西行,要出网关。既然出了网关,那就是在公网上传输数据,公网往往是不可靠的,因而需要很多的机制去保证传输的可靠性,这里面需要恒心,也即各种重传的策略,还需要有智慧,也就是说,这里面包含着大量的算法。TCP 如何做到靠谱?对应到网络协议上,就是客户端每发送的一个包,服务器端都应该有个回复,如果服务器端超过一定的时间没有回复,客户端就会重新发送这个包,直到有回复。这个发送应答的

2020-07-02 16:19:22 229

原创 连接维护及断开连接状态图--传输层协议 TCP(上)

TCP 包头格式源端口号和目标端口号是不可少的,这一点和 UDP 是一样的。如果没有这两个端口号,数据就不知道应该发给哪个应用。接下来是包的序号,为什么要给包编号?当然是为了解决乱序的问题。还应该有的就是确认序号。发出去的包应该有确认,要不然我怎么知道对方有没有收到呢?如果没有收到就应该重新发送,直到送达。这个可以解决不丢包的问题。TCP 是靠谱的协议,但是这不能说明它面临的网络环境好。从 IP 层面来讲,如果网络状况的确那么差,是没有任何可靠性保证的,而作为 IP 的上一层 TCP 也无能为力,

2020-07-02 12:45:32 557

原创 传输层单纯的UDP协议

文章目录TCP 和 UDP 有什么区别?UDP 包头是什么样的?UDP 的三大特点UDP 的三大应用场景实际案例中使用 UDP 的优势传输层有两个重要的协议,分别是 UDP 和 TCP,也是我们开发应用最常用的两个,而且说到 UDP 就会不免把 TCP 也拿出来。TCP 和 UDP 有什么区别?提到这两个我们常常会说,TCP 是面向连接,UDP 是面向无连接的。那么什么是面向连接,什么叫无连接?在互通之前,面向连接的协议会先建立连接。例如,TCP 会三次握手,而 UDP 不会。为什么要建立连接呢?

2020-06-30 19:03:52 669

原创 世界那么大,我要出网关

文章目录怎么在宿舍上网?你了解 MAC 和 IP 头的细节吗?关于网关静态路由是什么IP 头和 MAC 头哪些变、哪些不变?小结怎么在宿舍上网?之前买了交换机在宿舍组成局域网打局域网的游戏,现在允许宿舍开通网络了。学校给每个宿舍的网口分配了一个 IP 地址。这个 IP 是校园网的 IP,完全由网管部门控制。宿舍网的 IP 地址多为 192.168.1.x。校园网的 IP 地址,假设是 10.10.x.x。这个时候,你要在宿舍上网,有两个办法:第一个办法,让你们宿舍长再买一个网卡。这个时候,你们宿舍长

2020-06-30 17:22:40 218

原创 从物理层到MAC层:如何在宿舍组网玩联机游戏?

如果宿舍断网了,两个人想在联机打单机游戏,怎么连接两台电脑呢?使用路由器? 这个在 五层模型的第三层,我们先从第一层物理层开始说。物理层我们去配电脑的地方买网线,卖网线的老板都会问,你的网线是要电脑连电脑啊,还是电脑连网口啊?要是电脑连电脑。这种方式就是一根网线,有两个头。一头插在一台电脑的网卡上,另一头在另一个电脑的网卡上。但是很早的时候普通的网线是通不了的,所以水晶头要做交叉线,用的就是 1-3、2-6 交叉法。水晶头的1、2 和 3、6脚,分别起着收、发信号的作用。将一端的 1 号和 3 号

2020-06-30 10:02:33 2954

原创 如何配置 IP 地址—解析动态主机配置协议

文章目录如何配置 IP 地址?动态主机配置协议 (DHCP)解析 DHCP 的工作方式如何配置 IP 地址?如何配置呢?若用命令行自己配置一个地址。可以使用ifconfig,也可以使用 ip addr。设置好了以后,用这两个命令,将网卡 up 一下,就可以开始工作了。使用 net-tools: sudo ifconfig eth1 10.0.0.1/24 sudo ifconfig eth1 up使用 iproute2: sudo ip addr add 10.0.0.1/24 dev et

2020-06-29 15:30:42 5701

原创 求解数组中的逆序对并优化时间复杂度

数组中的逆序对题目描述有一组数,对于其中任意两个数组,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。请设计一个高效的算法,计算给定数组中的逆序对个数。给定一个int数组A和它的大小n,请返回A中的逆序对个数。保证n小于等于5000。暴力破解遍历每一个数,比较这个数和它后面的,出现逆序情况计数器就 + 1。import java.util.*;public class Main { public int count(int[] A,int n) { int cnt = 0;

2020-06-28 16:46:03 995

原创 如何用快排思想在 O(n) 内查找第 K 大元素

如何用快排思想在 O(n) 内查找第 K 大的值核心思想快排核心思想就是 分治 和分区,可以用分区的思想来解答:在 O(n) 时间复杂度内求无序数组中的第 K 大元素。比如,4,2,5,12,3 这样一组数据,第 3 大元素就是 4。可以选择数组区间 A[0…n-1] 的最后一个元素 A[n-1] 作为 pivot,对数组 A[0…n-1] 原地分区,这样数组就分成了三部分,A[0…p-1]、A[p]、A[p+1…n-1]。(当然 pivot 的选择还可以优化,这里我们只用其中的一种方式)如果 p+

2020-06-27 21:55:11 359

原创 以网购下单为例详细串讲碎片的网络协议(下)

中篇部分封装了一个长的网络包,准备开始发送。发送的时候是重重关隘,从手机到移动网络、互联网、还要经过多个运营商才能到达数据中心,到了数据中心就进入到第二个复杂的过程,从网关到 VXLAN 隧道,到负载均衡,到Controller 层、组合服务层、基础服务层,最终才下单入库。今天,我们就来看这最后一段过程。7. 流控拥塞与重传网络包已经组合完毕,接下来就是如何过网关到达目标公网 IP。PGW 在核心网机房的 IP 地址。网络包直到 PGW (PGW 是隧道的另一端) 才将里面的包解出来,转发到外部网络

2020-06-26 21:46:14 261

原创 以网购下单为例详细串讲碎片的网络协议(中)

在上篇中手机 APP 经过了一个复杂的过程,终于拿到了电商网站的 SLB 的 IP 地址,是不是该下单了?但其实大部分客户在购物之前要看很多商品图片,比较后才会点下单按钮,此时就开始建立连接。建立连接这个过程也比较复杂,最终经过层层封装,才构建出一个完成的网络包。接下来看看这个过程。4. 购物之前看图片,静态资源 CDN客户在购物网站买商品时,一般先去详情页看看图片,是不是需要的那一款。在部署电商应用的时候,一般把静态资源保存在两个地方,一个是接入层 nginx 后面的 varnish 缓存里面,

2020-06-26 20:37:34 369

原创 以网购下单为例详细串讲碎片的网络协议(上)

网购下单在我们手中简单的一步操作,在互联网世界真正要完成这个动作,过程其实很繁杂,这里把这个过程分为十个阶段,从云平台中搭建一个带你上开始,到 BGP 路由广播,再到 DNS 域名解析,从客户看商品图片,到最终下单的整个过程,每一步会详细说明。文章目录1. 部署一个高可用高并发的电商平台2. 大声告诉全世界,可以来这里买东西3. 打开手机来上网,域名解析得地址1. 部署一个高可用高并发的电商平台首先,咱们要有个电商平台。假设已经有了一个特别大的电商平台,这个平台应该部署在哪里呢?若我们用公有云,一般公

2020-06-26 18:59:41 1074

空空如也

空空如也

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

TA关注的人

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