自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 出现了异常,程序会怎么办?

Java中程序出现了异常,整个程序会停止吗,程序是啥反应? 一直都思考不明白的问题。 学JVM的时候记下来的一句话 Java方法有两种结束方式,一种是return命令直接返回,另一种是抛出未被捕获的异常而结束,两种方式都对应着栈帧的弹出。 意思就是出现异常没补捕获方法就会结束? 弹出的栈帧是出现异常的那个栈帧还是全部栈帧? 测试代码: 结果: 可见,m1和m2的sout都没有执行。 难道逻辑是这样:m2中出现的异常没有解决,会抛出去,然后把m2栈帧弹出去!然后执行m1,m1也没有捕获这个异常,就继续

2022-03-02 00:56:19 363 1

原创 try-catch-finally

1、finally语句总会执行 2、如果try、catch中有return语句,finally中没有return,那么在finally中修改除包装类型和静态变量、全局变量以外的数据都不会对try、catch中返回的变量有任何的影响(包装类型、静态变量、全局变量) 3、尽量不要在finally中使用return语句,如果使用的话,会忽略try、catch中的返回语句,也会忽略try、catch中的异常,屏蔽了错误的发生 4、finally中避免再次抛出异常,一旦finally中发生异常,代码执行将会抛出fin

2021-04-27 10:41:27 240

原创 经典问题:int i = 10; i = i++; 的问题,从JVM的角度理解

题目 之前学多线程的时候遇到的问题,题目如下: public class Demo03 { public static void main(String[] args) { int i = 10; i = i++; System.out.println(i); } } 很多人都已经背下来了答案:10。 我一直很搞不懂为啥结果是10,在网上找的博客也一直没有讲解很清晰的,正好今天学了JVM的字节码指令,对于这个问题解开了一点疑惑。 分析过程 首

2021-04-26 21:56:00 2707 4

原创 Redis-涵盖大部分知识

Redis 简介 概念:Redis是用基于C语言开发的一个开源的高性能键值对(Key-value)数据库。 特征: 数据之间没有必然的关联关系 内部采用单线程机制进行工作 高性能。50个并发执行十万个请求,读的速度是11万次/秒,写的速度是8.1万次/秒 多数据类型支持 字符串类型 string 类似 String 列表类型 list 类似LinkedList 散列类型 hash 类似Hash

2021-04-12 22:06:17 436

原创 排序算法(冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序)

冒泡排序 思想:比较两个相邻的元素,将较大的元素放在右边 代码: //写法一 public static void bubbleSort(int[] arr) { for (int i = arr.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (arr[j] > arr[j + 1]) swap(arr, j+1, j);

2021-04-07 10:30:06 284 1

原创 生产者消费者模型-Java实现

Java实现生产者消费者模型 class Clerk { private static int productNumber = 0;//商品的数量 private static final int MAX = 20; //最多可以有20个商品 public synchronized void addProduct() { try { Thread.sleep(1000); //延时,让效果更加明显 } catch (E

2021-04-04 10:07:55 164

原创 前缀树过滤敏感词

什么是前缀树? 前缀树别名单词查找树、字典树,结构图为: 结构特性为: 根节点不存储值,除根节点外每一个节点都只包含一个字符(也可以说是在字符存在路径上)。 对应某一个节点,其子节点的值各不相同 从根节点到某一个节点,路径上经过的字符连接起来,为该叶子节点对应的字符串 应用场景: 前缀匹配 字符串检索 词频统计 优缺点: 查找效率高,耗费内存,典型的以空间换时间。 过滤敏感词的检索原理 利用词的公共前缀缩小查词范围,提高检索效率 过滤敏感词的实现 1. 定义一个前缀树的结构 private cla

2021-04-01 12:16:01 557

原创 MySQL高级知识总结

存储引擎 InnoDB和MyISAM的区别? 锁:MyISAM只支持表级锁,InnoDB支持表级锁和行级锁 事务和崩溃后的安全恢复:MyISAM强调性能,每次的查询都具有原子性,但是不支持事务;InnoDB支持事务、回滚和崩溃修复。 外键:MyISAM不支持外键,InnoDB支持外键 MVCC:InnoDB支持MVCC(多版本并发控制) 索引 什么是索引? **索引是通过对数据库表的一列或者多列的值进行排序实现能够帮助MySQL高效获取数据的一种数据结构,**它可以大大提高数据库的检索速度。就好比一本书的目

2021-03-30 21:41:54 228

原创 HashMap的get()和put()的底层实现原理

概述 HashMap基于Map接口实现,以键值对(Key-Value)的形式存储数据,允许null值和null键;HashMap不是线程安全的,同时也不保证元素有序。HashMap的底层是以 数组 + 链表 + 红黑树来实现的。 get()的实现 public V get(Object key) { Node<K,V> e; // 哈希表是由一个个Node组成的 return (e = getNode(hash(key), key)) == null ? null : e.val

2021-03-26 20:13:00 1505

原创 Java基础复习

#基础知识 ##二进制的原码、反码、补码 在计算机底层中,所有的数字都是以二进制的补码存储的。 对于正数:三码相同。 对于负数: 原码:直接将该数转成而二进制码,最高位是符号位,0代表正数,1代表负数 反码:符号位不变,其他位取反 补码:反码+1 Java基础部分 方法的重载与重写 重载:在同一个类中,存在多个重名方法,只要他们的**参数列表(参数个数或者参数类型)**不同即可构成重载。 ​ “两同一不同”:同一个类,同一个方法名;参数列表不同 ​ 与其他的比如 权限修饰符、返回值类型、参数变量

2021-03-23 08:25:55 136

原创 旋转数组的最小数字

题目描述 分析:根据题意可知,旋转数组就是将一个递增的数组分成两个递增数组去看待,一个在前,一个在后,后面的数组是值较小的数组,前面的数组是值较大的数组。 思路一:暴力法,直接遍历。 我们已经知道,不考虑特殊情况,在前面的数组是值较大的数组,在后面的数组是值较小的数组。那么我们可以遍历数组,对前后两个数字进行比较,直到出现当前数字比前一个数字小的情况,那么当前数字就是在整个数组中值最小的那一个。 特殊情况1:整个数组就是递增的,也就是说旋转的时候,把0个数字放在了后面,相当于整个数组没有变,那么我们在

2021-03-09 01:44:20 261

原创 重建二叉树--递归求解

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 首先需要明白的基础知识: 二叉树前序遍历的第一个元素为二叉树的根节点 拿到根节点后,在二叉树的中序遍历中找到这个根节点的值,则在二叉树的中序遍历中,该根节点前面的数都属于根节点的左子树,后面的数都属于右子树。 因此在可以将前序遍历和中序遍历的数组划分为: 前序遍历:[ 根节点 | [左子树的前序遍历] | [右子树的前序遍历] ] 中序遍历:[[左子树的中序遍历] | [根节点] |.

2021-03-06 15:31:29 167

原创 Servlet容器、Web容器、Spring容器、SpringMVC容器

要想知道他们之间的关系,我们得先搞清楚他们分别是什么? Servlet容器 介绍Servlet容器的时候顺便复习下Java Web,我们都知道 Java Web 的三大组件:Servlet、Filter、Listener。 Servlet:可以理解为是运行在服务端的Java小程序,它负责客户端和服务端的信息交互和处理。但是Servlet中没有main方法,不能独立运行,所以必须存放在Servlet容器中,由Servlet容器去管理Servlet。那么它工作的过程就是:客户端发送请求,传递到Servlet容

2021-02-27 22:09:08 320 1

原创 TCP实现网络通信

客户端 package com.zhang.lession02; import java.io.*; import java.net.InetAddress; import java.net.Socket; public class TCPClientDemo02 { public static void main(String[] args) throws Exception { Socket socket = new Socket(InetAddress.getByNam.

2021-02-04 17:55:23 181

原创 UDP网络编程实现多线程聊天

实现两个人都可以发送和接收消息 TalkSender.java package com.zhang.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import

2021-02-04 16:59:35 161 2

原创 多线程学习笔记

基本概念 程序(program):一段静态的代码 进程(process):已经加载到内存中正在运行的程序, 是动态的;进程是资源分配的基本单位 如正在执行的一个qq、微信程序就是一个进程 线程(thread):进程可进一步划分为线程,是一个程序内部的一条执行路径 多线程:一个进程同一时间并行执行多个线程,就是支持多线程的 线程是调度和执行的基本单位,每个线程拥有独立的运行栈和程序计数器 一个进程中的多个线程共享相同的内存单元/内存地址空间,他们从同一堆中分配对象,可以访问相同的变量和对象,这使得线程间

2021-01-18 21:52:18 133

原创 MySQL复习总结(二)

连接查询 连接查询就是将多张表联合起来进行查询。 连接方式: 内连接 等值连接 非等值连接 自连接 外连接 左外连接(左连接) 右外连接(右连接) 全连接 笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件的限制,查询的结果就是两张表的记录数的乘积。 解决:并且加上过滤条件。使用一个案例来说明 --- 找出每一个员工的部门名称,要求显示员工名和部门名。 select ename,dname from emp,dept -- 如果emp表中有5条记录,dept中有4条记录,查出来的结果

2020-12-04 15:59:50 152

原创 MySQL复习总结(一)

创建数据库表 对已经建好的表和数据库,是可以查看其建表或建库的语句的 show create database `user`; -- 可以查看创建user库的sql语句 show create table `user`; -- 查看创建user表的sql语句 -- 输出结果 CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(255) NOT NULL, `password` VAR

2020-12-03 22:26:09 162

原创 spring:快速开始

本文旨在说明spring程序的开发步骤,是一个小的quickstart 导入Spring的maven坐标 编写UserDao接口和UserDaoImpl实现类 创建Spring核心配置文件applicationContext.xml,并配置UserDaoImpl 通过测试打印出Bean实例 具体实现: 导入Spring的maven坐标 <dependency> <groupId>org.springframework</groupId>

2020-11-25 11:28:18 159

空空如也

空空如也

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

TA关注的人

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