- 博客(41)
- 资源 (2)
- 收藏
- 关注
原创 如何防止seesionId泄露
3、不在URL中传递SessionID:避免将SessionID直接暴露在URL中,因为URL可能会被记录在日志文件、浏览器历史记录或其他地方,导致SessionID泄露的风险。1、设置合理的Session过期时间:通过在应用程序的配置文件中设置适当的Session过期时间,确保Session在一定时间内失效并自动注销。2、定期更新SessionID:定期更新会话的SessionID,可以减少被猜测或窃取的风险。9定期审查代码和配置:定期审查应用程序的代码和配置,确保没有存在会话泄露的漏洞。
2024-08-14 00:57:06 441
原创 为什么使用B+数字作为mysql的索引数据库?
MySQL使用B+树作为索引数据结构的主要原因是B+树在大多数情况下能够提供高效的数据检索和插入/删除操作。
2024-08-14 00:52:56 192
原创 自定义类加载器打破双亲委派
我们比较熟悉的 Tomcat 服务器为了能够优先加载 Web 应用目录下的类,然后再加载其他目录下的类,就自定义了类加载器 WebAppClassLoader 来打破双亲委托机制。这也是 Tomcat 下 Web 应用之间的类实现隔离的具体原理。
2024-08-12 23:44:37 164
原创 volatile和synchronized的区别
而 synchronized 则可以保证变量的可见性、有序性和原子性,这里的有序性并不是代表能禁止指令重排序,它的本质是让多个线程在调用synchronized修饰的方法时,由并行(并发)变成串行调用,谁获得锁谁执行,但并不能保证内部指令重排序问题。●volatile 本质是在告诉 JVM 当前变量在工作内存中的值是不确定的,需要从主存中读取;(1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;
2024-08-12 23:40:43 357
原创 常用git指令
4. git add / git commit /git push (这几步我基本都是在IDE上用快捷键完成,很少自己敲命令)7. git stash /git pop (有的时候临时会用,把代码放到暂存区中)8. git reset --hard (代码写烂了,直接回退吧)2. git checkout -b (新建分支)5. git fetch (获取最新的修改信息)3. git checkout (切换分支)1. git clone (克隆代码)6. git merge (合并代码)
2024-08-12 23:38:05 114
原创 java优先级队列的数据结构?
数组的下标表示节点的位置,通过下标可以计算出节点的父节点、左子节点和右子节点的位置。优先级队列不一定是通过数组来实现的,但是数组是实现优先级队列的常见方式之一,因为它具有良好的随机访问性能。Java 中的优先级队列的数据结构是基于堆(Heap)实现的。二叉堆是一个完全二叉树,它满足堆的性质:对于每个节点,父节点的优先级要高于或等于子节点的优先级。需要注意的是,Java 中的优先级队列(PriorityQueue)并不是线程安全的,如果在多线 程环境下使用,需要进行适当的同步措施。
2024-08-12 23:35:28 181
原创 什么时候对象会到老年代?
当 Eden 区满时,会触发 Minor GC(新生代垃圾回收),存活的对象会被复制到其中一个 Survivor 区,而非存活的对象会被清理掉。1、在 Survivor 区中,当对象经历了一定次数的 Minor GC 仍然存活时,它会被晋升到老年代。如果有足够的空间,那么新生代的对象可以直接晋升到老年代,而不需要经过复制。如果对象的大小超过了虚拟机参数 -XX:PretenureSizeThreshold 设置的阈值,则该对象会被直接分配到老年代,而不经过新生代。
2024-08-12 23:34:53 253
原创 final关键字
■ 保证线程安全性:在多线程编程中,使用 final 关键字可以确保变量的可见性和一致性。当一个 final 变量被初始化后,其他线程就可以安全地读取该变量的值,而不需要额外的同步机制。● final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。● final 变量在多线程环境下提供了可见性和线程安全性。● final变量不能够再次赋值。● final方法不能被重写。● final类不能被继承。
2024-08-12 23:34:17 128
原创 哪些对象可以作为 GC Roots 呢?
● JNI(Java Native Interface)引用的对象。● 本地方法栈(Native 方法)中引用的对象。● 虚拟机栈(栈帧中的局部变量表)中引用的对象。● 方法区中类静态属性引用的对象。● 方法区中常量引用的对象。● 所有被同步锁持有的对象。
2024-08-12 23:32:34 119
原创 哪些对象可以作为 GC Roots 呢?
● JNI(Java Native Interface)引用的对象。● 本地方法栈(Native 方法)中引用的对象。● 虚拟机栈(栈帧中的局部变量表)中引用的对象。● 方法区中类静态属性引用的对象。● 方法区中常量引用的对象。● 所有被同步锁持有的对象。
2024-08-12 23:31:56 98
原创 AtomicInteger的原理
CAS是一种无锁算法,它通过比较内存中的值和期望的值,如果相等则进行更新,否则不做任何操作。如果V的值等于A,则将V的值更新为B,否则不进行任何操作。1、内部使用volatile修饰的int值:AtomicInteger内部使用一个volatile修饰的int类型的变量来保存整数值。volatile关键字保证了变量的可见性,即当一个线程修改了该变量的值,其他线程能够立即看到最新值。3、循环重试:由于CAS操作存在竞争情况,多个线程可能同时尝试更新变量的值,但只有一个线程能够成功。
2024-08-12 23:31:22 226
原创 Linux常见的指令
cat file.txt - 将文件 "file.txt" 的内容输出到终端<br>cat file1.txt file2.txt > combined.txt - 将文件 "file1.txt" 和 "file2.txt" 的内容合并并输出到 "combined.txt"touch file.txt - 创建名为 "file.txt" 的空文件<br>touch -a file.txt - 更新文件 "file.txt" 的访问时间。
2024-08-12 23:30:16 368
原创 为什么java是值传递?
对于对象, Java 中使用的求值策略就是传共享对象调用,也就是说,Java 会将对象的地址的拷贝传递给被调函数的形式参数。值传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果是传递副 本,那就是值传递,否则就是引用传递。对于基本类型,将值拷贝到形参。
2024-08-12 23:27:39 89
原创 为什么PageHelper在数据量大的时候存在性能问题?
● 比如B+数这样的索引一般是连续的,limit是可以使用到索引,在limit相关的字段上添加索引。limit索引要注意,防止索引失效,可以根据实际情况优化sql,比如连接表之前、子查询中进行分页。● 在进行分页查询时,PageHelper 默认会一次性将整个查询结果集加载到内存中,然后根据分页参数返回指定范围的数据。当数据量很大时,这将占用大量的内存空间,可能导致内存不足或造成频繁的内存交换,从而影响性能。● PageHelper的原理实在sql的最后部分进行分页。
2024-08-12 23:26:34 173
原创 接口自动化测试-request 【4 认证体系】
1. http basic使用chaeles抓包查看此类请求在自动化测试中,可以使用auth参数传递认证信息2. request 中的http basic认证import requestsfrom requests.auth import HTTPBasicAuthdef test_oauth(): r = requests.get(url = "https://httpbin.testing-studio.com/basic-auth/Yc/31415",
2021-04-29 09:33:28 169
原创 Session Cookie Token区别
cookie:浏览器接受服务器的set-cookie指令,并把cookie保存到电脑上,每个网站保存的cookie只作用于自己的网站session:数据储存到服务端,只把关联数据的一个加密串放到cookie中标记tokensession与token的区别token是一个用户请求时附带的请求字段,用于验证用户与权限session可以基于cookie,也可以基于query参数,用户关联用户的相关数据跨端应用的时候,比如android原生系统不支持cookie需要用token识别用户需要.
2021-02-05 16:33:57 155
原创 GET与POST的区别
请求行不一样post带 content-Length 和content-type区别总结:http 的method字段不一样post可以附加body,可以支持form、json、xml、binary等各种数据格式行业通用的规范无状态变化的简易用get请求数据的写入与状态修改建议用post...
2021-02-05 15:53:33 128
原创 用Curl命令发送请求
使用chrome开发者工具分析网络请求Copy as crul:批量化的测试,批量化的任务※ Curlcurl命令:https://ceshiren.com/t/topic/1065curl --helpcurl https:// | jq 格式化输出
2021-02-05 14:42:07 204
原创 Postman发送请求
增加断言:在test下面变量:环境变量与全局变量变量引用:{{variableName}}添加Cookie:Cookie可以用来鉴权参数传递:获取需要的值将获取到的值设置为环境变量在需要验证的接口中引用环境变量中保存的值...
2021-02-05 12:58:41 146
原创 接口测试基础理论随便记一记
接口测试的必要性行业成熟方案更早地发现问题更快地质量反馈Rustful软件架构风格post:新增或者更新get:获取资源put:更新资源delete:删除资源RPC协议Remote Procedure Call,以本地代码调用的方式实施远程执行DubboJava上的高性能RPC协议,Apache开源项目,由阿里捐赠gRPCThrift接口协议分析协议分析工具网络监听:网络层,适合底层代理:适合httptcpdump...
2021-02-05 10:12:46 65
原创 【python UI自动化测试框架】 1、设计思路
1、设计思路PageObject设计模式对UI及测试进行封装PO改进测试数据的数据驱动数据步骤的数据驱动自动化异常处理机制Pytest单元测试2、PageObject改进3、测试步骤的数据驱动核心思想:对测试步骤进行封装利用yaml编写测试用例意义:提高测试代码的编写效率异常排查效率高代码可维护性高Yaml格式:...
2021-02-02 09:52:54 518
原创 【Python自动化测试】 Appium安装与使用
Appium安装adb:andoid的控制工具,用于获取android的各种数据和控制Appium Desktop:内嵌了appium server和inspector的综合工具Appium Server:appium的核心工具,命令行工具(被Appium Desktop替代)Appium client:各种语言的客户端封装库,用于连接appium serverpython、java、ruby、js…环境搭建python客户端:pip install appium-python-c
2021-01-30 16:32:39 376 2
原创 【python自动化测试】自定义AppiumServer
1、自定义AppiumServergit clone用webstorm打开appium源代码,进行修改从源码运行git clone https://github.com/appium/appium.gitcd appiumnpm install # 安装所有依赖npm run buildnode .npm install -g npm #更新npm npm版本可能会踩坑,可以试试安装新版本的npm2、重新编译Uiautomatorgit clonegradle 用AS打
2021-01-30 09:39:31 169
原创 【Python】Appium源码
客户端webdriver 自动化的endpointappium serverNode.js系列包appium体系架构package.jsonadb shellChromeDriver底层引擎Uiautomator JavaWDAseleniumuiautomator2-server协议appium-uiautomator2-server -> appium-uiautomator2-driver -> appium-android-driver.
2021-01-30 09:02:08 190
原创 【Python自动化测试】WebView技术原理
1、uiautomator定位不同设备可能不同2、映射到本地chromeappium -g appium.log | tee # 保存日志域套接字 概念进程与进程之间通讯的一种方式客户端与服务端建立连接,需要有共同的套接字,和相应的服务端的端口号套接字会处于监控状态,来监听客户端发来的请求获取webview的进程:adb shell cat /proc/net/unix | grep webview查看进程对应的应用:adb shell ps | grep 10039端口
2021-01-29 14:45:00 426
原创 【Python自动化测试】Appium进阶操作
Appium模拟操作测试过程中模拟来电,来短信模拟网络的切换运行中获取系统的日志截图模拟发短信http://appium.io/docs/en/commands/device/network/gsm-call/模拟器的操作yc@yc-virtual-machine:~$ emulator -list-avdsPixel_2_API_28avd的配置:“avd”: “Pixel_2_API_28”capability的进阶网址client指令最大时间间隔指定设备udi
2021-01-29 14:09:03 136
原创 【Python 自动化测试】Hybrid 混合应用
1、渲染后的方式,用uiautomotor方式2、原生的html结构,需要转换上下文:self.driver.switch_to.context()3、获取手机webdriver版本:adb shell pm dump com.android.webview | grep version可以添加‘chromedriverExecutableDir’:’/ /’可以自动匹配,可以指定maping字典‘chromedriverChromeMappingFile’:‘json文件’4、logcat
2021-01-29 13:11:08 226
原创 【python自动化测试】Web App应用测试——占坑
需要配置driverhttps://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.mdadb shell pm list packageadb shell pm list package | grep browseradb shell pm dumpadb shell pm dump package:com.android.browser | grep versionadb
2021-01-28 15:05:25 90
原创 【python自动化测试】appium参数化用例
在实际测试过程中,有很多测试步骤一样但参数不同的情况。这种情况下,我们可以通过参数化实现编写一个测试,该测试用例可以完成所有相同步骤的测试。参数化需要用到pytest的装饰器:@pytest.mark.parametrize()参数化实例:from appium import webdriverfrom appium.webdriver.common.mobileby import MobileByfrom hamcrest import *import pytestclass TestH
2021-01-28 13:12:01 328
原创 【Python自动化测试】appium的两种断言方式
1、普通断言普通断言在selenium时已经很熟悉了,不做过多介绍a = 10b = 20assert a < b(上面错了就结束了)assert 'h' in 'this'(下面不会执行了)2、hamcrest断言简介:PyHamcrest是一个编写匹配器对象的框架,可以定义“匹配”规则,提高可读性及开发性能,可以自定义匹配器。安装:pip install Pyhamcrest基本使用:from hamcrest import *class TestHamcrest
2021-01-28 11:00:47 2043
原创 【Python自动化测试】Appium get_attribute使用方法
官方文档文档不详细,可以下载源代码(以安卓为例)用AndroidStudio打开,可以查看可以过去的所有属性值CHECKABLE(new String[]{"checkable"}),CHECKED(new String[]{"checked"}),CLASS(new String[]{"class", "className"}),CLICKABLE(new String[]{"clickable"}),CONTENT_DESC(new String[]{"content-desc", .
2021-01-28 10:45:19 594
原创 Linux安装JDK1.8版本,附带下载JDK1.8链接(jdk-8u151-linux-x64.tar.gz)
1、进入 Oracle 网站 下载合适的 JDK1.8 版本官网下载可能不太方便,我上传到了百度网盘:百度网盘链接jdk-8u151-linux-x64.tar.gz2、创建目录在/usr/目录下创建java目录,mkdir /usr/local/javacd /usr/local/java把文件 jdk-8u151-linux-x64.tar.gz 放在/usr/local/java/目录下。3. 解压 JDKtar -zxvf jdk-8u151-linux-x64.tar.gz4.
2021-01-27 21:12:07 3043 1
原创 解决运行uiautomatorviewer时报错-Djava.ext.dirs=/usr/local/android-sdk-
今天在运行uiautomatorviewer时,遇到了一个报错:-Djava.ext.dirs=/usr/local/android-sdk-linux/tools/lib/x86_64:/usr/local/android-sdk-linux/tools/lib is not supported. Use -classpath instead.Error: Could not create the Java Virtual Machine.Error: A fatal exception has
2021-01-27 18:30:15 2164
原创 Linux下安装node.js可靠方法
一、下载在官方网站下载二进制文件:如果你的电脑cpu是:intel,请下载Linux Binaries(x64)ARM,请下载Linux Binaries(ARM)二、安装与配置环境变量1、将下载后的压缩包文件解压到任意文件夹,比如:/usr/local/lib/nodejs sudo mkdir -p /usr/local/lib/nodejs sudo tar -xJvf node-v14.15.4-linux-x64.tar.xz(这里替换成下载的压缩包名) -C /usr/
2021-01-25 20:30:44 175
原创 最新超简单方法:Linux下一行代码安装jdk
1、第一步,去官网(点击这里)下载jdk。tips:请选择对应的RPM版本,只有RPM版本可以一行安装。由于博主的电脑是Intel的,所有我选择了x64平台的RPM版本2、第二步,在下载目录下执行一下命令rpm -hvi jdk-15.0.1_linux-x64_bin.rpmtips:不出意外的话,jdk已经安装成功了。如果没有安装rpm或者缺少依赖导致安装失败,则根据命令框提示安装rpm或者安装依赖。3、验证安装是否成功java -version执行以上命令后,如果显示jav
2021-01-06 09:56:51 134
原创 iteritems、iterrows、itertuples——DataFrame的迭代遍历
iteritems、iterrows、itertuples——DataFrame的迭代遍历Iterate迭代;重复;重新描述;反复;反覆迭代1、iteritems()遍历 DataFrame 成(column name, Series)对.column name——被遍历 DataFrame对象的列标签.Series——以index为index,以该列内容为data....
2019-08-10 00:32:15 1449
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人