![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 98
youthen&
这个作者很懒,什么都没留下…
展开
-
【Java】JVM 相关的简单介绍(JVM、GC)
1. JVMJVM 的出现是为了实现跨平台一个 JVM 中包含这几个主要部分类加载器 执行引擎(解释执行字节码) 动态内存管理1.1 JVM 中的内存区域划分JVM 中内存来自于操作系统,JVM启动后就会从操作系统申请一大块内存,再针对这个内存划分出一些区域2.2 GC 要回收哪些内存堆 主要回收这里方法区 GC 需要回收方法区的内容!但是方法区空间小,数据失去作用的概率低栈...原创 2020-12-08 17:57:13 · 208 阅读 · 0 评论 -
Java 面向对象编程——多态
向上转型父类引用子类对象叫向上转型。class Animal{ public String name; public Animal(String name){ this.name = name; } public void eat(){ System.out.println(this.name + "正在吃"); ...原创 2020-10-15 15:43:01 · 192 阅读 · 0 评论 -
【Java笔试题】用栈实现队列
使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); /...原创 2020-09-02 16:42:04 · 121 阅读 · 0 评论 -
用队列实现栈
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的...原创 2020-09-02 16:23:49 · 233 阅读 · 0 评论 -
【Java笔试题】有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例 5:输入: ...原创 2020-09-02 15:02:24 · 303 阅读 · 0 评论 -
【Java笔试题】杨辉三角
给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1],[1,4,6,4,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pascals-triangle著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解...原创 2020-08-26 16:10:55 · 141 阅读 · 0 评论 -
【Java】数据结构之泛型
泛型的引入背景:为了能够写一个类/方法就能同时支持多种不同类型的对象所谓的泛型,其实就是从语法层面上对 Object 进行了一个简单的包装,编译过程帮我们自动加上一些编译器的类型检查,自动帮我们完成一些类型转换工作举个例子:定义一个泛型类package com.Test0825;/** * Create with IntelliJ IDEA * Description: * User:Zyt * Date:2020-08-25 */public class SeqL.原创 2020-08-25 16:34:20 · 248 阅读 · 0 评论 -
【Java】青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-.原创 2020-08-24 03:16:08 · 448 阅读 · 0 评论 -
【Java】线程安全问题
线程安全问题运行下面代码public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Thread t1 = new Thread(){ @Override public void run(){ for (int i = 0; i < .原创 2020-08-21 21:13:27 · 215 阅读 · 0 评论 -
【Java】顺序表和链表的区别
主要从内存空间和插入删除操作两方面考虑顺序表:优点:顺序表空间连续,支持随机访问;缺点:中间或前面部分的插入删除操作时间复杂度 O(N) 增容的代价比较大(方便查找,不方便插入和删除)链表:优点:任意位置插入删除的时间复杂度为 O(1) 没有增容问题,插入一个开辟一个空间缺点:以节点为单位存储,不支持随机访问(不方便查找,方便插入删除)...原创 2020-08-21 16:46:02 · 229 阅读 · 0 评论 -
【Java】合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4原创 2020-08-21 16:38:16 · 305 阅读 · 0 评论 -
【Java笔试题】160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 .原创 2020-08-21 15:54:41 · 152 阅读 · 0 评论 -
【Java笔试题】142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2...原创 2020-08-21 14:57:54 · 172 阅读 · 0 评论 -
【Java笔试题】回环链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = ..原创 2020-08-21 11:24:52 · 412 阅读 · 0 评论 -
【Java】链表的回文结构
题目描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true解题思路1、先找到链表的中间节点,定义一个 fast 节点和 slow 节点,先让 fast 走两步,然后 slow 和 fast 同时走,当 fast.next 为 null 的时候,slow 就是中间.原创 2020-08-21 10:54:31 · 218 阅读 · 0 评论 -
【Java】博客管理系统的实现
一、分析需求【先只实现核心内容】注册新用户 登录已有用户 展示博客列表(每一项包含了文章的标题、作者)【点击标题及刽跳转到文章详情页】 文章详情页中,可以看到文章的标题、作者、文章内容,其他评论功能、分类功能等先不考虑 发布新的博客(不考虑富文本编辑-> 嵌入图片、嵌入视频、嵌入代码等) 删除自己的博客二、创建项目 maven app可以参考创建 maven 项目来创建好 maven 项目要注意的是 pom.xml 中需要添加的依赖有两个,一个是 servlet API .原创 2020-08-20 22:14:08 · 900 阅读 · 0 评论 -
Java 中的插入排序和希尔排序
先把整个数组分成若干数组,分成的组数称为 gap ,初始 gap = 3,同组中的相邻元素下标之差就是 gap针对每个数组分别进行过插排,针对每个分组分别插排之后,虽然此时没有彻底完成最终排序,数组的有序性整体还是提高了,再对 gap = 2 进行插排,重复进行分组插排此时仍然没有差地完成排序,但是有序性又进一步提高了最后再针对 gap =1 进行插排,此时一定能完成最终的...原创 2020-08-17 23:37:00 · 84 阅读 · 0 评论 -
【Java】删除列表中的重复节点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路先定义一个新的头节点 newHead 做为标志位,再定义一个 tmp 节点负责构造的新链表。然后再定义一个 cur 节点用来遍历原链表。当 cur 不为空时,进入循环,在cur != cur.next 时,让 tmp = cur ,也就是将这个 cur 节点添加到新的头节点.原创 2020-08-11 23:05:50 · 369 阅读 · 0 评论 -
【Java】链表分割
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。思路:假想两个线段一左一右,定义一个指针 cur,循环遍历这个链表,对于比 x 大的数以尾插法的方式放入左边线段,剩下的以尾插法的方式放入右边的线段,需要定义bs be 为左边线段的头和尾,as ae 为右边线段的头和尾,最后只需要把 两个线段连起来,be.next = as.next.原创 2020-08-11 17:25:28 · 302 阅读 · 0 评论 -
【Java】链表中倒数第 K 个节点
输入一个链表,输出该链表中倒数第k个结点。思路:先定义两个指针,快引用 fast 和慢引用 slow,让 fast 先走 k-1 步,当 fast.next 为空的时候 slow 就是倒数第 k 个节点看图说明一下/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public ..原创 2020-08-11 16:28:58 · 165 阅读 · 0 评论 -
【Java操作系统】线程的中断、等待和休眠
1.中断一个线程结束可能有两种情况:已经把任务执行完了 任务执行了一半,被强制结束1.1 第一种方式 public void run() { while (!isQuit){ System.out.println("我在进行转账"); try { Thread.sleep(500);原创 2020-08-07 15:51:27 · 570 阅读 · 0 评论 -
【操作系统】线程状态
线程状态作用:辅助线程进行调度通过代码来显示一下各种线程状态public class ThreadDemo1 { public static void main(String[] args) { for (Thread.State state : Thread.State.values()){ System.out.println(state); } }}Java 中线程的状态是通过一个 enum 来表示.原创 2020-08-07 15:51:06 · 598 阅读 · 2 评论 -
【Java操作系统】线程中的 Thread 的常见类和方法
1. Thread 的常见构造方法方法 说明 Thread() 创建线程对象 Thread(Runnable target) 使用 Runnable 对象创建线程对象 Thread(String name) 创建线程对象并命名 Thread(Runnable target,String name) 使用 Runnable 对象创建线程对象,并命名 Thread(ThreadGroup g原创 2020-08-05 16:14:11 · 284 阅读 · 0 评论 -
【Java操作系统】线程的介绍和创建方法
线程(thread)如果把线程想象成是一个工厂,线程就是若干个流水线:线程其实是包含在进程中的 一个进程中可能会有多个线程 每个线程都有一段自己要执行的逻辑(指令),每个线程都是一个独立的“执行流” 同一个进程中的很多线程之间,是共享了一些资源所谓的“线程”可以理解成一种轻量级“进程”,也是一种实现并发编程的方式,创建一个线程比创建一个进程成本低,销毁一个线程,比销毁一个进程成本低。成本低的原因是,新创建一个线程,不需要给这个线程分配很多新的资源,大部分资源都是和原来线程共享的,如果新创原创 2020-08-05 13:47:57 · 321 阅读 · 0 评论 -
如何用 JConsole 来观察线程
在运行 JConsole 之前先保证自己的进程代码正在运行中并且没有运行结束,如果代码很快就执行结束了,可以在进程内部加一个死循环例如下面代码:public class Test0804 { static class Mythread extends Thread { @Override public void run() { System.out.println("Hello ,I am a thread!");原创 2020-08-04 22:06:56 · 548 阅读 · 0 评论 -
线程池中的一些常见参数
介绍一些线程池中的一些常见的参数理解这几个参数,把进程比喻成一个工厂1.corePoolSize:工厂中正式员工的数量2.maximumSize:工程中临时工的数量3.keepAliveTime + unit:临时工允许的空闲时间4.workQueue:工厂接到的订单5.theradFactory:工厂的 HR,负责招人6.handler:表示如果工厂忙不过来该怎么办(任务队列满了)直接异常 交给新加任务的线程来处理 丢弃队列中最老的任务 丢弃新来的任务...原创 2020-08-03 20:23:58 · 186 阅读 · 0 评论 -
锁策略
1. 锁策略1.1 乐观锁 vs 悲观锁乐观锁:世界大概率是和平的,多个线程竞争一把锁的概率会很低悲观锁:世界大概率是出问题的,多个线程竞争一把锁的概率会很高,恢复出更多的成本来进行锁冲突的处理两种想法没有优劣之分,要根据具体场景来进行使用1.2 读写锁把加锁操作分成了两种:读锁、写锁读锁和读锁之间是没有互斥的(不存在锁竞争),读锁和写锁、写锁和写锁之间才进行互斥如果某个场景下“一写多读”,使用读写锁效率就很高只进行读数据,若果多个线程同时读取一个数据,不会造成线程不安全原创 2020-08-03 19:54:46 · 152 阅读 · 0 评论 -
【Java笔试题】链表的中间节点
给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.ne...原创 2020-08-02 22:41:35 · 124 阅读 · 0 评论 -
【Java】链表的基本操作
链表主要是为了弥补一些顺序表的缺点:顺序表的插入删除操作时间复杂度为 O(N) 增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗 增容一般都是成2倍增长,会浪费一定的空间为了解决以上问题引入了链表结构,能够做到随用随取链表的概念链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。用图来简单描述一下链表不带头节点的单向非循环链表链表是由节点组成的,每一个节点都是一个 Node 对象,带头节点单向不循环链表...原创 2020-08-02 22:07:38 · 1631 阅读 · 0 评论 -
【Java】顺序表的操作
顺序表概念:顺序表是一段物理地址连续的存储单元一次存储数据元素的线性结构,一般来说用数组存储。在数组上完成数据的增删改查。静态顺序表适用于确定知道需要存多少数据的场景,顺序表底层是一个数据,但是顺序表本事是一种数据结构。特性能知道放了几个元素 不能跳着放用图形表示如下图顺序表的增删改查操作首先构造一个顺序表public class MyArrayList { public int[] elem;//数组 public int usedSize;//有效的原创 2020-07-28 18:43:08 · 300 阅读 · 0 评论 -
Linux 中启动 tomcat 端口号重复了不能启动 tomcat 怎么办
解决方法:把其他占用 tomcat 的端口的进程杀死 修改配置文件,使用其他端口1.查看进程 ps aux | grep tomcatps 命令查看进程(任务管理器),aux 最常用的选项, | 把 ps 的输出作为 grep 的输入,把包含tomcat 的内容筛选出来2、杀死进程kill [pid] ##pid 就是进程id3、此时再查看进程,就可以发现那个进程不见了4、此时再切换到 tomcat 的 bin 目录下启动tomcat ...原创 2020-07-26 16:42:34 · 506 阅读 · 0 评论 -
【Servlet】关于 Servlet 更多的 API
围绕着 HttpServlet => doXXXURL vs URIURL:网络资源的地址(地址就是一种身份标识的方式)URI:网络资源的身份标识URI是一个更广义的概念,相当于是一个人的身份标识,但是身份标识的方式有很多种方式,URL 是最常见的方式(相当于身份证号码),还可以有别的方式(其他有效证件)了解一些方法类型 方法 作用 Cookie[] getCookies() 返回一个数组,包含客户端发送该..原创 2020-07-14 16:17:57 · 129 阅读 · 0 评论 -
【操作系统】Servlet 的使用
Servlet开发 webapp 的一种方式(基础方式),是一组类和 API ,Tomcat 给程序员提供的webapp:网站前端:网页 后端:服务器(HTTP 服务器)——我们主要用 TomcatTomcat 相当于是一个购物平台【HTTP 请求解析,和 HTTP 响应的构造】,webapp 是平台上的店铺【根据请求计算响应=> 业务逻辑】,Servlet 相当于是平台给店铺提供服务学习 Servlet 目标:能学出 webapp (网站)安装 Tomcat8直接进入 T原创 2020-07-12 20:26:25 · 190 阅读 · 0 评论 -
【操作系统】maven 的介绍、安装与使用
开发 webapp 的一种方式(基础方式),是一组类和 API ,Tomcat 给程序员提供的webapp:网站前端:网页 后端:服务器(HTTP 服务器)——我们主要用 TomcatTomcat 相当于是一个购物平台【HTTP 请求解析,和 HTTP 响应的构造】,webapp 是平台上的店铺【根据请求计算响应=> 业务逻辑】,Servlet 相当于是平台给店铺提供服务补充一些前置内容:mavenJava 生态圈中的一个重要工具,maven 是一个构建工具(构建:编译 j原创 2020-07-10 17:06:34 · 189 阅读 · 0 评论 -
【操作系统】网络3(TCP的API)
前面一篇文章介绍了 UDP ,接下来介绍另外一组 APITCP 的 socket APIUDP特点:无连接,不可靠,面向数据报,全双工TCP特点:有链接,可靠性,面向字节流,全双工全双工:双向通信,借助一个 socket 对象,既可以发送数据,也能接收数据半双工:单向通信,要么只能读,要么只能写TCP 的 APITCP 的 API 也涉及到两个核心的类ServerSocket Socket和 UDP 差别较大(差别也就体现在 UDP 和 TCP 之间的特性的区别上).原创 2020-07-08 16:00:52 · 334 阅读 · 0 评论 -
【操作系统】网络2(套接字和 UDP)
网络编程 套接字(socket)是一组 API,实现网络编程准备知识:服务器(server)——客户端(client)例如:客人来到餐馆,点餐,餐馆做饭,吃完交钱走人餐馆无法确认客人啥时候来吃饭,只能一大早就开门,很晚才关门,服务器也无法确定客户端啥时候来发起请求,也知道能很早开门,很晚关门,甚至很多服务器都是 7×24 小时工作的...原创 2020-06-30 21:27:01 · 211 阅读 · 0 评论 -
【操作系统】网络1(协议)
协议(网络中的关键)字面上理解,就是一个约定网络中的协议协议分层分层带来的好处分层能够避免某个协议过于庞大。(类似于写代码,如果代码太复杂,就要拆分成多个文件)【互联网上需要考虑问题有很多】 分层后,协议之间“解耦合”,上层协议不需要理解下层协议的细节实现,相当于“封装” 分层之后,任意层次的协议,都可以灵活替换实际网络通信中的协议要更加复杂,要分很多层,例如:OSI七层模型TCP/IP五层(或四层)模型应用层应用程序直接打交道的协议(实际开发中涉及最多的部..原创 2020-06-20 12:26:12 · 480 阅读 · 0 评论 -
【测试】用例篇2(黑盒测试的测试用例)
黑盒测试设计测试用例的方法有哪些?等价类、边界值、因果图、正交排列、场景法、错误猜测法一、等价类把输入(特殊情况下才考虑输出)划分成若干个等价类,在每一个等价类中选择一个测试用例,如果该测试用例测试通过,我们就说这个测试用例代表的等价类测试通过。目的:我了解决测试用例不能穷举的情况。有效等价类:针对输入有意义的数据无效等价类:针对系统输入或者需求没有意义的数据例:网易邮箱账号注册划分等价类有效等价类:6~18 个字母 6~18个数字 6~18 个下划线.原创 2020-06-20 09:03:14 · 1702 阅读 · 0 评论 -
多线程的一些案例
单例模式这是一种常见的“设计模式”。“设计模式”类似于“棋谱”。场景:代码中的有些概念不应该存在多个实例,此时应该使用单例模式来解决两种典型的方式实现单例模式:1、饿汉模式:“饿”代表只要类被加载,就会立刻实例化 Singleton 实例,后续无论怎么操作,只要永远不使用 getlnstance,就不会出现其他的实例。2、懒汉模式类加载的时候,没有立刻实例化,第一次调用 getInstance 的时候才会真正实例化,如果要是代码一整场都没有调用getInstance 此时实例原创 2020-06-19 11:48:17 · 548 阅读 · 0 评论 -
【测试】测试的概念
软件测试的目的和原则目的:验证软件有或没有问题。 原则:以客户为中心,遵循软件测试的规范、流程、标准和要求。什么是需求满足用户的期望或规定的文档(合同、标准、规范)所需要的条件和权能,包含用户需求和软件需求。非功能性需求对设计和实现提出了限制,比如性能要求,质量标准,或者设计限制。 用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该 需求一般比较简略。 软件需求:或者叫功能需求,该需求会详细描述开发人员必须...原创 2020-06-05 20:41:05 · 810 阅读 · 1 评论