
【技术】研发
文章平均质量分 80
多则惑少则明
让天下没有难测试的项目。专注于测试开发领域,近9+年的工作实战经验,主攻方向包括:
0-1/中期/成熟类大型/复杂系统的业务测试
自动化测试平台&框架开发;
打造质量体系及沉淀质量方法论
个人邮箱zpphnkjxy@126.com
文章周末定时更新,其余时间不定时更新
展开
-
质量指标——什么是增量覆盖率?它有啥用途?
增量覆盖率,可能是蜜糖,还可能是砒霜?原创 2023-03-07 21:34:33 · 1947 阅读 · 0 评论 -
大数据系列——什么是Flink?Flink有什么用途?
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。支持高吞吐、低延迟(每秒处理百万个事件)、高性能的分布式处理框架。原创 2022-12-29 13:36:21 · 4812 阅读 · 0 评论 -
大数据系列——ClickHouse表引擎与分布式查询
Clickhouse引擎、分布式查询的故事原创 2022-12-29 12:57:38 · 2318 阅读 · 0 评论 -
大数据系列——什么是ClickHouse?ClickHouse有什么用途?
大数据系列——什么是ClickHouse?ClickHouse有什么用途?原创 2022-12-27 20:50:23 · 9554 阅读 · 0 评论 -
大数据系列——什么是hdfs?hdfs用来干什么的?
大数据系列——什么是hdfs?hdfs用来干什么的?原创 2022-12-27 15:19:47 · 13254 阅读 · 0 评论 -
大数据系列——什么是hive?hive用来干什么的?hive常见问题是啥?
什么是hive?hive用来干什么的?hive常见问题是啥?原创 2022-12-26 21:21:12 · 7028 阅读 · 0 评论 -
redis 大key 防坑指南
redis 大key问题怎么解?原创 2022-12-22 21:17:52 · 793 阅读 · 0 评论 -
Spring中自定义事件监听
当处理完一段代码逻辑,后面需要同时执行多个任务,有什么好方法呢?如果在微服务项目中,可以使用MQ;但如果是单机,spring为我们提供了事件监听。原创 2022-12-22 20:51:33 · 1207 阅读 · 0 评论 -
spring-statemachine状态机梳理
spring-statemachine状态机梳理原创 2022-12-22 19:54:36 · 7933 阅读 · 0 评论 -
MySQL Binlog温故知新
如果你对以下问题感兴趣,请移步:1、MySQL如何实现主从数据库同步;2、如何解决数据一致性问题:操作数据库成功了,可能会更新redis失败;反之亦然。很难保证二者的完全一致原创 2022-12-19 22:02:37 · 661 阅读 · 0 评论 -
MAC下启动IDEA报错Start Failed: Internal error. com.jiyuanime.config.Config duplicated
发发发原创 2020-12-21 20:37:24 · 1809 阅读 · 0 评论 -
Java多线程产生死锁
死锁: 线程等待某个资源,导致线程被无限期地阻塞例如:不适当地运用“synchronized”关键词1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;3. 修改一个静态方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象原创 2020-08-10 20:52:28 · 275 阅读 · 0 评论 -
Java中锁与事务
目录一、线程安全synchronized和ReentrantLock 区别二、悲观锁优点与不足InnoDB锁模式InnoDB锁体验三、乐观锁含义适用场景乐观锁实现优点与不足四、Mysql事务与锁相关1、事务2、事务的特性:3、并发事务带来的问题:4、mysql 事务的隔离级别5、事务中的加锁方式:五、Spring的事务管理模式一、线程安全前提: 多线程中的并发控制,保证线程安全。线程安全是多线程领域的问题,线程安全可以.原创 2020-08-10 20:45:22 · 3436 阅读 · 0 评论 -
Java之BlockingQueue
LinkedBlockingQueuehttps://www.jianshu.com/p/6ba87c7508e4基于链表的阻塞队列,同ArrayListBlockingQueue类似,其内部也维持着一个数据缓冲队列(该队列由一个链表构成),当生产者往队列中放入一个数据时,队列会从生产者手中获取数据,并缓存在队列内部,而生产者立即返回;只有当队列缓冲区达到最大值缓存容量时(LinkedBlockingQueue可以通过构造函数指定该值),才会阻塞生产者队列,直到消费者从队列中消费掉一份数据,生...原创 2020-08-10 20:18:40 · 302 阅读 · 0 评论 -
Java并发之Semaphor、以及与CountDownlatch和CyclicBarrier区别
目录一、Semaphor作用二、应用场景三、重要方法四、例子-控制某个方法允许并发访问线程的个数五、CountDownlatch和CyclicBarrier以及Semaphor的区别是一、Semaphor作用控制并发线程数用于多个共享资源互斥使用。【也就是具有锁的功能】二、应用场景用于做流量控制,特别公用资源有限的应用场景,比如数据库连接三、重要方法1、semaphore.acquire();请求一个信号量,这时候信号量个数-1,当减少到0的时候.原创 2020-08-10 10:22:27 · 938 阅读 · 1 评论 -
Java并发之CountDownLatch
目录一、作用二、典型的应用场景三、用法四、例子一、作用二、典型的应用场景三、用法CountDownLatch最重要的方法是countDown()和await()。countDown(): 前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了.await(long timeout,TimeUnit unit):使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。如果当前计数为零,则此方法立...原创 2020-08-06 21:00:41 · 237 阅读 · 0 评论 -
Java并发之CyclicBarrier
目录一、作用二、通俗例子三、使用概览四、比较好的例子一、作用二、通俗例子三、使用概览四、比较好的例子例子: 5个线程模拟5个运动员。运动员在赛跑的时候都会准备一段时间,当裁判发现所有的运动员都准备完毕的时候,就举起发令枪,比赛开始import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/*** 模拟运...原创 2020-08-06 20:37:36 · 222 阅读 · 0 评论 -
C++继承模型的内存布局
派生类对象内存:自己的非静态数据成员+基类的数据成员, 二者顺序并未强制规定。大部分编译器:基类成员先出现(虚基类除外)1》非继承模型 独立的内存布局 2》仅单一继承,无多态 3》继承+多态 例子: 虚函数额外的负担:虚函数增加:1,类中,存放虚函数地址的虚表;2,每个对象,插入虚指针vptr原创 2014-02-26 15:16:29 · 834 阅读 · 0 评论 -
赋值运算符/拷贝构造/构造/析构函数
赋值运算符1, 禁止一个类对象指定给另一个类对象的方法:copy 赋值运算符声明为private,并且不提供定义。2, 一个class对于默认的copy赋值运算符,以下情况不会表现出位拷贝语意:1】 类内含成员对象,其类有一个copy赋值运算符;2】 类内基类有一个copy赋值运算符;3】 类声明了任何虚函数4】 类继承自一个虚基类注:上述4种情况类似拷原创 2014-02-26 14:43:23 · 844 阅读 · 0 评论 -
全局对象/局部静态对象/new数组
全局对象:位于数据段, 静态初始化1, 全局对象,在main函数之前执行构造函数-----静态初始化,2, 静态初始化:如果全局对象有构造函数,析构函数,说它需要静态的初始化和内存释放。3, C++保证main函数第一次用到全局对象前,把对象构造起来,main函数结束前摧毁。4, 保证的策略:静态初始化方法munch;安插_main(),exit()int main()原创 2014-02-26 14:52:40 · 1489 阅读 · 0 评论 -
C++函数中那些不可以被声明为虚函数的
常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思, 因此编译器会在编译时邦定函数。 2、为什么C++不支持构造函数为虚函数? 这个原因很简原创 2014-02-27 18:51:16 · 787 阅读 · 0 评论 -
String 类的实现
class String{ public: String(const char *str=NULL); //构造函数 String(const String &other); //拷贝构造函数 ~String(void); //析构函数 String& operator=(const String原创 2014-02-27 20:05:42 · 734 阅读 · 0 评论 -
KM P算法 C++版本
#include using namespace std; //注 和《数据结构》的伪代码有出入,因为书中S[0],T[0]存的是字符串数组的长度。void get_next(char*t, int next[ ]){ int t_len=strlen(t); int i=0; //求解每个next[i] next[0]=-1; //递推转载 2014-02-28 19:06:20 · 834 阅读 · 0 评论 -
构造函数中调用虚函数安全吗?
实际而言,安全;vptr能够保证在成员初始化列表之前被设定好。语义上可能不安全,因为函数本身可能依赖未设立初值的成员例如:当给基类构造函数(baseclass constructor)提供参数时,在类的constructor的成员初始化列表中调用该class的虚函数,是不安全的。因为:vptr不是未设定好,就是被设定指向错误的class,进一步讲,该函数所存取的任何类的数据成员一定没有原创 2014-03-07 12:41:30 · 801 阅读 · 0 评论 -
为什么构造函数不能为虚函数
1.含义上虚函数含义:虚函数采用一种叫虚调用的方式,虚调用是一种在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果要创建一个对象,你势必要知道对象的准确类型,因此构造函数不能为虚。2.使用上虚函数的作用于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数实在创建对象的时候自动调用的,不可原创 2014-03-11 15:31:08 · 1077 阅读 · 0 评论 -
空类的sizeof不为0的原因?
被编译器安插进去的一个char,使得这个空类的2个对象在内存中配置独一无二的地址。例子:class x{};class y:public virtual x{};class z:public virtual x{};class A:public y,public z{};vc6.0上:不同编译器可能不同sizeof(x) ==1sizeof(y) ==4si原创 2014-03-07 12:50:27 · 1162 阅读 · 0 评论 -
c++容器(vector|map)中使用函数指针
注意:容器中只能放类型,不能放函数指针变量名// 声明一个函数指针int(*pFunc)(int);int func1(int nIn){return nIn + 1;}int func2(int nIn){return nIn + 20;}typedef int(*pInt)(int);//定义别名才能放在vector中void main(){ pFunc转载 2014-03-07 17:13:51 · 2185 阅读 · 0 评论 -
C/C++易错点 总结
数组的定义与初始化在数组定义时,如果没有显式提供元素初值,则数组元素会像普通变量一样初始化:在函数体外定义的内置数组,其元素均初始化为0; 在函数体内定义的内置数组,其元素无初始化不管数组在哪里定义,如果元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化.字符串char ca1[ ] = {‘C’, ‘+’,原创 2014-02-13 20:40:42 · 772 阅读 · 0 评论 -
单例模式 模板类和非模板类实现
概述: singleton模式称作单件模式或单例模式。它的作用是确保一个类在整个工程中有且只有一个实例。可以在多个不同的类中很方便的所需要的类的方法。应用领域:常用在游戏编程和多线程编程中,读取配置文件,写入日志。原理:它的构造函数是私有的,你不能去new 它。该单例类里面已经实例化好了一个了,并且是static的,并提供一个获取该实例的方法!客户端只能通过该方法获取转载 2014-03-03 17:37:04 · 1181 阅读 · 0 评论 -
求1+2+…+n
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。《剑指offer》上的方法:方法1:类的构造函数中增加i,相当于记录类对象的个数。方法2:1-递归求阶乘模板元编程:编译期得到结果步骤:1-递归模板具现化实现循环templatestruct factorial转载 2014-03-07 15:54:53 · 1100 阅读 · 0 评论 -
链表面试题小结
某本书上面说了,链表这个东西,实际用的并不多,但是可以提供很好的考察面试者编程技巧和思维能力的素材。这里总结一下,见过的面试题和对应的候选解法。题一、 给定单链表,检测是否有环。 使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。http:/转载 2014-03-08 15:16:47 · 661 阅读 · 0 评论 -
泛型编程 实例 阶乘
1-递归求阶乘模板元编程:编译期得到结果步骤:1-递归模板具现化实现循环templatestruct factorial{enum{value =n*factorial::value};};2-模板特化结束循环templatestruct factorial{enum {value=1};}; 调用factorial::value调用原创 2014-02-14 15:50:43 · 803 阅读 · 0 评论 -
大小端模式的快速判断
采用Little-endian模式的CPU对操作数的存放方式是 从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little-endian 模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址0x40000x4001存放内容0x3转载 2014-03-08 09:22:47 · 793 阅读 · 0 评论 -
虚函数
C++中虚函数的作用?1.那些被virtual关键字修饰的成员函数,就是虚函数。2.虚函数的作用-----------实现多态性(Polymorphism),多态性是将接口与实现进行分离;多态还有个关键之处就是用指向基类的指针或引用来操作对象总结:指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。虚函数是如何实现的?虚函数(Vi转载 2014-03-07 10:56:03 · 1122 阅读 · 0 评论 -
深入static的用途?
来自中兴笔试题目:static的用途?1.隐藏:把变量的可见范围限制在编译单元中,使它成为一个内部连接;2.静态存储:使得变量或对象的存储形式变成静态存储;3.初始化为04.类中的static成员(1)隐藏(即限定作用域):全局变量和函数同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。被staitc修饰的全局变量或函数都被编译器标记转载 2014-03-08 11:12:05 · 910 阅读 · 0 评论 -
继承与数据成员布局
派生类对象内存:自己的非静态数据成员+基类的数据成员, 二者顺序并未强制规定。大部分编译器:基类成员先出现(虚基类除外)1》非继承,对象布局 1》仅单一继承,无多态时,对象布局派生类对象成员布局:1) 首先是基类成员2)派生类成员 3》继承+多态时,对象布局虚函数额外的负担:虚函数增加:原创 2014-03-07 15:10:53 · 845 阅读 · 0 评论 -
volatile变量
volatile变量volatile变量有两个作用:告诉编译器不要进行优化;告诉系统始终从内存中取变量的地址,而不是从缓存中取变量的值以免读取脏数据explicit关键字:置于构造函数前;防止进行隐式类型转换原创 2014-02-15 09:42:05 · 518 阅读 · 0 评论 -
C++中static_cast和reinterpret_cast的区别
1-static_cast-- ----C++primer第五章里写了编译器隐式执行任何类型转换都可由static_cast显示完成;主要用法如下:①用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转换,如把int转载 2014-02-14 11:17:50 · 1085 阅读 · 0 评论 -
strlen与sizeof的区别
strlen1,一个函数(运行时计算)2,计算字符串的长度,字符串以/0结尾3,参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。4, 实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。sizeof1,一个单目运算符 2,求的是数据类型所占空间的大小[以字节为单位] 3,原创 2014-02-13 21:04:04 · 663 阅读 · 0 评论 -
2013腾讯实习笔试题
1.根据下面的表达式,下列说法正确的是()signed char a = 0xe0;unsigned int b = a;unsigned char c = a;A.(a>0)&&(b>0)为真B.(c==a)为真C.b的十六进制为0xffffffe0D.以上说法都不对解析:printf("%x,%x,%x",a,b,c);运行结果:转载 2014-03-10 14:55:27 · 1746 阅读 · 0 评论