自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 收藏
  • 关注

原创 AES加密算法

1、AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。2、密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。AES支持三种长度的密钥:128位,192位,256位平时大家所说的AES128,AES192,AES256,实际上就是指的AES算法对

2021-01-13 14:51:19 3086

原创 session和cookie

SessionSession的实现方式有两种:使用URL重写,或者使用cookieURL重写:每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集

2020-10-22 13:40:44 221

原创 进程与线程

进程与线程的基础区别:1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互

2020-10-20 16:34:08 364

原创 AOP适用场景

AOP使用场景AOP用来封装横切关注点,具体可以在下面的场景中使用Authentication 权限Caching 缓存Context passing 内容传递Error handling 错误处理Lazy loading 懒加载Debugging 调试logging, tracing, profiling and monitoring 记录跟踪 优化 校准Performance optimization 性能优化Persistence 持久化Resource pooling 资源池

2020-09-27 13:39:53 149

原创 设计模式

设计模式的类型根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。1 创建型模式

2020-09-27 13:03:39 87

原创 排序

2020-09-27 12:41:50 58

原创

Java中使用synchronized关键字:1、synchronized{}语句执行结束后,对象锁自动释放2、synchronized{}发生异常,对象锁自动释放3、调用x.wait()方法,x对象锁释放4、suspend()方法,使线程挂起(暂停),但不会释放对象锁5、resume()方法,使挂起的线程恢复,重新获得CPU执行...

2020-09-25 11:43:52 77

原创 进程间的7种通讯方式

进程间的7种通讯方式管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,

2020-09-21 16:01:37 1025

原创 交换机和路由器的区别

交换机和路由器的区别:1、工作层次不同,一个是网络层、一个是数据链路层2、寻址依据不同,一个是基于IP寻址,一个基于MAC寻址3、交换机分割冲突域,不划分广播域,即隶属一个交换机的主机属于一个局域网。通过路由器连接的主机可能数据不同的广播域,所以路由器可以划分广播域4、转发的数据对象不同 ,交换机转发的是数据帧、路由器转发的是分组报文...

2020-09-16 14:22:03 207

原创 Spring概述 IOC和AOP

SpringSpring是一个轻量级框架,可以一站式构建你的企业级应用。Spring的模块大概分为6个。分别是:1、Core Container(Spring的核心)【重要】2、AOP(面向切面变成)【重要】3、Messaging(消息发送的支持)4、Data Access/Integration(数据访问和集成)5、Web(主要是SpringWeb内容,包括MVC)【重要】6、Test(Spring测试支持,包含JUint等测试单元的支持) 7、Instrumentation(设备支持,比

2020-09-16 13:46:56 78

原创 Java1.8的新特性

1、支持lambda表达式2、新增函数式接口3、方法引用对象::实例方法名类::静态方法名类::实例方法名 (lambda参数列表中第一个参数是实例方法的调用 者,第二个参数是实例方法的参数时可用)4、Stream APIStream操作的三个步骤创建stream中间操作(过滤、map)终止操作5、并行流和串行流在jdk1.8新的stream包中针对集合的操作也提供了并行操作流和串行操作流。并行流就是把内容切割成多个数据块,并且使用多个线程分别处理每个数据块的内容。6、O

2020-09-16 00:12:18 70

原创 僵尸进程和孤儿进程

僵尸进程子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程,僵尸进程实际上是一个已经死掉的进程。一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。这个僵尸进程需要它的父进程来为它收尸,如果他的父进程没有处理这个僵尸进程的措施,那么它就一直保持僵尸状态,如

2020-09-15 00:27:08 79

原创 TCP三次握手四次挥手

传输字段:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置三次握手:四次挥手:

2020-09-14 16:22:54 65

原创 TCP和UDP的区别

TCP和UDP的区别TCP与UDP均位于传输层,即IP协议(网络层)的上层。UDP的特点:面向无连接: UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。有单播,多播,广播的功能:UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。不

2020-09-14 16:04:36 72

原创 网络五层协议与每层对应的协议

五层协议物理层–数据链路层–网络层–传输层–应用层 (会话层、表示层)物理层为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成。包括的协议:1000BASE-SX、1000BASE-LX、1000BASE-CX数据链路层数据链路层:为网络层提供数据传送服务包括的协议:Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 802.5/802.2网络层网络层:路由选择和中继.

2020-09-13 23:19:02 1157

原创 http和https的区别

http和https的区别1、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。2、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。3、http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全...

2020-09-13 23:14:47 60

原创 测试岗知识点

黑白盒1、白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。2、黑盒测试:是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测试时,把程序看作一个不能打开的黑盒子。在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照

2020-09-13 20:49:48 284

原创 Linux常用命令(更新中)

Linux常用命令(更新中)CPU/内存相关:iostat:用于输出CPU和磁盘I/O相关的统计信息top:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器netstat:用于显示网络状态。利用 netstat 指令可让你得知整个 Linux 系统的网络情况。mpstat:实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查

2020-09-12 15:31:59 58

原创 正则表达式基础语法

正则表达式基础语法public class regex { public static void main(String[] args) { String str = "123 name "; /** * * :匹配 0次或n次 * + :匹配 1次或n次 * ? :匹配 0次或1次 * {n} : 匹配 n次 * {n,m}: 匹配 n到 m次

2020-09-10 19:26:44 144

原创 网络文件地址

如:http://www.cnnic.net.cn/develst/cnnic200101.shtml其中,“: //”之前部分指的是协议,常用的协议有http(www协议)、ftp(文件传输协议)、telnet(远程传输协议)、news(新闻组协议)、file(用户计算机中的文件)等;"www"是指服务器类型;“ cnnic. net. cn” 为域名;"develst"为文件的目录路径,如有多层路径,则分别用“ / ”分隔;“cnic200101.shtml”为文件名。...

2020-09-09 10:42:49 1004 1

原创 KMP算法 动态规划实现

KMP算法 动态规划实现public class KMP { //pat是要匹配的字段 private String pat; //dp[状态][字母对应的ASCII码] = 下一步的位置 private int[][] dp; public KMP(String pat){ this.pat = pat; //256是ASCII码个数 dp = new int[pat.length()][256];

2020-09-05 17:41:11 147

原创 二叉树

二叉树1、每个元素都是一个节点2、每个节点每有一个子节点,度+1,即有一个字节点的节点度为1,有两个子节点的节点度为2性质:性质1:二叉树的第i层上至多有2^(i-1)(i≥1)个节点 [6] 。性质2:深度为h的二叉树中至多含有(2^h)-1个节点 [6] 。性质3:若在任意一棵二叉树中,有n个叶子节点,有n2个度为2的节点,则必有n0=n2+1 [6] 。性质4:具有n个节点的完全二叉树深为log2^x+1(其中x表示不大于n的最大整数)...

2020-08-30 16:05:15 72

原创 快速排序

快速排序1、时间复杂度为O(nlogn)2、在排序序列逆序时耗时最长,退化为O(n^2)import java.util.Arrays;public class Test { public static void main(String[] args) { int[] arr = new int[] {4,7,6,5,3,2,8,1}; quickSort(arr, 0, arr.length-1); Syst

2020-08-30 14:50:51 73

原创 GET和POST区别

GET和POST区别请求行中的GET称之为请求方式,请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT。常用的有:POST,GET一般来说,当我们点击超链接,通过地址栏访问都是get请求方式。通过表单提交的数据一般是post方式。可以简单理解GET方式用来查询数据,POST方式用来提交数据,get的提交速度比post快GET方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量

2020-08-29 16:00:52 80

原创 Java返回二进制中1的个数

Java返回二进制中1的个数Integer 中封装好了一个方法:能够直接计算二进制中的1的个数,在竞赛中很有用.JDk8中的实现方法使用的是 & 操作,所以比正常的遍历要快的多.System.out.println(Integer.bitCount(21));上文是21的二进制,所以21的二进制中有 3 个‘1’,...

2020-08-11 17:24:34 329

原创 Java中的进制转换

Java中的进制转换进制转化在JAVA中已经封装好了,无论是常规的10转2,8,16,还是相对应的2,8,16进制转化为10进制的方法,当然也包括10->n进制,n进制转10进制的常规方法,都被封装在Integer对象中10进制转2进制 Integer.toBinaryString(n); 一个二进制字符串.10进制转8进制 Integer.toOctalString(n); 一个八进制字符串10进制转16进制 Integer.toHexString(n); 一个16进制字符串10

2020-08-11 17:20:37 65

原创 Java使用split方法返回String数组

Java使用split方法返回String数组题目描述将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符输入:I am a boy输出:boy a am I我一开始想的是使用String数组保存String.charAt()返回的char值,但过程过于繁琐。然后我还是想找个更简单的方法,即使用正则表达式,然后在翻阅String方法的时候发现split方法返回的是一个String

2020-08-11 17:01:39 2442

原创 Java遍历Map的四种方法

Java遍历Map的四种方法方法一:在for循环中使用entries实现Map的遍历:这种方法可以获取key和value值,但效率较低/** *最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */ Map <String,String>map = new HashMap<String,String>(); map.put("熊大", "棕色"); map.put("熊二", "黄色"); for(Map.Entry<String, String&

2020-08-11 16:20:51 79

原创 Java中将Set集合用于校验是否重复

Java中将Set集合用于校验是否重复题目:输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。这道题我一开始直接用Set集合进行数据的导入,但发现Set集合存储数据是无序不可重复的,也就是存入顺序和取出顺序不一致。然后在看了评论老哥们的操作之后,学到了将Set集合仅仅用于校验数据是否重复。具体看代码吧/** * !!!字符串拼接!!! * 输入一个int型整数,按照从右向左的阅读顺序, * 返回一个不含重复数字的新的整数。 */public class Tes

2020-08-11 16:15:10 516

原创 Java使用递归方法求质因子

Java使用递归方法求质因子/** * !!!质因子!!! * 输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 ) * 最后一个数后面也要有空格 */public class Test21 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); long num = sc.nextLong();

2020-08-11 12:55:07 618

原创 Java使用valueOf方法完成进制转换

Java使用valueOf方法完成进制转换valueOf(str, radix)方法:radix为想要转换的进制数import java.util.Scanner;/** * !!!进制转换!!! * 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 ) */public class Test20 { public static void main(String[] args) { Scanner sc = new Scanner(Sy

2020-08-11 12:52:24 498

原创 Java不使用递归完成二叉树的前中后序遍历

Java不使用递归完成二叉树的先中后序遍历【题⽬】按照⼆叉树的先序遍历打印⼆叉树,并且不能使⽤递归。先序遍历⼆叉树的先序遍历顺序是根-左-右。我们可以采⽤⼀个栈来辅助,我们把先序遍历的结果放到⼀个ArrayList 容器中作为返回值,具体步骤如下:1、把⼆叉树的根节点 root 放进栈。2、如果栈不为空,从栈中取出⼀个节点,把该节点放⼊容器的尾部;如果该节点的右⼦树不为空,则把有节点放⼊栈;如果该节点的左⼦树不为空,则把左⼦树放⼊栈中。3、⼀直重复步骤 2 ,直到栈为空,此时遍历结束,代码

2020-08-10 19:34:59 477

原创 Java实现二叉树数据结构

Java实现二叉树数据结构https://blog.csdn.net/tjh625/article/details/86561969

2020-08-10 18:54:44 87

原创 位运算符的用法

位运算符的用法https://mp.weixin.qq.com/s?__biz=Mzg2NzA4MTkxNQ==&mid=2247485441&idx=1&sn=2dd6e5e4b34bab5127ef5462bf5a90a6&chksm=ce4043d5f937cac3f0e5b4d0f90e52f4b56eba07f85ae63da41e7ea66d236e5c59cd24cc441b&token=85315341&lang=zh_CN#rd...

2020-08-10 16:44:57 639

原创 Java求数组的最大字段和

Java求数组的最大字段和原问题给定⼀个数组,求这个数组的连续⼦数组中,最⼤的那⼀段的和。 如数组[-2,1,-3,4,-1,2,1,-5,4] 的⼦段为:[-2,1]、[1,-3,4,-1]、[4,-1,2,1]、…、[-2,1,-3,4,-1,2,1,-5,4],和最⼤的是[4,1,2,1],为6。⼦问题-. 只考虑第⼀个元素,则最⼤⼦段和为其本身 DP[0] = nums[0]-. 考虑前两个元素,最⼤⼦段和为 nums[0],num[1]以及 nums[0] + num[1] 中最

2020-08-10 11:18:03 449

原创 凑数:将数组分成两组,使得两组中各元素加起来的和相等

凑数:将数组分成两组,使得两组中各元素加起来的和相等题目描述:编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。import java.util.*;public class Test13 { public static void main(String[] args) { Scanner sc=n

2020-08-09 17:56:29 1582

原创 Java将单链表的每K个节点逆序

Java将单链表的每K个节点逆序 /** * 将链表每K个节点进行反转,不足k个则不反转 * @param head 链表的头结点 * @param k 反转节点的个数 * @return 返回新的头结点 */ public static Node reverseKNode(Node head, int k){ if (head == null || head.next == null){ return

2020-08-09 16:50:09 307

原创 Java删除链表中倒数第K个节点

Java删除链表中倒数第K个节点 /** * 删除链表中倒数第k个节点 * @param k 倒数第k个节点 * @param head 链表的头结点 * @return 新的头结点 */ public static Node removeLastKthNode(int k, Node head){ if (head == null || k < 1){ return head;

2020-08-09 15:55:01 508

原创 Java判断链表是否为回文结构

Java判断链表是否为回文结构回文结构序列是指顺读和反读都一样的序列空间复杂度:O(1)时间复杂度:O(n) /** * 判断链表是不是回文结构 * @param head 链表的头结点 * @return true 是, false 否 */ public static boolean isHuiWen(Node head){ if (head == null || head.next == null){

2020-08-09 12:38:07 209

原创 Java判断链表是否有环

Java判断链表是否有环循环遍历节点,遍历一个便标记一个,遍历过程判断是否被标记,若已被标记则表示有环方法说明:头指针移动,若到达之前到达过的位置则表示有环,若无环则会走到链表末端。public class Solution { public boolean hasCycle(ListNode head) { //声明一个set存放已遍历的节点, //即为标记节点(Set中不允许重复元素) Set<ListNode> set = new Ha

2020-08-09 10:42:46 153

空空如也

空空如也

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

TA关注的人

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