- 博客(36)
- 收藏
- 关注
原创 计算机操作系统出现死锁的原因
1、死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。2、产生死锁的原因:1、竞争资源引起进程死锁当系统中供多个进程共享的资源如打印机、公用队列的等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。2、竞争临时资源上面所说的打印机资源属于可顺序重复使用型资源,称为永久资源。还有一种所谓的临时资源,这是指由一个进程产生
2021-01-11 22:24:23 5752
原创 HTTP与HTTPS的区别
基本概念1、HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此
2021-01-09 22:08:56 199
原创 JVM内存模型分区
JVM内存模型划分根据JVM规范,JVM 内存共分为Java虚拟机栈,本地方法栈,堆,方法区,程序计数器,五个部分。1. Java堆(线程共享)Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都要在堆上分配。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。从内存回收的角度看,由于现在收集器基本都采用分代收集算法,所以Java堆还可以细分为新生代和老年代;再细致一点的有Eden空间、From Surv
2021-01-03 22:03:49 714
原创 StringBuffer和StringBuilder
首先来回顾下String类的特点:任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder类。StringBuffer 和 StringBuilder 大部分功能是相同的,但也存在着差异。在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为ap
2020-12-29 16:05:54 145
原创 【Java】认识String类
1. 创建字符串常见的构造 String 的方式// 方式一String str = "Hello Bit";// 方式二String str2 = new String("Hello Bit");// 方式三char[] array = {'a', 'b', 'c'};String str3 = new String(array);官方文档 https://docs.oracle.com/javase/8/docs/api/index.html2. 字符串比较相等如果现在有两个in
2020-12-29 11:48:46 181
原创 时间复杂度和空间复杂度
1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。在计算机发展的早期,计算机的存储容量很小,所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。2.时间复杂度2.1 时间复杂度的概念时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,
2020-12-27 22:26:51 261
原创 Java程序逻辑控制(二)
1、循环结构3.1 while 循环基本语法格式:while(循环条件){ 循环语句; }循环条件为 true, 则执行循环语句; 否则结束循环。代码示例1: 打印 1 - 10 的数字int num = 1; while (num <= 10) { System.out.println(num); num++; }代码示例2: 计算 1 - 100 的和int n = 1; int sum = 0; while (n <= 100) { sum +=
2020-12-25 22:39:09 137
原创 Java程序逻辑控制(一)
1. 顺序结构顺序结构比较简单,像我们之前写过的代码就是顺序结构的, 按照代码书写的顺序一行一行执行。System.out.println("aaa");System.out.println("bbb");System.out.println("ccc");// 运行结果aaabbbccc如果调整代码的书写顺序, 则执行顺序也发生变化System.out.println("aaa");System.out.println("ccc");System.out.println("bbb
2020-12-24 22:35:19 171
原创 Java运算符
运算符计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:1 、算术运算符算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。表格中的实例假设整数变量A的值为10,变量B的值为20:① int / int 结果还是 intint a = 1; int b = 2; System.out.println(a / b); // 结果为 0 ②0 不能作为除数int a
2020-12-21 23:25:49 326
原创 TCP三次握手和四次挥手的过程
三次握手:为TCP建立连接的过程第一次握手:客户端向服务端发送同步序列号SYN,请求建立连接,这时客户端的状态为SYN_SENT,假设此处SYN为x。第二次握手:服务端接收到客户端的SYN请求,要做的是确认客户端发送过来的SYN,发送确认包ACK,这里的ACK为x+1,意思是说“我收到了你发送的SYN了”。同时,服务器也会向客户端发送一个SYN包,我们设SYN为y。这时服务器的状态为SYN_RECV。一句话,服务器端发送SYN和ACK两个包。第三次握手:客户端收到服务端的ACK数据包和SYN数据包,需
2020-12-20 23:14:24 236
原创 Java基本数据类型转换
理解类型转换Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。先看以下几个代码场景:int 和 long/double 相互赋值int a = 10; long b = 20; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过. int a = 10; double b = 1.0; a = b; // 编译出错, 提示可能会损失精度. b = a; // 编译通过long 表示的范围更大, 可以将 int
2020-12-20 22:58:29 549
原创 Java 基本数据类型
八大基本数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。什么是字节?字节是计算机中表示空间大小的基本单位。计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).我们平时的计算机为 8GB 内存, 意思是 8G 个字节.其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB.所以 8GB 相当于 80 多亿个字节.1、byte:字节类型byte 数据类型
2020-12-19 23:15:17 694 2
原创 Servlet【生命周期】
Servlet 生命周期Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:1、Servlet 初始化后调用 init () 方法。2、Servlet 调用 service() 方法来处理客户端的请求。3、Servlet 销毁前调用 destroy() 方法。4、最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。init() 方法init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
2020-12-12 22:47:14 229
原创 初识Servlet
Servlet 简介Servlet 是 JavaEE 中指定了一套标准,目前主要的用途就是写 web 应用(web application)。Servlet 是什么?Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。Java Servlet 通常情况下与使用 CG
2020-12-11 22:38:26 287
原创 基于IDEA的Web项目配置
Web项目配置这里都是基于Maven的Web项目。IDEA版本为2020.1.3。个人操作仅供参考配置Maven本地仓库下载settings.xml和Repository.zip,确保存放在本地某个路径中。配置为Web项目先在Maven的pom.xml配置文件中配置项目为Web项目:<packaging>war</packaging>Maven项目的配置文件pom.xml修改以后,都需要在Maven面板中刷新一下,否则不能自动更新生效IDEA会自动生成项目的W
2020-12-10 22:56:15 635
原创 IDEA基本配置(数据库连接配置)
IDEA基本配置我使用的IDEA版本是2020.1.3IDEA需要对当前项目和新建项目都进行配置。当前项目配置:File -> Settings说明:对当前打开的项目进行配置。当前项目结构:File -> Project Structure说明:以上配置对新建的项目不会生效,建议使用以下操作方式:先随便创建一个临时项目,再分别配置如下内容,完成配置后删除临时创建的项目,之后新建项目都会使用统一的配置。(新建项目配置有的,都不要在当前项目配)。新建项目配置:File ->
2020-12-10 22:38:08 5469
原创 Java环境变量配置(Windows和Mac)
Java环境变量环境变量类似代码中的变量,需要定义,之后可以使用。Java的环境变量一定要配置好,很多第三方开发工具都会依赖这个环境变量,如Tomcat。需要配置的内容如下:Windows环境配置在“此电脑”右键—>属性—>高级系统设置—>环境变量:系统变量中新建(如果已有就编辑):JAVA_HOME:指定为自己 JDK 根路径。说明:定义了一个系统变量,名称为 JAVA_HOME,值就是安装的 JDK 路径。配置Path变量:双击Path,添加 JDK 命令的路径:
2020-12-10 11:11:12 502
原创 【Java版】牛客编程题:寻找第K大、数组中的逆序对、删除公共字符串
1、寻找第K大链接:https://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf//1.快排public class Main { public static int findKth(int[] array, int n, int K) { return quick(array,0,n-1,K); } public static int quick(int[]
2020-12-02 23:13:01 452 1
原创 网络原理之HTTP
1. HTTP 原理** 理解为何要有应用层?**我们了解 TCP/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程[ IP+Port ],可是,仅仅把数据从A点传送到B点就完了吗?这就好比,在淘宝上买了一部手机,卖家[ 客户端 ]把手机通过顺丰[ 传送+路径选择 ] 送到买家 [ 服务器 ] 手里就完了吗?当然不是,买家还要使用这款产品,还要在使用之后,给卖家打分评论。所以,我们把数据从A端传送到B端, TCP/IP 解决的是顺丰的功能,而两端还要对数据进行加工处理或者使
2020-11-25 23:34:21 397
原创 Map和Set练习题
1、List当中存放了10万个随机的数据,找出第一个重复的数字public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); Random random = new Random(); for (int i = 0; i <10_0000 ; i++) { int num = random.next
2020-11-22 23:35:33 578
原创 Java HashSet
1、HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。2、HashSet 允许有 null 值。3、HashSet 是无序的,即不会记录插入的顺序。4、HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。5、HashSet 实现了 Set 接口。HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。基本类型对应的包装类表如下:Hash
2020-11-22 23:04:11 692
原创 Java HashMap
1.HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。2.HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。3.HashMap 是无序的,即不会记录插入的顺序。4.HashMap 继承于AbstractMap,实现了 Map、Cloneable java.io.Serializable 接口。5.HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符
2020-11-17 23:35:23 866 1
转载 最全java面试题汇总(带答案)
本文转载,附上原文链接:https://blog.csdn.net/qq_18298439/article/details/80939968 目录 1.面向对象和面向过程的区别2.Java的四个基本特性(抽象、封装、继承,多态)3.重载和重写的区别4.构造器Construct...
2020-11-16 21:06:57 558
原创 Mysql数据库习题练习
一、有一张员工表emp,字段:姓名name,性别sex,部门depart,工资salary。查询以下数据:1、查询男女员工的平均工资1:select sex,avg(salary) from emp group by sex;说明:平均值使用聚合函数avg,并且按照性别男女分组,group by 性别字段2、查询各部门的总薪水2:select depart,sum(salary) from emp group by depart;说明:总薪水使用聚合函数sum取薪水字段求和,并且按照部门字
2020-11-14 22:39:15 3657
原创 经典排序算法(附代码)
常见的排序算法有趣的视频:排序舞蹈一、直接插入排序/*时间复杂度:最坏情况下:O(n^2) 数组是无序的;最好情况:O(n) 数组有序 * 空间复杂度:O(1) * */ //稳定 //插入排序 特点:越有序,越快 public static void insertSort(int[] array) { for (int i = 1; i <array.length ; i++) { int tmp = arr
2020-11-13 23:45:41 579
原创 非递归遍历二叉树
一、前序遍历NLR:前序遍历(Preorder Traversal 亦称先序遍历)访问根结点—>根的左子树—>根的右子树。//非递归前序遍历 public void preOrderTraversalNor(Node root) { if(root == null) { return; } Stack<Node> stack = new Stack<>(); Node c
2020-11-10 21:13:58 333
原创 面试必备OJ题:二叉树进阶篇
1、合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if(t1 == null && t2 == null) {
2020-11-09 22:25:32 598
原创 干货满满!!!面试必备OJ题:链表篇(二)
1、删除链表元素删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5class Solution { public ListNode removeElements(ListNode head, int val) { if(head == null) { return null; }
2020-11-08 23:03:48 342
原创 干货满满!!!面试必备OJ题:链表篇(一)
1、反转一个单链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLclass Solution { public ListNode reverseList(ListNode head) { ListNode newHead = null; ListNode cur = head; ListNode prev = null;
2020-11-07 21:57:12 627
原创 干货满满!面试必备OJ题:二叉树基础篇
1、给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。class Solution { public int maxDepth(TreeNode root) { if(root == null) return 0; int leftHeight = maxDepth(root.left); int rightHeigh
2020-11-06 20:47:13 615 1
原创 此树非彼树:二叉树
一、什么是二叉树?如上图所示的树就类似于二叉树。1.1 概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:1. 每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。2. 二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。1.2两种特殊的二叉树① 满二叉树: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k)-1 ,
2020-11-05 21:57:31 662
原创 数据结构之循环双端队列
循环双端队列和循环队列在实现上几乎是一样的,需要注意的有以下几点:1、定义循环变量 front 和 rear 。一直保持这个定义,到底是先赋值还是先移动指针就很容易想清楚了。① front:指向队列头部第 1 个有效数据的位置;② rear:指向队列尾部(即最后 1 个有效数据)的下一个位置,即下一个从队尾入队元素的位置。2、为了避免“队列为空”和“队列为满”的判别条件冲突,我们有意浪费了一个位置。浪费一个位置是指:循环数组中任何时刻一定至少有一个位置不存放有效元素。上图所示情况,我们就可以判定
2020-11-04 23:44:05 1622
原创 数据结构:循环队列
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列为空,返回 -1 。
2020-11-03 23:35:37 2064
原创 调用方法
1、方法的基本用法1.1什么是方法(method)方法就是一个代码片段. 类似于 C 语言中的 “函数”。方法存在的意义:是能够模块化的组织代码(当代码规模比较复杂的时候)。做到代码被重复使用, 一份代码可以在多个位置使用。让代码更好理解更简单。直接调用现有方法开发, 不必重复造轮子。1.2 方法定义语法基本语法// 方法定义public static 方法返回值 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值];}// 方法调用返回值变量
2020-10-18 22:47:04 716
原创 Java数组小练笔
1、数组转字符串实现一个方法 toString, 把一个整型数组转换成字符串. 例如数组 {1, 2, 3} , 返回的字符串为 [1, 2, 3], 注意 逗号的位置和数量。代码示例:public class java1 { public static String toString(int[] array) { String str = "["; for (int i = 0; i <array.length ; i++) {
2020-10-16 23:57:52 596 1
原创 数组知识小结
一、数组基本用法1.1 什么是数组数组本质上就是让我们能 “批量” 创建相同类型的变量.例如:如果需要表示两个数据,那么直接定义两个变量即可 int a;int b如果需要表示五个数据,那么也可以照上面的方法定义五个变量。那么问题来了,如果要创建一万个数据,还要这样一个个的定义吗?这时候就需要使用数组,帮助我们批量创建。1.2创建数组基本语法/ /动态初始化数据类型 [ ] 数组名称 = new 数据类型 [ ] { 初始化数据 };/ /静态初始
2020-10-15 23:28:36 445 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人