- 博客(791)
- 资源 (29)
- 收藏
- 关注
原创 带管理界面的app操作、自动化测试平台-sonic
sonic是一个云真机平台,可以在浏览器界面操作手机,手机app,做相关操作。如截图,抓包,调试等等,并能编写自动化测试流程,实现自动化测试。涉及以下三个项目。
2024-01-09 17:13:55 1407
原创 跨平台app测试框架-Appium。支持安卓android或ios的sdk
Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试用例。
2024-01-09 15:43:08 1043
原创 安卓android自动化测试-uiautomator/uiautomator2
很早以前,我用uiautomator+java实践过Android APP自动化测试,不过今天要提的不是uiautomator,而是uiautomator2。听起来uiautomator2像是uiautomator的升级版,但是这两款框架仅仅是名字上比较相似,实际上没有任何关联。先有的谷歌uiautomator,但是只支持java;后来一个名为hexiaocong的开发者基于uiautomator封装了python版本,支持python代码运行;
2024-01-09 15:19:58 164
原创 nginx 日志,格式化,存储,按日切割
server {使用log_format指令定义了一个main的格式,并在access_log指令中引用了它。Win64;我们看到最终的日志记录中都对应了一个,这是因为这几个变量为空。Nginx中通过access_log和error_log指令配置访问日志和错误日志,通过log_format我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过指令来设置缓存,提升性能。其他的根据自己的使用场景定义。
2023-03-28 17:09:27 3481 1
原创 pip/conda/mamba
众所周知,在使用Python语言时有时会需要导入第三方库,而在导入第三库之前需要先安装该库,而安装方式有两种,分别是通过pip install 和 conda install 的方式,那么这两种方式有什么区别呢?Mamba 底层依赖于conda,conda是单线程,Mamba做了优化可多线程下载,Mamba兼容conda的命令。最重要的是Mamba可与conda完美兼容 (将conda执行命令中的conda换做mamba即可)。Mamba的核心部分是通过C++实现,以获得最大执行效率;
2023-03-25 19:11:43 1181
原创 elasticsearch es doc_values和fielddata 、ignore_above
搜索需要用到倒排索引,而排序和聚合则需要使用 “正排索引”。doc_values和fielddata就是用来给文档建立正排索引的。他俩一个很显著的区别是,前者的工作地盘主要在磁盘,而后者的工作地盘在内存。不过对于text字段,doc_values是不支持的,有一种替代方案就是使用fielddata,这是一种把文本字段放到内存中来处理的方式,先直接从磁盘读取每个段的反向索引,然后通过反向索引,反转索引与文档的关系,最后将结果放到JVM堆内存中来处理。
2023-02-03 15:19:29 467
原创 k8s 知识总结2
但是有时候例如Java程序内存泄漏了,程序无法正常工作,但是JVM进程却是一直运行的,对于这种应用本身业务出了问题的情况,Kubernetes提供了Liveness Probe机制,通过检测容器响应是否正常来决定是否重启,这是一种很好的健康检查机制。意思就是deployment是一个pod的配置管理,pod是具体的运行实例(一组容器的运行实例,一个pod下的多个容器互不影响,pod只是一组相同标签属性的容器的统称)用来管理有状态应用,可以保证部署和扩缩的顺序,详细参考 StatefulSet。
2023-01-06 11:56:23 359
原创 es elasticsearch 新增更新索引,新增更新文档
局部更新是:若更新数据为{"a":111},则get整个文档变为{"a":111,"b":2}全量更新是:若更新数据为{"a":111},则get整个文档变为{"a":111}创建一个全新的索引,映射包含调整后的字段或类型。将新的索引的别名设置为原来索引相同名称。若原文档为{"a":1,"b":2}将原有索引的数据迁移到新的索引。只能增加原有不存在的字段。
2022-12-19 10:04:12 1233
原创 爬虫,selenium问题汇总,driver.close,driver.quit(),新的tab
selenium中webdriver关闭浏览器有两个方法,一个是close,一个是quit,为了测试二者的区别,通过代码注释观察了一下区别观察了一下当webdriver.Chrome()时会产生以下进程当python调用chrome程序关闭后,chrome相关的进程也会关闭。使用driver.close()关闭时,若浏览器只打开一个tab,所以会关闭浏览器,chromedriver这个服务进程还存在,可以通过ps -ef|grep chrome查看到。
2022-11-24 18:03:35 246
原创 mongodb 总结
mongo的索引是B树,非聚簇索引,即所有的索引都关联一个recordId(非_id字段,_id索引也要关联recordId),通过recordId再查找数据。
2022-08-11 15:19:12 1438
原创 spring 事务传播REQUIRED 与 NESTED的区别
NESTED 似乎与REQUIRED 是一样的,但是他们是不同的。若关于spring事务传播机制的解释播行为 意义 PROPAGATION_REQUIRES 表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。 PROPAGATION_SUPPORTS 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。 PROPAGATION_MANDATORY ...
2022-05-12 20:28:00 4935 1
原创 字符编号ASCII 和Unicode,与字符编码,utf8,gbk
总结字符编号ASCII 和Unicode类似。仅仅是给某个字一个唯一的编号,并没有规定怎么对字符编码。ASCII 只用一个字节,因为发明比较早,只能标识256个字符,00000000-11111111,里面只给英文字母,和一些特殊字符如空格 进行了编号。Unicode 是为了解决全世界的字符(unicode 同时兼容ASCII 的编号),给每个字符都有一个唯一的编号,比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位。字符编码UTF-8是Unicode.
2022-04-02 11:22:26 1214
原创 java/spring 等相关框架 漏洞原理汇总
JNDI 中的 rmi或ldap 所造成漏洞rmi 客户端与服务端之间 传输的是序列化后的类实例对象,然后在客户端在反序列化生成对象,并初始化调用构造方法。ldap 协议也会造成本地执行远程class文件的问题,不同与rmi,ldap 会加载远程class类文件到本进行实例化构造方法!!!参考:https://liuhuiyao.blog.csdn.net/article/details/121877227log4j的 jndi漏洞log4j-2.x 版本jndi漏洞(使用ldap协议.
2022-03-31 12:34:27 1372
原创 java 加载运行网络jar包
java.net.URLClassLoader中有一个加载网络jar或者class的addUrl方法,不过是protected的,不能通过对象直接调用,可以通过反射调用。代码如下:编写UserService类,用于业务逻辑。package test2;public class UserService { public static void sayHello(String name) { System.out.println("I am "+name);; }..
2022-03-31 10:07:12 1380
原创 AmazonS3 、大文件、分段上传、分段下载,上传下载超时,java.net.SocketTimeoutException问题
关于分段下载客户端请求时:在请求头上增加range属性:bytes=fromByte-toByte。 如 值为bytes=100-200服务端响应时:指定响应status=206,Content-Length=本次传输的byte大小,Content-Range=bytes from-to/文件总大小,Accept-Ranges=bytes可以用迅雷下载,迅雷会先请求一个不带range的,获得总长度然后开多个线程进行range请求。若分段请求完成则 断开不带range的完整请求。...
2022-03-29 15:55:26 3331
原创 关于springmvc 文件下载,nginx 转发去掉了content-length ,浏览器前端下载没有进度,无法显示文件总大小的问题。
若要前端、浏览器显示下载进度,就必须直到问价总大小,要直到文件总大小就必须后端在响应头中加上content-length 即文件总大小。Content-Length:byte大小若响应有content-length时,浏览器会显示文件大小,如:若响应没有content-length时,浏览器只会显示下载多少:java下载代码/** * 下载/导出本地文件 * * @author: * @param request * @param respo...
2022-03-25 18:51:18 4143
转载 分布式id生成策略
一线大厂的分布式 ID 生成方案是什么样的? - 简书1 前言分布式系统中我们会对遇到数据量较大的业务表进行拆分,如:订单表、用户表,但是有时又需要保证id需要在整个系统保证唯一,这个时候就需要使用到分布式id。2 分布式id需要满足什么条件才是符合要求的分布式id生成方案需要保证满足一下条件才算是合理的方案整个系统唯一 id是数字类型,并且在一定范围是趋于增长趋势 id简短,查询效率快3 分布式id的几种方案3.1 UUID优点:代码简单 本机生成,没有性能问题
2022-02-18 16:04:24 442
原创 pdf分页分片预览,pdf截取,pdf转图片
分页预览主要解决两个问题(1)前端下载整个pdf比较慢。(2) 前端可以下载整个文件流,不安全。若要分页预览,也有两种方案:(1)把pdf 转成一张一张的图片。(2)把pdf 再次截取from-to页,然后生成一个新的pdf文件。pdf 分页截取截取生成新的pdf,转图片 代码 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdf...
2022-02-09 13:01:35 2280 1
原创 netty 总结
重要类说明线程模型及原理代码实现tcp连接udp连接websocket连接单线程多线程主从多线程 EventLoopGroup bossGroup=new NioEventLoopGroup(2);//accept线程池 EventLoopGroup workerGroup=new NioEventLoopGroup(2);//具体负责读写及业务处理的工作线程池 ServerBootstrap b = new Server...
2022-01-17 12:39:19 832
原创 在线文件/文档预览/分页分片预览 之开源kkfileview(word转pdf,pdf截取,pdf转图片,Aspose jobConverter , OpenOffice ,libreoffice )
官网文档kkFileView - 在线文件预览git代码地址kkFileView: 使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在线预览 - Gitee.com开源协议apache。可免费商用安装部署..
2022-01-11 14:53:56 5841 4
转载 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
前言见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正。----------超长文+多图预警,需要花费不少时间。----------如果看完本文后,还对进程线程傻傻分不清,不清楚浏览器多进程、浏览器内核多线程、JS单线程、JS运行机制的区别。那么请回复我,一定是我写的还不够清晰,我来改。。。----------正文开始----------最近发现有不少介绍JS单线程运行机制的文章,但是发现很多都仅仅是介绍某一部分的知识,而且各个地方的说法还不统一,容易造成困惑。因此准备梳
2022-01-10 23:00:05 630
原创 mysql 事务与connection,锁,慢sql,如何解决,杀死执行的线程
前提说明navicat中每打开一个窗口就是打开一个connection,关掉窗口就是关掉connection事务与connection测试事务不提交的情况(步骤1)先打开一个窗口,开启一个事务T1插入一条数据,这里不进行提交。由于在一个事务中,所以select 能立刻查出insert的但还没提交的数据。查询是否开启 事务超时,回滚策略。SHOW GLOBAL VARIABLES LIKE 'innodb_rollback_on_timeout';若...
2022-01-06 12:45:59 2226
原创 java 开源项目marshalsec,快速搭建jndi相关server,目前实现了ldap,rmi。
开源项目的git代码地址:GitHub - mbechler/marshalsec编译这里跳过编译时的testmvn "-Dmaven.test.skip=true" -P clean package编译后target目录演示如何启动ldap服务上传编译后的class文件到http服务器把Exploit.class文件放在http服务器上,这里使用nginx服务器,访问地址为http://127.0.0.1/test/Exploit.class.启动ldap...
2021-12-11 18:08:12 2265
原创 java 中rmi 服务的搭建与测试,java rmi 其实是加载远程的序列化后的java对象到本地 进行执行,所以注意rmi的远程代码执行漏洞。
代码:package test.anquan.rmi.api;/** * 服务接口类 * @author * */public interface HelloService { public String sayHello(String message) ;}package test.anquan.rmi.server.impl;import java.io.Serializable;import java.rmi.Remote;import test.an
2021-12-11 18:03:23 1597
原创 log4j-2.x 版本jndi漏洞(使用ldap协议) 演示
核心原理:在打印日志时,遇见${xxx} 会进行解析,并调用jndi的lookup方法,此方法可以通过ldap服务调用把远程class文件下载到本地并执行其类的构造方法。具体log4j源码解析,参考:Apache Log4j2 远程代码执行漏洞分析 - 安全客,安全资讯平台下面模拟log4j 在log打印日志时,加载远程ladp上的Exploit.class文件,并在本地执行!!!测试项目及代码创建一个maven项目<project xmlns="http://mave...
2021-12-11 16:36:22 2658
原创 springboot 的@SpringBootApplication注解与第三方模块的xxx-boot-starter.jar,META-INF/spring.factories,手写starter
@SpringBootApplication注解的解析过程springboot默认扫描启动类所在的包下的主类与子类的所有组件,但并没有包括依赖包的中的类,如引入mybatis-starter,他的包名并不在启动类所在的包下,那么依赖包中的bean是如何被发现和加载的?我们通常在启动类中加@SpringBootApplication这个注解,点进去看@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Docume
2021-11-26 14:54:27 302
原创 nginx 正则路径匹配
更多请参考:https://liuhuiyao.blog.csdn.net/article/details/119459183Nginx路径匹配符号= 表示精确匹配^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。~ 正则匹配(区分大小写)~* 正则匹配(不区分大小写)!~ 区分大小写不匹配!~* 不区分大小写不匹配/ 任何请求都会匹
2021-11-15 12:20:39 20024
原创 上传文件,org.springframework.web.multipart.MultipartFile 为何可重复读(重复获取getInputStream())
debug发现,在上传文件时的MultipartFile 实例的实现类为org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.StandardMultipartFilepart实例的实现类为org.apache.catalina.core.ApplicationPartorg.apache.tomcat.util.http.fileupload.disk.DiskFileItem的g..
2021-11-04 12:31:37 4456 1
原创 关于spring 类内部方法调用aop不生效原因,以及jdk,cglib 动态代理原理
引入:spring的aop我们知道,在spring 的一个A类bean中方法fa调用A中的方法fb,即使fb上有则@Transactional,或者fb 被aop拦截了,此时fb上的所有代理织入操作都不会生效。而如果在另一个类B中调用A中的fb,则代理织入是生效的。但是经过下面实验发现,spring完全可以实现类内部方法调用 代理增强依然生效。但为何spring 不这样做呢?网上没有找到原因,以下为自己的理解原因:Spring aop应该是故意这样做的 内部调用是调用自己,不然就没办法通过代理b..
2021-10-30 10:33:46 630
原创 Cglib的MethodPro的invoke和invokeSuper的区别;为何invokeSuper可以内部调用方法依然能增强,为何jdk代理不能实现invokeSuper的功能
简而言之,invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器链条,就会重新在走一次拦截器链;一。准备环境 Gglib的两个jar包,因为Cglib使用了ASM生成子类;二。代码准备public class Target { public void a() { System.out.println(" a 方法")..
2021-10-30 09:27:47 660
原创 Nlp相关框架总结
Jieba具体参看:https://github.com/fxsjy/jieba/tree/jieba3kSnowNlp地址: https://github.com/isnowfy/snownlp/中文分词(Character-Based Generative Model) 词性标注(TnT3-gram 隐马) 情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决) 文本分类(Naive Bayes) 转换成拼音(Trie树实现的最大匹.
2021-07-05 11:39:28 526
原创 分布式事务 四种方案
简述分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。1. 运行过程1.1 准备阶段协调者询问参与者事务是否执行成功,参与者发回事务执行...
2020-12-09 10:03:45 701
转载 一次HTTP,HTTPS请求的过程
HTTP请求的完全过程1.1 浏览器根据域名解析IP地址 浏览器根据访问的域名找到其IP地址。DNS查找过程如下:浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否是有域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束。 系统缓存:如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。 路由器缓存:如果系统缓存也没有找到,则...
2020-12-09 10:02:17 1560
原创 零拷贝底层方法-java,kafka、netty零拷贝
先提出两个问题:IO过程中,哪些步骤进行了拷贝?哪些地方零拷贝?Java支持哪些零拷贝?带着这俩问题,我们一起来看下面的探究。哪里听说过零拷贝?真的0次拷贝吗?相信大家伙在以往的学习中,或多或少在下面这些组件、框架中有听说过零拷贝 (Zero-Copy)?KafkaNettyrocketmqnginxapache什么是零拷贝?零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络.
2020-12-09 10:01:28 418
原创 java 零拷贝
Java零拷贝机制解析Linux提供的领拷贝技术 Java并不是全支持,支持2种(内存映射mmap、sendfile);NIO提供的内存映射 MappedByteBuffer首先要说明的是,JavaNlO中 的Channel (通道)就相当于操作系统中的内核缓冲区,有可能是读缓冲区,也有可能是网络缓冲区,而Buffer就相当于操作系统中的用户缓冲区。MappedByteBuffer mappedByteBuffer = new RandomAccessFile(file, "r").
2020-12-09 10:00:53 339
原创 redis 设置过期时间的问题、以及过期策略、订单取消,延迟队列+微信红包,发布订阅
设置过期时间redis有四种命令可以用于设置键的生存时间和过期时间: EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒 PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒 EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳 PEXPIREAT <KEY> <t.
2020-12-09 10:00:17 5961 3
原创 在线执行java源码代码的实现、手动编译编码并执行
编译及执行类的封装package test3;import javax.tools.Diagnostic;import javax.tools.DiagnosticCollector;import javax.tools.FileObject;import javax.tools.ForwardingJavaFileManager;import javax.tools.JavaCompiler;import javax.tools.JavaFileManager;import java
2020-12-09 09:59:20 1248
原创 java HashMap的线程不安全的体现、扩容2次幂,jdk1.7 扩容链表死循环。
为何每次扩容都是2的n次幂hashMap table的长度为2^n 原因jdk1.8的index索引计算方法为 (table的长度-1)&key的hash值(1)扩容时要么是元索引位置、要么是源索引位置+原数组长度、可以减少重算hash。下图 n-1是数组长度,其中(a)是16、(b)是a扩容后长度为32。此时我们新的index 要么是原位置,要么是 原位置+原数组长度。(2)可以减少碰撞2^n-1全是1111..、与key的hash相&。会保留原来hash的特.
2020-12-09 09:56:53 317 1
原创 秒杀系统设计几个重要点
参考:https://www.zhihu.com/question/54895548/answer/923987542?clicktime=15790819791、前端网页静态化+cdn2、事先按钮不可点+动态链接后端对链接地址加密、开始秒杀时、前端请求获得链接地址的接口、并对链接地址解密、然后开始请求。3、微服务+分布式系统尽量让请求均分到每台微服务4、数据库、服务 单独部署、不要影响主业务系统如果秒杀系统真的挂了、也不会影响到其他核心服务。5、库存预热、redis集群,事
2020-12-09 09:56:35 342
图像标注-labelImg_windows_v1.7
2020-10-25
nlp工具 word2vec nltk textblob crf++ 机器人 中文翻译 繁体转简体 关键词 主题 命名体识别 分词 聚类 词性标注 词向量
2018-07-20
CRF++ 0.58.tar.gz源文件for linux和.zip for windows
2017-01-18
jasperReports spring mvc 整合代码
2016-09-02
俄罗斯方块
2014-01-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人