![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
周周 嘿嘿
这个作者很懒,什么都没留下…
展开
-
git。。。
1原创 2022-08-13 22:14:27 · 302 阅读 · 2 评论 -
云计算和云服务,云计算
1原创 2022-08-07 01:11:53 · 159 阅读 · 0 评论 -
字符编码和浮点型计算精度丢失问题
1原创 2022-07-27 20:15:14 · 186 阅读 · 0 评论 -
编写selenium脚本的步骤
selenium编写脚本步骤:1.编写测试脚本case2.将case放入套件中四种方式:将方法一个一个放入将类一个一个放入将类放入不同的子套件中,在将每个子套件放入总的套件中将相关文件名的所有文件放入套件中3.设置测试报告路径及测试报告文件名,和测试报告的标题,描述等相关信息4.运行套件编写测试脚本case的步骤:1.定位元素2.对元素进行操作3.加上断言操作判定输入与输出结果是否一致还可能加入数据驱动等操作(数据驱动即将数据以变量参数的形式传入)数据驱动用注解data,fil原创 2022-05-07 21:12:48 · 1657 阅读 · 0 评论 -
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 · 3794 阅读 · 1 评论 -
死锁和线程安全
死锁:多个线程之间互相等待对方释放资源,从而造成程序阻塞运行的现象。如何避免死锁?线程同步。包括:临界区,互斥对象,事件对象,信号量。java中常见的同步方式包括互斥锁synized,重入锁,voliate关键字,阻塞队列,局部变量,原子变量。线程安全问题1:是指多个线程对同一个全局变量进行修改,需要用synized或者lock对每个线程修改变量加上锁。2:有读有写时,给全局变量加上volite关键字。...原创 2022-04-16 13:50:51 · 461 阅读 · 0 评论 -
索引失效的情况
索引失效的几种情况:1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用的第一部分,则不会使用索引3.like查询以%开头4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引 6.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描7.原创 2022-04-15 10:19:05 · 353 阅读 · 0 评论 -
对缓冲区和缓存的认识
缓存区是内存和cpu之间的存储区,用来存储cpu多次从内存读取到的数据,多次读取同一变量,就会将该变量放到缓存区中,当再次调用时直接从缓存区取,不从内存中取,当内存中该变量改变时,这种情况会导致内存不可见问题。缓冲区是内存中的存储区。缓冲区分为内核缓冲区和用户缓冲区。内核缓冲区是网络传输,文件io,控制台输入输入等操作的“中转站”。作用:1.降解高速和低速设备之间的速度差异。例如:文件io:write操作将数据发送到内核缓冲区,剩下的操作由操作系统负责,当缓冲区的数据到达一定大小时就全部一次性写原创 2022-04-14 23:33:15 · 1652 阅读 · 0 评论 -
线程池。。。
一.newfixedthreadpool(优秀线程池)目的:线程池中的最大线程数规定了创建线程数的最大数量优点:减少了创建线程和销毁线程的开销,提高了性能。缺点:核心线程中的线程空闲时回占用资源线程池的核心类:Threadpoolexector线程池中的核心组件:1.阻塞队列2.核心线程数工作流程:当线程数没到和核心线程数的大小时,新的任务就会创建新的新的线程;当线程数达到核心线程数大小时,就会看核心线程里面有没有空闲线程,如果有就直接使用空闲线程,否则放到阻塞队列中,当有空闲线程,再把任原创 2022-04-14 13:26:39 · 1298 阅读 · 1 评论 -
同步和异步,阻塞非阻塞IO
IO中的同步和异步:同步:io操作是由应用程发起和进行的,操作系统听候应用程指挥,例如应用程序进行read后操作系统就会进行read操作。表现为必须收到io操作的结果后线程才能继续向下执行。异步:io操作是由应用程序发起,但是由操作系统去执行的,即分配给了操作系统这个io任务之后,自己去干自己的事情,不会等待io操作的返回结果,当操作系统执行完io操作后就会通知应用程:您分配给我的io任务我已经做完了 。BIO(同步阻塞):传统的java.io包下的字节输入输出流。缺点:当read或者write容原创 2022-04-14 00:57:24 · 1233 阅读 · 0 评论 -
进程间通信方式
2、几种通信方式的比较管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系,类似于阻塞队列。有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段原创 2022-04-13 14:12:39 · 63 阅读 · 0 评论 -
初识Spring
Spring: 加快开发效率和安全性所有的Spring类型底层都是实现的SpringframeworkIOC:控制反转:将对象的管理交给Spring或者IOC机制进行管理,包括对象的创建,销毁,查询等等。控制反转一般是通过DI(依赖注入)实现的使用IOC的好处:能够实现解耦,例如创建对象是通过向方法里传入属性对象,而不是属性对象的属性,这样如果属性对象需要更改,只需要更改属性对象本身。使用SpringIOC的一种方法:1.创建容器2.给类加上注解,即将bean对象放入容器中注解的类型根据业原创 2022-04-06 20:08:54 · 88 阅读 · 0 评论 -
redis相关
缓存分为本地缓存和分布式缓存本地缓存:缓存和服务在一个主机上分布式缓存:缓存在单独的主机上,服务是分布式部署,实现负载均衡。本地缓存一般用Spring cache分布式缓存用redis缓存一般为键值对结构,redis的k值必须是字符串,v值可以是字符串,hashmap,集合,有序集合,列表。缓存的优势:1.查询速度快:放在内存中,并且数据结构为hashmap,查询速度极,增加服务器查询速率。2.支持事务,所有的操作包括都是原子性的3.为单进程单线程模式,避免传统数据库那样带来的高并发负载问原创 2022-03-29 22:06:01 · 369 阅读 · 0 评论 -
软件开发,,,
软件开发流程:需求分析-软件计划-软件设计-编码-测试-维护需求分析:产品经理软件计划:项目经理软件设计:开发人员:数据库设计,前后端接口设计等待测试人员:编写测试用例(功能测试,界面测试,性能测试,兼容性测试,安全测试等等)编码:开发人员:进行编码测试:根据测试用例进行测试维护:维护人员进行维护禅道:管理整个软件开发周期产品经理提需求,项目经理创建项目后领需求,然后安排开发人员和测试人员,并根据具体的功能点分配给具体的开发人员和测试人员,然后开发人员和测试人员领取自原创 2022-03-26 15:14:31 · 913 阅读 · 0 评论 -
内存泄漏,,
内存泄漏是指没有及时释放内存,如果多次内存泄漏叠加,会导致内存溢出,表现为短时间内占满整个内存;内存溢出是指空间不足,内存溢出是相对的,可以相对数组,也可以相对整个内存.内存溢出导致的常见原因:1.频繁的创建对象或者变量导致内存溢出,例如死循环.2.一次占用的空间很大,且不及时释放,比如数据库的查找,select *操作容易产生内存溢出,解决方法是使用分页功能....原创 2022-03-26 12:08:37 · 1411 阅读 · 0 评论 -
堆的结构和实现
堆是由数组实现的队列,由完全二叉树层序放置。```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 · 59 阅读 · 1 评论 -
java 内存划分和垃圾回收机制
java 中的数据类型分为八种基本类型和引用类型,可以作为成员变量(放堆中),局部变量(放虚拟机栈中),静态变量(放方法区中).jvm内存划分:堆:存放成员变量,线程共享虚拟机栈: 存放局部变量,线程私有方法区:存放静态变量和类信息,线程共享程序计数器 :记录程序运行的位置,线程私有本地方法栈: 存放native相关信息.线程私有堆是线程共享的内存空间,虚拟机栈是线程私有的内存空间,每个线程都有自己的虚拟机栈空间GC(垃圾回收)机制回收的是堆和方法区中的内存,主要是堆内存.1.方法区内存:原创 2022-03-21 21:10:33 · 1406 阅读 · 0 评论 -
事务...
事务的四个特性:原子性:要么同时执行,如果中间出错,进行回滚,也就是相当于这个事务没有进行,数据库的数据还是这次事务之前的数据.一致性; 对数据的操作要逻辑正确.持久性:事务完成后要将数据提交到数据库中.隔离性:在并发环境中,事务之间不会影响到各自的操作.隔离级别: 1.读未提交 :事务A可以读事务B未提交的记录数据,会造成脏读问题2.读已提交 :事务A只能读到已经提交到数据库的数据,解决了脏读问题,但存在不可重复读问题,即事务多次读数据库中的数据,读到的数据不一样,因为其它事务将数原创 2022-03-20 18:36:51 · 1106 阅读 · 0 评论 -
部署项目过程
在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 · 2032 阅读 · 0 评论 -
linux 常用快捷键
常用linux命令:切换目录: cd …cd 目录增加文件: mkdir 一个文件或者目录文件夹mkdir -p 多级目录文件删除文件: rm 一个文件或者文件夹rm -r 多级目录文件cp :复制加粘贴到另一个文件里mv:剪切加粘贴到另一个文件里...原创 2022-03-13 15:21:55 · 1670 阅读 · 0 评论 -
servelt学习
网络传输是在数据经过网卡五层协议后在网络设备上传输的过程.五层协议至关重要cookie设置时间限制,保证安全性,在服务器端通过session按时结束cookie数据调用getsession函数将自动给浏览器端发送sessionid cookie,如果是用户第一次访问就新建一个session对象并返回,如果已经访问过就拿到之前的session对象.如何判断是初次访问还是已经访问过,是通过sessionid来决定,如果服务器端的hash表中存在对应的sessionid就说明已经访问过,否则新建sessio原创 2022-03-08 13:50:38 · 124 阅读 · 0 评论 -
tcp连接和收发数据过程
tcp可靠性:1.应答机制和超时传输.若传输成功,接收方接收到数据,接收方会发送一个ack给发送方,告诉发送方已经收到刚刚发送的数据;如果在一定数间内发送方没有接收到ack,发送方就会重新发送数据,在若干次重传之后,若发送方还没有收到ack,就会判定网络传输异常,会断开连接,因为连接占据资源.每次重传的时间间隔越来越久,一般成倍速增加.发送方未收到ack,无法判定数据发送到接收方失败还是返回ack在传输过程中失败.tcp建立连接:new socket对象目的:1.创造通信数据,或者通信资源,连接对原创 2022-02-20 17:46:20 · 1926 阅读 · 0 评论 -
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 · 1958 阅读 · 0 评论 -
合并冲突.
分支对应的日志按照时间顺序排列.分支的界面就是时间上最近的日志合并:将合并对象的所有日志合并到被合并对象当中,如果两个分支都对同一个文件做了处理,则会产生合并冲突,只需要在被合并分支对象中再commit一次即可,其实合并的时候不管有没有冲突,合并的分支日志已经全部弄到被合并分支里面去了,冲突只是在产生的时候在被合并对象里再commit一次,并没有实际的作用具体解决冲突指令:1.对最新日志下的相关文件进行处理,注意,是以时间最近的日志为标准进行修改的,修改是任意的,增删改查啥都可以.2.git a原创 2022-02-11 12:03:10 · 796 阅读 · 0 评论 -
git使用
git使用:初始化本地仓库后,然后连接到远程仓库,然后选择所有文件,标注提交信息,然后push出去,进行同步.(第一次连接需要在gitbash窗口设置从git推送到远程仓库的用户名和邮箱.)连接只用建立一次,之后只需要这三步就可:如果push不出去,使用git push -u origin master命令强制推送回退版本:将之前发布到远程仓库过的版本回退到本地仓库中,如需再同步远程仓库,push即可.1.查看分支2.选择分支3.git log命令2.回退版本:克隆分支项目:原创 2022-02-09 00:14:12 · 325 阅读 · 0 评论 -
流的简单认识
流对象是数据传输的通道,用于内存和本机其它物理设备进行数据传输,一般用缓冲区提高效率.流在文件io中和网络传输中使用比较普遍.在文件io中为内存和外存设备进行数据传输,在网络传输中是内存和网卡之间进行数据传输,表现为将数据写入本机网卡或者从网卡中读取数据.数据在网卡中会最终封装成帧发送到网络传输设备上进行传输.流分为字节流和字符流.字节流代表只能传输字节或者字节数组(用缓冲区),字符流表示只能传输字符或者字符数组,即字符串.io流中文本文件需要用字符流进行数据传输,字节文件需要用字节流进行数据传输;网络原创 2022-02-07 16:28:12 · 1185 阅读 · 0 评论 -
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 · 1874 阅读 · 0 评论 -
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 · 2344 阅读 · 0 评论 -
fidder使用和原理
fidder抓包时通过代理服务器实现的,即fidder获取的是代理服务器上的数据包,代理服务器默认IP地址和端口号为:127.0.0.1和8888.为什么要用代理服务器吗呢?1.代理服务器安全,体现在使用代理服务器对目标服务器进行访问,当我们进行抓包时,目标服务器无法获取我们主机的ip地址和浏览器端口号.2.代理服务器能存储请求数据和响应数据,不仅能供fidder抓包,多次访问同一请求,可以直接从代理服务区中拿对应的响应数据,不用经过目标服务器.这样获取响应的速度更快,表现为网速更快.fidder安原创 2022-01-09 17:27:46 · 400 阅读 · 0 评论 -
敏捷开发-
敏捷开发是将整个项目划分成多个小的项目,每一次的小项目必须达到可视化,因为每一次迭代都需要用户查收,如果有需要改正的就进行优化.敏捷开发流程:迭代完成每一次子项目的任务,适应用户需求的变化,以用户的需求和体验为中心,同时,因为是迭代模式,bug会比较少,就算出现bug,优化成本也较低.核心: 迭代人员:开发团队:开发团队,测试团队项目经理:负责流程,即:把控整个项目迭代的流程,为开发团队清楚障碍产品经理:负责产品交付,即:每次将子项目交付给用户之前和子项目开发之前,需要产品经理审查是否达到开发原创 2021-12-07 13:22:19 · 81 阅读 · 0 评论 -
测试和开发的关系
整个软件,或者是网站等类似的开发,核心步骤有哪些呢?作为程序员,需要了解三点:1.产品经理作为管理人员,需要有大局观,把握整个开发流程的进度和资源提需求,需要和开发人员和测试人员一同商议并且生成软件或网站开发需求文档.2.开发人员开发人员负责具体功能的实现3.测试人员测试人员负责和开发人员协作.找出和需求不符的bug,然后交给开发人员改善.大致步骤:由产品经理,开发人员和测试人员商议出一份软件开发需求文档,开发人员需要进行开发分析,测试人员进行测试分析,将可以实现的功能写入需求文档,然后原创 2021-12-05 20:30:32 · 1218 阅读 · 0 评论 -
阻塞队列与定时器
阻塞队列用数组组织数据,实现的关键是用两把锁实现,即给入队和出队都加上同一把锁,此时读写操作就必须分开进行,读的时候不能写,写的时候不能读,互不影响,防止发生线程不安全,再配合wait和noitfy方法,读操作必须等写操作执行完了唤醒读操作才能继续进行读操作,反之亦然.public class TestDemo1 {//阻塞队列实现 static class MyBlockQueue { int[] array = new int[10]; int size;原创 2021-12-01 21:43:08 · 311 阅读 · 0 评论 -
网络编程-网络信息传输
从整体到局部:数据网络传输:封装:将数据进行封装,即将数据经过五层网络协议转换成光电信号,最终在硬件设施上进行传输,包括光纤,网线等.分用:经光电信号在五层协议上层层拆分,最终得到原始数据.进程端将发送的数据首先在应用层进行封装,封装为原始数据+其它(发送人,接收人等),然后在传输层封装为上述+其它(发送的端口号,接收的端口号等),然后在网络层封装为上述+其它(ip地址,这里ip地址一般是不变的),然后在数据链路层封装为上述+其它(帧头,帧尾等,也称为mac地址),这里帧头帧尾信息会不断变化,最后在原创 2021-12-01 21:38:11 · 114 阅读 · 0 评论 -
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 · 598 阅读 · 0 评论 -
事务...
关于事务事务是非原子性的,必须所有的操作执行完,中间有一步执行错误就会回滚,事务必须保证数据一致性,主要是读写数据要一致,否则会出现:脏读,不可重复读,幻读三个问题,解决:给读写操作都加上锁,并且幻读需要严格执行并行,设计好代码.mysql事务:对sql语句进行加锁等等....原创 2021-11-18 16:56:51 · 408 阅读 · 0 评论 -
进程,线程....
操作系统是系统软件,是用来管理应用软件和其它资源的,主要负责管理文件,内存,cpu等等,主要进行资源的分配,操作系统是计算机的管理者,另外操作系统中的驱动程序,用来驱动程序的执行.进程是资源调度的最小单位,当创建一个新进程时,操作系统会为该进程分配资源,一个进程所占的资源是动态的…例如,如果给进程增加新的线程,因为线程资源共享,需要额外的资源很少,大部分都是使用之前的资源,操作系统只需要分配给该进程一点额外的资源即可.线程是进行调度的最小单位,但是进程也是会进行调度的,进程的调度实现了计算机并发执行多个原创 2021-11-17 16:10:44 · 523 阅读 · 0 评论 -
mysql学习
基本架构:创建数据库,创建表,展示数据库,展现表,删除数据库,删除表。创建数据库:drop database java01//drop database if exists java01;show databases;drop table student // drop table if exists student;show tables;查看表结构:desc student;关于表中的数据增删改查:增:insert into 表名或者(列名) values (…);改:原创 2021-10-30 22:22:03 · 76 阅读 · 0 评论 -
反射和枚举
反射可以拿到拿到和调用对象的私有方法或者属性,或者不同包中可以调用非public方法或者属性。反射和面向对象的特性封装性正好对立,所以使用反射需要尤为注意。枚举是将常量名和参数封装在类里,继承Enum的枚举类构造方法必须是私有的,这是为了保证该枚举类的实例只有当前声明的这几个,这几个实例在代码层面相当于静态成员,直接可以通过类名.拿到。注意:反射是拿不到枚举类对象的。Enum有一个默认构造方法:由编译器提供,另外values方法也是编译器提供。private final int ordinal;原创 2021-09-23 13:29:29 · 147 阅读 · 0 评论 -
用泛型手写简单的hashmap
需要注意重写的hashcode方法是idea自动生成的,因为可能为负数,需要改动如下:package com.liuheizi.demo;import com.sun.org.apache.bcel.internal.generic.ANEWARRAY;import java.util.HashMap;import java.util.Objects;class A{ int a; double b; public A(int a, double b) {原创 2021-09-20 15:41:11 · 82 阅读 · 0 评论 -
java中自动生成的方法
tostring方法,equal方法,hashcode方法,只适用于只有基本数据类型的类,如果还有引用类型,则不适用,因为此时只会比较引用层面,而不是引用所指向的数据。自动生成的clone方法一定需要重写。package com.liuheizi.demo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Objects;/** * @ Author原创 2021-09-20 13:15:36 · 921 阅读 · 0 评论