自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

双链表

双链表的增删改查功能实现

  • 博客(104)
  • 收藏
  • 关注

原创 git。。。

1

2022-08-13 22:14:27 290 2

原创 云计算和云服务,云计算

1

2022-08-07 01:11:53 155

原创 python中哈希表和set的使用

1

2022-07-29 22:48:36 981

原创 python条件语句,循环

1

2022-07-29 21:00:17 222

原创 python-list和tuple

1

2022-07-29 17:19:18 132

原创 字符编码和浮点型计算精度丢失问题

1

2022-07-27 20:15:14 179

原创 python基础

python基础语法

2022-07-27 18:51:18 176

原创 编写selenium脚本的步骤

selenium编写脚本步骤:1.编写测试脚本case2.将case放入套件中四种方式:将方法一个一个放入将类一个一个放入将类放入不同的子套件中,在将每个子套件放入总的套件中将相关文件名的所有文件放入套件中3.设置测试报告路径及测试报告文件名,和测试报告的标题,描述等相关信息4.运行套件编写测试脚本case的步骤:1.定位元素2.对元素进行操作3.加上断言操作判定输入与输出结果是否一致还可能加入数据驱动等操作(数据驱动即将数据以变量参数的形式传入)数据驱动用注解data,fil

2022-05-07 21:12:48 1647

原创 自动化测试相关

什么是自动化测试?脚本语言通过浏览器驱动对界面元素进行操作,进行的一系列和ui相关的测试;即用程序控制浏览器去做事情,代替手工操作浏览器。自动化测试的前提:1:项目本身的需求不经常变化,比较稳定2:因为自动化测试脚本的编写需要耗费大量的人力和资源,所以需要根据公司的人力状况和发展来量力而行自动化测试的优点;代替手工测试,自然是能节省人力和资源。什么时候用自动化测试?一般在回归测试中用自动化测试,因为自动化测试脚本本身需要耗费大量的资源去做,如果开发出的测试脚本只用一次,那还编写测试脚本干嘛,

2022-05-07 00:12:39 402 1

原创 linux中的free命令和内存分析

linux中输入free后,显示的内存有total,used,buffer/cached,free等linux系统会将内存中的很大一部分用来作为内核缓冲或者缓存,这样做的目的是提高了访问数据的效率,大多数数据只需要内核缓冲中读取或者写入,不需要访问磁盘了。所以一般情况下buffer/cached会很大。另外,内存管理是先分配后使用,所以使用的内存代表分配的空间,而非实际使用的内存。total:物理内存大小used:实际分配使用的内存大小free:未分配空间大小buffer/cached:临时分

2022-05-05 13:57:17 840

原创 java最大线程数

-Xms初始堆大小。如:-Xms256m-Xmx最大堆大小。如:-Xmx512m-Xmn新生代大小。通常为 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 个 Survivor 空间。实际可用空间为 = Eden + 1 个 Survivor,即 90%-XssJDK1.5+ 每个线程堆栈大小为 1M,一般来说如果栈不是很深的话, 1M 是绝对够用了的。-XX:NewRatio新生代与老年代的比例,如 –XX:NewRatio=2,则新生代占整个堆空间的1/3,老年代占2/3

2022-04-24 19:16:06 3771 1

原创 死锁和线程安全

死锁:多个线程之间互相等待对方释放资源,从而造成程序阻塞运行的现象。如何避免死锁?线程同步。包括:临界区,互斥对象,事件对象,信号量。java中常见的同步方式包括互斥锁synized,重入锁,voliate关键字,阻塞队列,局部变量,原子变量。线程安全问题1:是指多个线程对同一个全局变量进行修改,需要用synized或者lock对每个线程修改变量加上锁。2:有读有写时,给全局变量加上volite关键字。...

2022-04-16 13:50:51 449

原创 索引失效的情况

索引失效的几种情况:1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用的第一部分,则不会使用索引3.like查询以%开头4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引  6.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描7.

2022-04-15 10:19:05 345

原创 对缓冲区和缓存的认识

缓存区是内存和cpu之间的存储区,用来存储cpu多次从内存读取到的数据,多次读取同一变量,就会将该变量放到缓存区中,当再次调用时直接从缓存区取,不从内存中取,当内存中该变量改变时,这种情况会导致内存不可见问题。缓冲区是内存中的存储区。缓冲区分为内核缓冲区和用户缓冲区。内核缓冲区是网络传输,文件io,控制台输入输入等操作的“中转站”。作用:1.降解高速和低速设备之间的速度差异。例如:文件io:write操作将数据发送到内核缓冲区,剩下的操作由操作系统负责,当缓冲区的数据到达一定大小时就全部一次性写

2022-04-14 23:33:15 1645

原创 线程池。。。

一.newfixedthreadpool(优秀线程池)目的:线程池中的最大线程数规定了创建线程数的最大数量优点:减少了创建线程和销毁线程的开销,提高了性能。缺点:核心线程中的线程空闲时回占用资源线程池的核心类:Threadpoolexector线程池中的核心组件:1.阻塞队列2.核心线程数工作流程:当线程数没到和核心线程数的大小时,新的任务就会创建新的新的线程;当线程数达到核心线程数大小时,就会看核心线程里面有没有空闲线程,如果有就直接使用空闲线程,否则放到阻塞队列中,当有空闲线程,再把任

2022-04-14 13:26:39 1278 1

原创 同步和异步,阻塞非阻塞IO

IO中的同步和异步:同步:io操作是由应用程发起和进行的,操作系统听候应用程指挥,例如应用程序进行read后操作系统就会进行read操作。表现为必须收到io操作的结果后线程才能继续向下执行。异步:io操作是由应用程序发起,但是由操作系统去执行的,即分配给了操作系统这个io任务之后,自己去干自己的事情,不会等待io操作的返回结果,当操作系统执行完io操作后就会通知应用程:您分配给我的io任务我已经做完了 。BIO(同步阻塞):传统的java.io包下的字节输入输出流。缺点:当read或者write容

2022-04-14 00:57:24 1226

原创 进程间通信方式

2、几种通信方式的比较管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系,类似于阻塞队列。有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段

2022-04-13 14:12:39 60

原创 初识Spring

Spring: 加快开发效率和安全性所有的Spring类型底层都是实现的SpringframeworkIOC:控制反转:将对象的管理交给Spring或者IOC机制进行管理,包括对象的创建,销毁,查询等等。控制反转一般是通过DI(依赖注入)实现的使用IOC的好处:能够实现解耦,例如创建对象是通过向方法里传入属性对象,而不是属性对象的属性,这样如果属性对象需要更改,只需要更改属性对象本身。使用SpringIOC的一种方法:1.创建容器2.给类加上注解,即将bean对象放入容器中注解的类型根据业

2022-04-06 20:08:54 81

原创 redis相关

缓存分为本地缓存和分布式缓存本地缓存:缓存和服务在一个主机上分布式缓存:缓存在单独的主机上,服务是分布式部署,实现负载均衡。本地缓存一般用Spring cache分布式缓存用redis缓存一般为键值对结构,redis的k值必须是字符串,v值可以是字符串,hashmap,集合,有序集合,列表。缓存的优势:1.查询速度快:放在内存中,并且数据结构为hashmap,查询速度极,增加服务器查询速率。2.支持事务,所有的操作包括都是原子性的3.为单进程单线程模式,避免传统数据库那样带来的高并发负载问

2022-03-29 22:06:01 366

原创 软件开发,,,

软件开发流程:需求分析-软件计划-软件设计-编码-测试-维护需求分析:产品经理软件计划:项目经理软件设计:开发人员:数据库设计,前后端接口设计等待测试人员:编写测试用例(功能测试,界面测试,性能测试,兼容性测试,安全测试等等)编码:开发人员:进行编码测试:根据测试用例进行测试维护:维护人员进行维护禅道:管理整个软件开发周期产品经理提需求,项目经理创建项目后领需求,然后安排开发人员和测试人员,并根据具体的功能点分配给具体的开发人员和测试人员,然后开发人员和测试人员领取自

2022-03-26 15:14:31 910

原创 内存泄漏,,

内存泄漏是指没有及时释放内存,如果多次内存泄漏叠加,会导致内存溢出,表现为短时间内占满整个内存;内存溢出是指空间不足,内存溢出是相对的,可以相对数组,也可以相对整个内存.内存溢出导致的常见原因:1.频繁的创建对象或者变量导致内存溢出,例如死循环.2.一次占用的空间很大,且不及时释放,比如数据库的查找,select *操作容易产生内存溢出,解决方法是使用分页功能....

2022-03-26 12:08:37 1391

原创 堆的结构和实现

堆是由数组实现的队列,由完全二叉树层序放置。```cpackage com.liuheizi.demo;import java.util.Arrays;class NullArrayEcxeption extends RuntimeException {//自定义异常 public NullArrayEcxeption() { super(); } public NullArrayEcxeption(String message) {

2022-03-23 23:51:04 55 1

原创 java 内存划分和垃圾回收机制

java 中的数据类型分为八种基本类型和引用类型,可以作为成员变量(放堆中),局部变量(放虚拟机栈中),静态变量(放方法区中).jvm内存划分:堆:存放成员变量,线程共享虚拟机栈: 存放局部变量,线程私有方法区:存放静态变量和类信息,线程共享程序计数器 :记录程序运行的位置,线程私有本地方法栈: 存放native相关信息.线程私有堆是线程共享的内存空间,虚拟机栈是线程私有的内存空间,每个线程都有自己的虚拟机栈空间GC(垃圾回收)机制回收的是堆和方法区中的内存,主要是堆内存.1.方法区内存:

2022-03-21 21:10:33 1395

原创 事务...

事务的四个特性:原子性:要么同时执行,如果中间出错,进行回滚,也就是相当于这个事务没有进行,数据库的数据还是这次事务之前的数据.一致性; 对数据的操作要逻辑正确.持久性:事务完成后要将数据提交到数据库中.隔离性:在并发环境中,事务之间不会影响到各自的操作.隔离级别: 1.读未提交 :事务A可以读事务B未提交的记录数据,会造成脏读问题2.读已提交 :事务A只能读到已经提交到数据库的数据,解决了脏读问题,但存在不可重复读问题,即事务多次读数据库中的数据,读到的数据不一样,因为其它事务将数

2022-03-20 18:36:51 1099

原创 部署项目过程

在linux 应用商店下载对应的软件,(主要是jdk,mysql,tomcat)注意,因为war包里的class文件已经使用了相应的jar包,所以软件版本要对应,主要是mysql和tomcat.selevt3和tomcat8对应,mysql和connecter包版本要一致.如果是web文件,将war包拉到webapps目录下即可.托拽需要下载rz.yum install 软件名yum install tree等....

2022-03-15 15:54:21 2022

原创 linux 常用快捷键

常用linux命令:切换目录: cd …cd 目录增加文件: mkdir 一个文件或者目录文件夹mkdir -p 多级目录文件删除文件: rm 一个文件或者文件夹rm -r 多级目录文件cp :复制加粘贴到另一个文件里mv:剪切加粘贴到另一个文件里...

2022-03-13 15:21:55 1661

原创 servelt学习

网络传输是在数据经过网卡五层协议后在网络设备上传输的过程.五层协议至关重要cookie设置时间限制,保证安全性,在服务器端通过session按时结束cookie数据调用getsession函数将自动给浏览器端发送sessionid cookie,如果是用户第一次访问就新建一个session对象并返回,如果已经访问过就拿到之前的session对象.如何判断是初次访问还是已经访问过,是通过sessionid来决定,如果服务器端的hash表中存在对应的sessionid就说明已经访问过,否则新建sessio

2022-03-08 13:50:38 119

原创 tcp连接和收发数据过程

tcp可靠性:1.应答机制和超时传输.若传输成功,接收方接收到数据,接收方会发送一个ack给发送方,告诉发送方已经收到刚刚发送的数据;如果在一定数间内发送方没有接收到ack,发送方就会重新发送数据,在若干次重传之后,若发送方还没有收到ack,就会判定网络传输异常,会断开连接,因为连接占据资源.每次重传的时间间隔越来越久,一般成倍速增加.发送方未收到ack,无法判定数据发送到接收方失败还是返回ack在传输过程中失败.tcp建立连接:new socket对象目的:1.创造通信数据,或者通信资源,连接对

2022-02-20 17:46:20 1913

原创 http服务器

http服务器:大部分都是按行从网卡读和写,当读请求和响应里的body部分时,不能按行读,因为换行符可能是body里的一部分,写基本都是按行写.socket对象在最后需要关闭,关闭socket也将客户端和服务器端的相关流关闭了.http服务器代码:import java.io.*;import java.util.HashMap;/** * @author :liuheizi * @date :Created in 2022/2/16 16:46 * @description:反序列化构

2022-02-17 17:56:11 1945

原创 合并冲突.

分支对应的日志按照时间顺序排列.分支的界面就是时间上最近的日志合并:将合并对象的所有日志合并到被合并对象当中,如果两个分支都对同一个文件做了处理,则会产生合并冲突,只需要在被合并分支对象中再commit一次即可,其实合并的时候不管有没有冲突,合并的分支日志已经全部弄到被合并分支里面去了,冲突只是在产生的时候在被合并对象里再commit一次,并没有实际的作用具体解决冲突指令:1.对最新日志下的相关文件进行处理,注意,是以时间最近的日志为标准进行修改的,修改是任意的,增删改查啥都可以.2.git a

2022-02-11 12:03:10 791

原创 git使用

git使用:初始化本地仓库后,然后连接到远程仓库,然后选择所有文件,标注提交信息,然后push出去,进行同步.(第一次连接需要在gitbash窗口设置从git推送到远程仓库的用户名和邮箱.)连接只用建立一次,之后只需要这三步就可:如果push不出去,使用git push -u origin master命令强制推送回退版本:将之前发布到远程仓库过的版本回退到本地仓库中,如需再同步远程仓库,push即可.1.查看分支2.选择分支3.git log命令2.回退版本:克隆分支项目:

2022-02-09 00:14:12 318

原创 流的简单认识

流对象是数据传输的通道,用于内存和本机其它物理设备进行数据传输,一般用缓冲区提高效率.流在文件io中和网络传输中使用比较普遍.在文件io中为内存和外存设备进行数据传输,在网络传输中是内存和网卡之间进行数据传输,表现为将数据写入本机网卡或者从网卡中读取数据.数据在网卡中会最终封装成帧发送到网络传输设备上进行传输.流分为字节流和字符流.字节流代表只能传输字节或者字节数组(用缓冲区),字符流表示只能传输字符或者字符数组,即字符串.io流中文本文件需要用字符流进行数据传输,字节文件需要用字节流进行数据传输;网络

2022-02-07 16:28:12 1179

原创 udp和tcp

udp服务器和tcp服务器.udp服务器按照数据报的形式发送,数据包即字节数组,然后经过五层协议在网络上进行传输.tcp服务器面向字节流,也即字符串,import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.nio.Buffer;/** * @author :liuheizi * @date :Created in 2022/2/5 15:09 * @description:TCP代

2022-02-05 20:26:57 1862

原创 ping命令及原理

ping命令原理:利用ICMP(网络控制协议)从主机发送回送请求,对应主机接收处理,发送回送响应消息给原主机,利用该原理测试本机与本机之间的TCP/IP协议是否正常,或者测试本机与其它主机之间的网速,或者还能测试本机网卡有没有问题等等.本机与本机之间进行通信时,本机的ip地址在window环境下默认是127.0.0.1,也可以修改为127开头的其它网络ip,locallost默认是127.0.0.1.本机与其它主机在需要联网的情况下使用的IP是本机ip,也就是ipv4后的ip地址(在命令行输入ipco

2022-01-10 15:54:44 2331

原创 fidder使用和原理

fidder抓包时通过代理服务器实现的,即fidder获取的是代理服务器上的数据包,代理服务器默认IP地址和端口号为:127.0.0.1和8888.为什么要用代理服务器吗呢?1.代理服务器安全,体现在使用代理服务器对目标服务器进行访问,当我们进行抓包时,目标服务器无法获取我们主机的ip地址和浏览器端口号.2.代理服务器能存储请求数据和响应数据,不仅能供fidder抓包,多次访问同一请求,可以直接从代理服务区中拿对应的响应数据,不用经过目标服务器.这样获取响应的速度更快,表现为网速更快.fidder安

2022-01-09 17:27:46 389

原创 敏捷开发-

敏捷开发是将整个项目划分成多个小的项目,每一次的小项目必须达到可视化,因为每一次迭代都需要用户查收,如果有需要改正的就进行优化.敏捷开发流程:迭代完成每一次子项目的任务,适应用户需求的变化,以用户的需求和体验为中心,同时,因为是迭代模式,bug会比较少,就算出现bug,优化成本也较低.核心: 迭代人员:开发团队:开发团队,测试团队项目经理:负责流程,即:把控整个项目迭代的流程,为开发团队清楚障碍产品经理:负责产品交付,即:每次将子项目交付给用户之前和子项目开发之前,需要产品经理审查是否达到开发

2021-12-07 13:22:19 73

原创 测试和开发的关系

整个软件,或者是网站等类似的开发,核心步骤有哪些呢?作为程序员,需要了解三点:1.产品经理作为管理人员,需要有大局观,把握整个开发流程的进度和资源提需求,需要和开发人员和测试人员一同商议并且生成软件或网站开发需求文档.2.开发人员开发人员负责具体功能的实现3.测试人员测试人员负责和开发人员协作.找出和需求不符的bug,然后交给开发人员改善.大致步骤:由产品经理,开发人员和测试人员商议出一份软件开发需求文档,开发人员需要进行开发分析,测试人员进行测试分析,将可以实现的功能写入需求文档,然后

2021-12-05 20:30:32 1210

原创 阻塞队列与定时器

阻塞队列用数组组织数据,实现的关键是用两把锁实现,即给入队和出队都加上同一把锁,此时读写操作就必须分开进行,读的时候不能写,写的时候不能读,互不影响,防止发生线程不安全,再配合wait和noitfy方法,读操作必须等写操作执行完了唤醒读操作才能继续进行读操作,反之亦然.public class TestDemo1 {//阻塞队列实现 static class MyBlockQueue { int[] array = new int[10]; int size;

2021-12-01 21:43:08 303

原创 网络编程-网络信息传输

从整体到局部:数据网络传输:封装:将数据进行封装,即将数据经过五层网络协议转换成光电信号,最终在硬件设施上进行传输,包括光纤,网线等.分用:经光电信号在五层协议上层层拆分,最终得到原始数据.进程端将发送的数据首先在应用层进行封装,封装为原始数据+其它(发送人,接收人等),然后在传输层封装为上述+其它(发送的端口号,接收的端口号等),然后在网络层封装为上述+其它(ip地址,这里ip地址一般是不变的),然后在数据链路层封装为上述+其它(帧头,帧尾等,也称为mac地址),这里帧头帧尾信息会不断变化,最后在

2021-12-01 21:38:11 108

原创 io文件基本操作和拷贝文件

文件分为普通文件,目录文件和特殊文件.1.普通文件即有后缀的一般文件,例如xxx.java xxx.txt.2.目录文件即文件夹3.特殊文件即和硬件相关的文件普通文件在创建时应注意父级文件都应该存在,否则会抛出异常.目录文件创建用mkdirs方法,不管多少级目录都可以创建特殊文件…普通文件:package threaddemo.iotest;import java.io.File;import java.io.IOException;public class IoTest {

2021-12-01 21:37:48 592

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除