面试

QPS、TPS、并发用户数、吞吐量关系

前提是你 提交于 2021-01-13 00:04:00
来源: https://juejin.im/post/5c2cb5e15188257a937fbfaf 1、QPS QPS Queries Per Second 是每秒查询率 ,是 一台服务器 每秒能够相应的查询次数,是对一个特定的查询服务器 在规定时间内 所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。 2、TPS TPS Transactions Per Second 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数, 3、QPS和TPS区别 个人理解如下: 1、Tps即每秒处理事务数,包括了 用户请求服务器 服务器自己的内部处理 服务器返回给用户 这三个过程,每秒能够完成N个这三个过程,Tps也就是N; 2、Qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。 例子: 例如:访问一个页面会请求服务器3次,一次放,产生一个“T”,产生3个“Q” 例如:一个大胃王一秒能吃10个包子,一个女孩子0.1秒能吃1个包子,那么他们是不是一样的呢?答案是否定的,因为这个女孩子不可能在一秒钟吃下10个包子,她可能要吃很久

普通大学,多年功能测试,3年进入小米测试开发,软件测试如何有效的学习?【8千字长文】

℡╲_俬逩灬. 提交于 2021-01-12 22:58:17
坎坷的2020 学软件测试容易,找工作难! 2020年是坎坷的一年,对于我们每个人来说,健康地活着比什么都重要。 现状1-疫情&裁员潮到来 ➢原因: ➢疫情影响全球经济,波及大多数行业 ➢大环境预测不好导致企业勒紧裤腰带(中美贸易战) ➢投资环境收紧影响大量创业公司 ➢企业人力成本上升 ➢供大于求 可能在五年前的样子,咱们的软件测试岗位可以说是一个风口。但是现在的话呢,已经开始慢慢趋于一个平衡的状态了,不再是像十年前五年前,就算你不懂技术,也能够找到一个软件测试的岗位,也能够拿到一个还算不错的薪资。 其实现在这样的一个机会已经非常的少了,供求关系基本上是慢慢达到一个平衡标准了。 现状2:手工测试衰落 ➢纯手工测试的生产力已经跟不上时代要求 这个是大家都深有体会的,第一个,因为手工测试已经跟不上时代的生产力要求。但并不是说,要淘汰手工测试。(只要有软件测试行业的存在,手工测试就不会被淘汰)这个和自动化测试不会替代手工测试是一个道理。 不管咱们的自动化测试、人工智能做得有多好。手工测试它还是会存在的,只是说它占据的比例会越来越少,而且现在的手工测试并不能和十年前的手工测试去相比。因为现在的技术要求越来越高,现在的手工测试市场额度越来越小。 所以如果你是零基础转行,一定要慎思。 每一行你做到了28定律的2,前(钱)景都是很可观的。 当然不得不承认的是,我们大部分都是普通人,包括我。

Python

不打扰是莪最后的温柔 提交于 2021-01-12 19:59:18
适用于新生和经验丰富的Python基本面试问答 1)什么是Python?使用Python有什么好处? Python是一种具有对象,模块,线程,异常和自动内存管理的编程语言。python的优点是它简单,易用,可移植,可扩展,内置数据结构,并且是开源的。 2)什么是PEP 8? PEP 8是一个编码约定,是一组建议,有关如何编写更具可读性的Python代码。 3) 什么是Pickle和pickling? Pickle模块接受任何Python对象并将其转换为字符串表示形式,并使用转储功能将其转储到文件中,此过程称为pickling。从存储的字符串表示中检索原始Python对象的过程称为解开。 4)如何解释Python? Python语言是一种解释性语言。Python程序直接从源代码运行。它将程序员编写的源代码转换为中间语言,该中间语言又被翻译为必须执行的机器语言。 5)如何在Python中管理内存? Python内存由Python专用堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆,解释器负责处理此Python私有堆。 为Python对象分配Python堆空间是由Python内存管理器完成的。核心API允许访问一些工具,以便程序员进行编码。 Python还具有一个内置的垃圾收集器,该垃圾收集器回收所有未使用的内存,并释放内存并使之可用于堆空间。 6

CDC的那些事:跨时钟域

时光毁灭记忆、已成空白 提交于 2021-01-12 18:09:11
一转眼,老李在数字芯片设计领域又摸爬滚打了四年。 跨时钟域设计 几乎是现代数字芯片设计中所有设计人员必须要掌握的基本知识,但是从老李自身的经历来说,这方面的知识 在本科和研究生的课程当中都没有讲过,却是面试中经常被考到的知识点 。同时工作中工程师也必不可少地要和 CDC 打交道,考虑如何进行跨时钟域设计,以及掌握 CDC 相关的 EDA 工具。以下文章我们就从跨时钟域设计的最基本开始讲起。 这里我们先复习一下 同步电路 和 异步电路 的概念。在现代 SoC 设计中,绝大多数的电路都是同步电路。同步电路是由时钟驱动存储元件的电路,也就是说存储元件的状态只在时钟沿到来的时候才能发生变化。因为组合逻辑电路在输入变化时输出可能出现毛刺 (glitch) ,而存储元件因为只会在时钟沿到来时才会更新状态,那么在时钟沿之间的时间状态是稳定的,这样的同步电路可以 消除组合电路中的毛刺 ,如下图所示。 相应的,时钟周期的大小取决于最长的传输延时 (propagation delay) 。同步电路的好处是时序很清晰,电路中的存储元件例如触发器都是依照一个固定的节拍来工作, 便于 EDA 工具来进行延时的分析和计算 ,所以同步电路几乎占据了当前数字芯片的绝大多数部分。 而异步电路就没有时钟的概念了,存储元件所存的状态跟随了输入信号的变化立刻发生变化。信号之间的传递通常通过握手 (handshake)

你知道哪几种垃圾收集器,各自的优缺点?

回眸只為那壹抹淺笑 提交于 2021-01-12 18:04:03
几种垃圾收集器: Serial收集器 :单线程的收集器,收集垃圾时,必须stoptheworld,使用复制算法。 ParNew收集器 :Serial收集器的多线程版本,也需要stoptheworld,复制算法。 ParallelScavenge收集器 :新生代收集器,复制算法的收集器,并发的多线程收集器,目标是达到一个 可控的吞吐量。如果虚拟机总共运行100分钟,其中垃圾花掉1分钟,吞吐量就是99%。 SerialOld收集器 :是Serial收集器的老年代版本,单线程收集器,使用标记整理算法。 ParallelOld收集器 :是ParallelScavenge收集器的老年代版本,使用多线程,标记-整理算法。 CMS(ConcurrentMarkSweep)收集器 :是一种以获得最短回收停顿时间为目标的收集器,标记清除算法,运作过程:初始标记,并发标记,重 新标记,并发清除,收集结束会产生大量空间碎片。 G1收集器 :标记整理算法实现,运作流程主要包括以下:初始标记,并发标记,最终标记,筛选标记。不会产生空间碎片,可以精确地控制停顿。 CMS收集器和G1收集器的区别 :CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收 集器一起使用;G1收集器收集范围是老年代和新生代,不需要结合其他收集器使用; CMS收集器以小的停顿时间为目标的收集器

你是如何保证 ,Redis 缓存与数据库双写一致性的?

走远了吗. 提交于 2021-01-12 17:59:54
在做系统优化时,想到了将数据进行分级存储的思路。因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息。基本上配置了很久才会变一次。而有一些数据实时性要求非常高,比如订单和流水的数据。所以这里根据数据要求实时性不同将数据分为三级。 第1级:订单数据和支付流水数据;这两块数据对实时性和精确性要求很高,所以不添加任何缓存,读写操作将直接操作数据库。 第2级:用户相关数据;这些数据和用户相关,具有读多写少的特征,所以我们使用redis进行缓存。 第3级:支付配置信息;这些数据和用户无关,具有数据量小,频繁读,几乎不修改的特征,所以我们使用本地内存进行缓存。 但是只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题,因为配置信息缓存在内存中,而内存时无法感知到数据在数据库的修改。这样就会造成数据库中的数据与缓存中数据不一致的问题。接下来就讨论一下关于保证缓存和数据库双写时的数据一致性。 整理了一份Java面试宝典完整版PDF已整理成文档 解决方案 那么我们这里列出来所有策略,并且讨论他们优劣性。 先更新数据库,后更新缓存 先更新数据库,后删除缓存 先更新缓存,后更新数据库 先删除缓存,后更新数据库 先更新数据库,后更新缓存 这种场景一般是没有人使用的,主要原因是在更新缓存那一步,为什么呢

Java 浅析 Thread.join()

£可爱£侵袭症+ 提交于 2021-01-12 17:59:18
1. join() 的示例和作用 1.1 示例 1 // 父线程 2 public class Parent { 3 public static void main(String[] args) { 4 // 创建child对象,此时child表示的线程处于NEW状态 5 Child child = new Child(); 6 // child表示的线程转换为RUNNABLE状态 7 child.start(); 8 // 等待child线程运行完再继续运行 9 child.join(); 10 } 11 } 1 // 子线程 2 public class Child extends Thread { 3 public void run() { 4 // ... 5 } 6 } 上面代码展示了两个类:Parent(父线程类),Child(子线程类)。 Parent.main()方法是程序的入口,通过 Child child = new Child(); 新建child子线程(此时 child子线程处于NEW状态); 然后调用child.start()(child子线程状态转换为RUNNABLE); 再调用child.join(),此时,Parent父线程会等待child子线程运行完再继续运行。 下图是我总结的 Java 线程状态转换图: 1.2 join() 的作用

谈谈Java中的volatile

不打扰是莪最后的温柔 提交于 2021-01-12 16:51:28
内存可见性   volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。   为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看如下代码 public class TestVolatile { boolean status = false; /** * 状态切换为true */ public void changeStatus(){ status = true; } /** * 若状态为true,则running。 */ public void run(){ if(status){ System.out.println("running...."); } } }   上面这个例子,在多线程环境里,假设线程A执行changeStatus()方法后,线程B运行run()方法,可以保证输出"running....."吗?    答案是NO!   这个结论会让人有些疑惑,可以理解。因为倘若在单线程模型里,先运行changeStatus方法,再执行run方法,自然是可以正确输出"running...."的;但是在多线程模型中

【C语言编程】实现一个函数,判断字符串str2是否在字符串str1里

帅比萌擦擦* 提交于 2021-01-12 13:13:10
直接上源码,其实是仿照 <string.h> 库中的源码: char* strstr(register char* str1, register char* str2) { register char* bp; register char* sp; if (!*str2) return str1; while(*str1) { bp = str1; sp = str2; do { if (!*sp) return str1; }while(*bp++ == *sp++); str1++; } return 0; } 解析: 一个知识点: 这里为什么使用register关键字? 参考: C:register关键字的作用? 原因是用来声明为寄存器变量。也为局部变量,只在声明它的函数内有效。它是保存在寄存器之中的。速度要快很多。 其他的好像就没有什么好说的。 收录于: C语言|BSP开发|嵌入式软件|Linux驱动|笔试面试题汇总帖 来源: oschina 链接: https://my.oschina.net/u/4414849/blog/4892164

面经 | 面试题目记录(美团)

*爱你&永不变心* 提交于 2021-01-12 09:10:23
以下内容带有部分提示性答案 无论是查找博客还是翻阅论文 大家还是要参照最全面的讲解哦~ 一、开发基础 TCP/IP C++虚函数 由两个部分组成的,虚函数指针与虚函数表 C++允许用户使用虚函数 (virtual function) 来完成“运行时决议 ” 这一操作,这与一般的“编译时决定 ” 有着本质的区别 “静态存储”和“动态存储” 静态存储:全局变量 动态存储:函数的形式参数 红黑树的原理 并发和并行的区别 https://www.jianshu.com/p/cbf9588b2afb 内存不够的情况下如何以最快速度进行排序 (海量数据类问题) 二、机器学习方向 讲一下LR (sigmoid) SVM介绍一下?为什么可以使用对偶来求解原始问题? 核函数了解吗?核函数解决什么问题? 为什么高斯核函数可以拟合无限维 (无穷泰勒展开) ID3缺点 (信息增益对可取值数目较多的属性有所偏好) 朴素贝叶斯公式 抽象一个分类问题[m个样本,n个特征,k种标签],问先验概率后验概率分别是什么 使用贝叶斯的前提条件 (贝叶斯公式没有前提条件) 使用朴素贝叶斯的前提条件 (所有特征相互独立的) GDBT和RF区别 三、深度学习方向 介绍熟悉的深度学习模型,并介绍优缺点 模型中方差,偏差怎么定义的 偏差,方差和过拟合,欠拟合的关系 怎么解决模型的方差偏大问题 降低模型的复杂度 减少数据维度:降噪