- 博客(58)
- 收藏
- 关注
原创 自动化测试
传统UI自动化测试框架的缺点:跨平台能力差 跨应用能力差 稳定性对ID依赖较大 控件捕获成本高 dump系统视图树几率性的失败基于截图的方式的自动化测试框架:sikuli airTest 的不足准确率不足 没有层次结构 代码稳定性差 代码可维护性差能力的需求:图像切割、图像分类识别、OCR文字识别、图像相识度匹配、像素点操作PixelToApp优势:可见即可得,易于理解和开发 对系统框架依赖弱,跨平台 稳定性强,不用担心ID混淆的问题.
2022-04-12 20:33:27
2764
原创 项目理解(六)Elasticsearch倒排索引与搜索应用
目录时序数据库倒排索引Elasticsearch简介Elasticsearch的应用实现搜索时序数据库最简单的定义就是数据格式里包含 timestamp 字段的数据。几乎所有的数据都可以打上一个 timestamp 字段。时间序列数据更重要的一个属性是如何去查询它。在查询的时候,对于时间序列我们总是会带上一个时间范围去过滤数据。同时查询的结果里也总是会包含 timestamp 字段。(系列...
2019-09-05 16:26:49
602
原创 项目理解(六)消息队列Kafka实现及性能优化
Kafka特性:(1)高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。(2)可扩展性:kafka集群支持热扩展。(3)持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。(4)容错性:允许集群中节点失败(若副本数量为n,则允许n...
2019-09-03 17:19:24
715
原创 项目理解(六)Redis分布式缓存及性能优化
目录Redis实现点赞与关注使用Redis优化登录模块Redis实现点赞与关注Redis:支持数据类型完善;使用简单;性能好;Redis是一款基于键值对的NoSQL数据库,对于Redis数据库保存的键值对来说,键总是一个字符串对象,而值可以是字符串对象、列表对象、哈希对象、集合对象或有序集合对象:String, hashes, Lists, Sets, Sorted Sets.Redi...
2019-09-03 11:25:08
1006
1
原创 项目理解(七)多级缓存优化性能
目录1、多级缓存(一)集成Caffeine(二)Caffeine驱逐策略2、Redis分布式缓存(一)Redis过期与淘汰策略(二)Redis分布式锁(三)Redis缓存穿透、缓存雪崩、缓存击穿1、多级缓存本地缓存:性能最好;本地缓存大小一般较小;分布式缓存:有一些数据是不适合存放在本地缓存的,比如登录凭证,这个数据和用户有直接的关联,如一个请求访问A服务器凭证...
2019-08-18 16:48:32
1371
原创 InnoDB索引底层原理剖析
目录1、索引数据结构2、InnoDB索引的设计(1)计算机原理(2)查找过程(3)聚族索引与二级索引(4)创建索引及索引的类型(5)索引的缺点(6)外键及作用1、索引数据结构哈希索引(Hash indexes)采用哈希表来对键值进行查找,时间复杂度为O(1)。1、使用哈希索引时对于键值的等值查询是非常快的,但是其他类型的查询如范围查询、模糊查询、排序等是不能使用哈希索引的。这是哈希索引...
2019-08-17 22:42:38
1099
原创 项目理解(五)系统安全代码重构、定时任务与云服务器
目录1、Spring SecuritySpring Security重构代码2、Redis统计网站数据实现统计独立访客及日活跃用户3、Quartz实现分布式定时任务(1)集成Quartz(2)线程知识补充(3)定时任务计算帖子分数进行热帖排行4、将文件上传到云服务器(1)生成长图保存本地(2)文件上传至云服务器1、Spring SecurityD...
2019-08-07 21:59:41
652
原创 布隆过滤器与大数据处理
目录哈希函数(散列函数)布隆过滤器Redis原子性操作反向代理哈希函数(散列函数)哈希函数的输入域可以是非常大的范围,但是输出域是固定的范围设为R,并具有如下性质:1、典型的哈希函数都有无穷的输入值域2、当给哈希函数传入相同的输入值时,返回值一样3、当给hash函数传入不同的输入值时,返回值可能一样,也可能不一样4、很多不同的输入值所得到的返回值会均匀地分布在R上布隆过...
2019-08-07 21:58:15
852
原创 最大子数组、输入总结、第K大的数、字典序全排列
最大子数组arr没有正数:就是数组中的最大元素arr中有正数:从左到右遍历arr,变量cur记录每一步的累加和,遇到正数增加,遇到负数,将cur减少;当cur<0,说明此部分不能作为子数组的左边部分,令cur = 0,从下一个重新开始;当cur>0,用额外变量记录值max,即用max全程跟踪cur出现的最大值即可 public static int maxSu...
2019-08-03 11:31:07
608
原创 项目理解(三)核心功能(前缀树、事务、AOP、统一处理异常、AJAX)
目录前缀树:Trie、字典树、查找树 发布帖子 帖子详情 显示评论、添加评论(事务) 私信列表 发送私信 统一处理异常 统一记录日志前缀树:Trie、字典树、查找树查找效率高;消耗内存大;用于字符串检索、词频统计、字符串排序等;实现敏感词过滤器:1、定义前缀树;2、根据敏感词,初始化前缀树;3、编写过滤敏感词的方法; private cla...
2019-07-26 11:28:51
456
原创 网络NIO深度剖析(三)
传统的基于IO的网络编程(阻塞IO):(伪代码)ServerSocket serverSocket = …….serverSocket.bind(8899);//用于发起连接的端口号,并不是建立好连接后数据传输的端口号while(true){ Socket socket = severSocket.accept(); //是一个阻塞方法,如果没有客户端与服务器端发起连接,...
2019-07-23 23:05:58
149
原创 MySQL数据库引擎、事务、锁、索引
目录1、数据库及引擎(1)数据类型(2)增删改查操作(3)没有框架的情况下:JDBC数据库操作:(4)关系型和非关系型数据库:(5)Innodb引擎和MyIASM引擎:2、事务3、锁(1)锁的类型与范围(2)加锁操作:(3)死锁4、索引5、Spring事务管理:1、数据库及引擎(1)数据类型 数据库常见的数据类型: int ...
2019-07-21 11:34:01
303
原创 7.15题目总结
1、输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)2、输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
2019-07-16 10:51:19
160
原创 项目理解(二)Spring配置与构建总结
Apache Maven可以帮助我们构建项目、管理项目中的jar包Maven仓库:存放构件的位置--本地仓库:默认是:~/.m2/repository:对于我的电脑为C:\Users\liuze\.m2\repository--远程仓库:中央仓库(官网)、镜像仓库(第三方如aliyun)、私服仓库(一家大的公司,自己用)Maven参考基础的网址:http://maven.apa...
2019-07-15 15:24:24
202
原创 排序算法思想及实现(选择、冒泡、插入、归并、快排)
排序算法总结:https://www.cnblogs.com/guoyaohua/p/8600214.html目录冒泡排序选择排序插入排序归并排序快排冒泡排序比较相邻元素,大的向后(与小的交换位置);每次都是从头开始依次比较找到最大的元素每找到依次最大的元素,就确定了数组右边的一个元素右边元素有序,且为全局最大的;(在无序中前后交换移动) //冒...
2019-07-15 09:22:17
229
原创 7.13题目总结
目录操作给定的二叉树,将其变换为源二叉树的镜像。输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min...
2019-07-14 20:46:25
113
原创 7.12题目总结
目录输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。快排算法实现:注:顺序很重要,必须从右开始走;因为走到左右的碰头处,位置的元素与首元素(选取的基准元素)交换输入两棵二叉树A,B,判断B是不是A的子结构...
2019-07-13 23:25:58
134
原创 网络知识总结3
五层网络协议:0)两个节点物理线路、传输介质是物理层。1)在数据链路层中传递数据包,并进行校验,DHCP协议是数据链路层的。【DHCP协议:动态主机配置协议;所有的Internet协议都做了这样一个假设,即主机配置了一些基本信息,比如IP地址。主机是如何获得此信息的?手动配置太麻烦,因此有了DHCP,即自动给主机配置IP地址、网络掩码等信息;由于MAC唯一,租给它一个IP地址】;2...
2019-07-12 14:58:16
209
原创 网络知识总结2
SocketSocket只是对TCP/IP协议栈操作的抽象,即Socket是TCP/IP协议的APIWeb Server都是基于Socket编程,又称之为网络编程,网络协议通过一个叫做Socket的对象抽象出来,Socket可以建立网络连接,读数据,写数据。HTTPS:由于http请求是明文的,链路上的任意一个路由,都可以任意修改数据,没有任何安全可言。因此HTTPS就诞生了。...
2019-07-12 11:09:25
226
原创 网络知识总结1
一次完整的HTTP请求:1、域名解析:在系统的hosts文件里查找域名对应的ip地址,没有的话向本地DNS发送一个请求报文,本地服务器必须返回完整的结果,称为递归查询;如果本地DNS服务器没有,则启动一次远程查询,请求根域名服务器,每次返回一部分域名,直到找到域名对应的ip地址并返回一个响应报文,这个机制称为迭代查询。A、查询报文和响应报文都作为UDP数据包发送,即DNS是基于UDP的...
2019-07-12 11:06:40
130
原创 7.11题目总结
目录输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。输入一个链表,反转链表后,输出新链表的表头。输入一个链表,输出该链表中倒数第k个结点输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。给定一个double类型的浮点数...
2019-07-12 11:00:26
134
原创 7.10题目总结
目录请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。用两个栈实现一个队列的pop和push功能把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的...
2019-07-10 10:37:22
126
原创 算法题解与总结(一)
剑指offer二叉树的遍历先序遍历(非递归版使用栈来实现):1、申请一个栈,将头结点压入栈中 cur = head;2、从栈中弹出栈顶元素cur并打印,再将cur的右子节点(不为空的话)压入栈中,最后将cur的左孩子节点(不为空的话)压入栈中;3、重复2步骤,直到stack为空。中序遍历(非递归版使用栈来实现):1、申请一个栈,将头结点压入栈中,cur = head;2、依次将左边界压...
2019-07-06 10:26:31
180
原创 NIO基础介绍(二)文件通道与Buffer底层原理
Buffer: Buffer的三个重要属性:capacity, limit, position; position的值永远都不可能大于limit的值。 先定义一个容量为6的buffer,位置如图所示 如果先读入4个数据,读入完成后position的索引是4;再进行写操作,需要经过Flip:将position指向第一个进行写的位置,即0位置,limit指向原来的...
2019-07-03 18:28:12
484
原创 NIO基础介绍(一)
(1)Java.io中最为核心的一个概念是流(stream),面向流的编程。流是信息的载体。Java中一个流要么是输入流,要么是输出流,不可能同时既是输入流又是输出流。(2)Java.nio中拥有3个核心概念:selector,channel,buffer。在java.nio中是面向块(block)或是缓冲区(buffer)编程的。Buffer本身就是一块内存,底层实现上,它实际上是个数组。数...
2019-07-02 22:57:33
193
原创 Netty介绍及实现第一个程序Hello world
Netty是异步的,事件驱动的网络应用框架。 传统的spring mvc:定义自己的controller实现若干个自己的方法,实现方法后指定URL映射地址,当用户请求与用户对应的地址后,流程就会将请求映射到我们编写的特定的方法上;映射完方法后,先进行一些参数的装配,校验等基本的逻辑,然后开始执行调用service相关的一些代码,完成一些真正的业务处理,处理完后,将结果返回给客户端。 SEDA:...
2019-07-02 18:42:30
248
原创 项目理解(三):邮箱注册登录、拦截器与页面访问
目录1、基本配置:2、注册(邮箱验证)3、登录:4、页面访问显示登录信息5、账号设置6、保障用户数据安全性1、基本配置:pom文件导入包:AOP\thymeleaf\web\devtools\test\mysql-connector-java\spring-boot-starter-mail\mybatis-spring-boot-starter\common...
2019-06-22 10:31:40
1488
原创 项目理解(四):数据库基础
使用MySQL Workbench 可操作性界面来创建数据库(入门工具) 数据库常见的数据类型: Int整数; Varchar指定最大多长的字符串(如密码等不知道有多长,指定最大长度); datetime时间的数据结构; float:浮点类型; text:比较大的文本。 CRUD操作:增删改查操作: INSERT INTO table_name(列1,列2,….) VALUES(值...
2019-06-18 21:34:00
187
原创 项目理解(二):Spring基础总结:Hello word-Thymeleaf-AOP-IOC
写一个hello world: 路径传参PathVariable RequestParam;请求传参method=RequestMethod.GET ; //@RestController里面的方法都以JSON格式输出,不需要其它额外配置//@RestController 注解相当于@ResponseBody和@Controller合在一起的作用,如果web层// 的类上使用了@Re...
2019-06-17 20:55:57
334
原创 项目理解(一):Java语言基础复习
1、版本控制系统:人人网,支付宝等用的都是svn;可以用: github, bitBucket等等。2、封装(实现接口)、继承(继承类)、多态(在类中对已有实现重新实现)。3、Set、List、Map、Random、Date、Math public static void myPrint(int index, Object object) { System.ou...
2019-06-15 21:41:04
181
原创 JVM常用参数解析
JVM的参数类型:其中标配参数和x参数: 用的较多的是xx参数: 运行的java进程编号显示:jps -l ; 1)boolean类型: jinfo -flag 配置项 进程编号(或jinfo -flags 进程编号):用来查看某个进程的配置(在VM options中可以加参数):+(-)PrintGCDetails表示是否打印垃圾收集细节;+(-)UseSerialGC表示是否使...
2019-05-25 12:17:04
341
原创 JAVA新特性(7)Stream接口源码分析
Stream接口继承自BaseStream继承了AutoCloseable接口 【补充】AutoCloseable接口说明: * <p>Streams have a {@link #close()} method and implement {@link AutoCloseable},* but nearly all stream instances do not actual...
2019-05-21 22:56:49
306
原创 JAVA新特性(6)自定义收集器的实现与Collectors类
实现Collector接口,首先在类中实现接口中所有的抽象方法,然后在主程序中用collect传入实现的类的实例 public class CollectorSetTest<T> implements Collector<T,Set<T>,Set<T>> {//简单自定义收集器的实现:将list结果收集到一个Set中 public s...
2019-05-20 22:02:50
830
原创 JAVA新特性(5)Comparator
Comparator接口:JDK1.8中改为函数式接口,提供 : int compare(T o1, T o2); 抽象方法 1.8中Comparator接口提供了一些static方法和default方法。 @Test public void Test1(){ List<String> list = Arrays.asList("nihao"...
2019-05-20 08:55:26
326
原创 Java新特性(4)collect深度解析
【认真读完Collector的JDK源码上的注释文档】 collect:收集器 Collector作为collect方法的参数 Collector是一个接口,它是一个可变的汇聚操作,将输入元素累积到一个可变的结果容器中;它会在所有元素都处理完毕后,将累积的结果转化为一个最终的表示(这是一个可选操作);它支持串行与并行两种方式执行。 Collectors本身提供了关于Collector得常见...
2019-05-19 17:54:54
1410
原创 JAVA新特性(3)stream的理解与使用
流:Stream由三部分构成: 1)源 2)零个或多个中间操作--惰性求值 3)终止操作--及早求值 流的说明 1Collection提供了新的stream()方法 2 流不存储值,通过管道的方式获取值 3 本质是函数式的,对流的操作会生成一个结果,不过并不会修改底层的数据源,集合可以作为流的底层数据源 4 延迟查找,很多流操作(过滤,映射,排序等)都可以延迟实现 @...
2019-05-18 21:06:03
409
原创 JAVA新特性(2)optional类与方法引用
optional类的理解与使用: 1)public static <T> Optional<T> of(T value): 返回value(非空)的实例 public static<T> Optional<T> empty():返回空实例 public static <T> Optional<T> o...
2019-05-18 15:22:08
381
原创 JAVA新特性(1)Lambda表达式
lambda: In programming languages such as Lisp, Python and Ruby lambda is a oparator used to denote anonymous functions or closures , followingthe usage of lambda calculus Lambda表达式的基本语法:(argument)-&...
2019-05-16 11:38:21
631
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人