自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode笔记02

给你一个字符串 ,找到 中最长的回文子串。示例 1:示例 2:思路:这个问题描述的不是很清楚, 回文子串就是一个对于中心点对称的字符串(“otto”, “abcba”), 所以对于这道题而言要考虑两种情况, 就是奇数子串和偶数子串, 定义一个通用函数:从中心点向左右滑动, 两边字符一样就继续滑, 不一样就停下返回截取字符串, 如果有哪边到头了也停下。6. Z 字形变换(Medium)问题:将一个给定字符串 根据给定的行数 ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 行数

2022-06-19 22:30:03 189

原创 JVM之内存模型

很多人将java 内存结构与java 内存模型傻傻分不清楚, java 内存模型是 Java Memory Model (JMM) 的意思。关于它的权威解释, 请参考:这里

2022-06-18 18:24:26 198

原创 JVM之类加载

验证: 验证类是否符合JVM规范, 安全性检查用支持二进制的编辑器修改 HelloWorld.class 的魔数(->), 在控制台运行准备: 为 static 变量分配空间, 设置默认值解析将常量池中的符号引用解析为直接引用:使用 HSDB 工具可以看到使用 ClassLoader 加载类 C, 类 D 是不会被加载的, 并且在类 C 中, 类 D 还只是一个未被解析的常量符号而使用 的时候则会执行 C 里面的静态代码 , 所以类 C 和 类 D 都会被加载初始化即调用 , 虚拟机会保证这个类的构

2022-06-18 18:20:40 206

原创 LeetCode笔记01

给定一个整数数组 和一个整数目标值 ,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:示例 2:示例 3:思路:这道题想要解出来很简单, 循环暴力破解就行, 但是想要使算法复杂度小, 就要去换个方法了, 这里使用哈希表(HashMap)这个数据结构, 特点是键不可重复。我们遍历数组的时候, 将当作key(这样只需要看后面有没有等于这个key的, 有的话我们就

2022-06-18 18:07:37 137

原创 JVM之字节码技术

字节码技术1. 类文件结构一个简单的HelloWorld.javapublic class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); }}执行javac -parameters -d . HellowWorld.java编译为 HelloWorld.class 后是这个样子的:0000000 ca fe ba be 00 00

2022-05-03 22:14:22 573

原创 JVM之垃圾回收

1. 如何判断对象可以回收引用计数法当一个对象被引用时, 该对象的引用值就加1, 当这个对象不再被引用时, 引用值就减1, 当引用值为0时, 就表示该对象可以被垃圾回收器回收。引用计数法有一个弊端, 那就是当两个对象相互引用的时, 两个对象的引用值都为1, 此时这两个对象就算用不到了, 也不会被回收。可达性分析算法Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象, 看是否能够沿着 GC Root对象 为起点的引用链找到该对象, 找不到, 表示可以回收哪些对象可以

2022-04-26 22:00:43 313

原创 JVM之内存结构

1. 程序计数器定义:Program Count Register 程序计数器(寄存器)作用: 记住下一条JVM指令的执行地址特点:是线程私有的(每一个线程都有自己的程序计数器)不会存在内存溢出作用://二进制字节码 //JVM指令 //Java源代码 0: getstatic #20 // PrintStream out = System.out; 3: astore_1 // -- 4: aload_1 //

2022-04-16 00:45:06 138

原创 JUC之ForkJoin框架

ForkJoinForkJoin是由JDK1.7后提供多线并发处理框架, ForkJoin的框架的基本思想是分而治之。使用ForkJoin将相同的计算任务通过多线程的进行执行, 从而能提高数据的计算速度。在google的中的大数据处理框架mapreduce就通过类似ForkJoin的思想, 通过多线程提高大数据的处理。使用ForkJoin框架, 需要创建一个ForkJoin的任务。因为ForkJoin框架为我们提供了RecursiveAction和RecursiveTask。我们只需要继承ForkJoi

2022-04-16 00:44:43 116

原创 JUC之线程池

什么是线程池线程池(thread pool):一种线程使用模式。线程过多会带来调度开销, 进而影响缓存局部性和整体性能。而线程池维护着多个线程, 等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用, 还能防止过分调度。特点:降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的销耗。提高响应速度: 当任务到达时, 任务可以不需要等待线程创建就能立即执行。提高线程的可管理性: 线程是稀缺资源, 如果无限制的创建 ,不仅会

2022-04-15 20:42:11 285

原创 JUC之阻塞队列

什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是: 在队列为空时, 获取元素的线程会等待队列变为非空。当队列满时, 存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景, 生产者是往队列里添加元素的线程, 消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器, 而消费者也只从容器里拿元素。当队列是空的, 从队列中获取元素的操作将会被阻塞当队列是满的, 从队列中添加元素的操作将会被阻塞试图从空的队列中获取元素的线程将会被阻塞,

2022-04-15 20:40:33 114

原创 JUC之辅助类

CountDownLatch(闭锁)什么是CountDownLatchCountDownLatch是一个同步工具类, 用来协调多个线程之间的同步, 或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后, 再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后, 计数器的值就会减一, 当计数器的值为0时, 表示所有的线程都已经完成一些任务, 然后在CountDownLatch上等待的线程就可以恢复

2022-04-15 20:38:53 216

原创 JUC之Callable接口

Callable创建线程有四种方式:继承Thread类实现Runnable接口Callable接口线程池前两种前面说过了, Runnable接口是比较常用的, 因为在Java中继承是很重要的, 不能随便使用, 但是Runnable接口有一个缺点, run()方法没有返回值, 也就是当线程结束时, 不能返回结果, 为了能返回结果, 在JDK1.5以后出现了Callable接口:@FunctionalInterfacepublic interface Callable<V> {

2022-04-15 20:37:07 2749

原创 JUC之各种锁

公平锁和非公平锁回头看一下之前的一个多线程买票案例public class LockSaleTicket { public static void main(String[] args) { LockTicket lockTicket = new LockTicket(); new Thread(()->{ for (int i = 0; i < 20; i++) { lockTicket.sal

2022-04-15 20:34:42 612

原创 JUC之锁的八种情况

准备工作创建一个资源类Phone(手机), 里面两个方法sendEmail(发邮件), sendSMS(发短信), 都是线程同步方法class Phone { public synchronized void sendSMS() { System.out.println("------sendSMS"); } public synchronized void sendEmail() { System.out.println("------sendE

2022-04-15 20:31:23 135

原创 JUC之集合线程安全

List集合演示先来看下面一段代码:List <String> list = new ArrayList<>();//多线程并发访问for (int i = 0; i < 10; i++) { new Thread(() -> { //添加数据 list.add(UUID.randomUUID().toString().substring(0, 8)); //读取数据 System.out.p

2022-04-15 20:29:44 351

原创 JUC之线程间通信

前言我们知道了什么是线程, 知道了什么是锁, 但是怎样编写多线程程序呢? 通过下面的文章将告诉大家编写一个简单的多线程程序需要那几步。线程间通信谈到线程间通信就不得不说一个经典的生产者-消费者模型, 我们假定这样一个场景:一个小小的饮品店, 桌子太小了每次只能放一杯饮品桌子上没有饮品的时候顾客就会等待桌子上有饮品的时候店长就不做了(很佛系)我们尝试用代码实现以下这个场景:把饮品店, 饮品, 做饮品, 取饮品给抽象出来class IceCream{ //饮品 priv

2022-04-15 20:27:42 143

原创 JUC之初识锁

先来看一段代码使用三个线程来模拟三个售票员售票, 票数是固定的, 并且在三个售票员之间时共享的。public class SaleTicket { public static void main(String[] args) { //创建Ticket对象 Ticket ticket = new Ticket(); //创建三个线程 new Thread(() -> { for (int i = 0; i

2022-04-15 20:24:44 99

原创 JUC之初识线程

线程与进程的区别在讨论多线程之前, 我们先来了解一下什么是线程, 什么是进程, 以及两个的区别是什么:进程(Process)计算机中的程序关于某数据集合上的一次运行活动进程是线程的容器程序是指令、数据及其组织形式的描述,进程是程序的实体系统进行资源分配和调度的基本单位,是操作系统结构的基础线程(thread)操作系统能够进行运算调度的最小单位被包含在进程之中,是进程中的实际运作单位一条线程指的是进程中一个单一顺序的控制流如果没有操作系统知识的话有点难理解上面的话, 我用一个

2022-04-15 20:22:05 240

原创 Spring IOC配置与使用

前言​ 上篇文章简单介绍了IOC, 本文则是重点讲述如何使用Spring5里的IOC进行Bean管理, 有两种方式, 分别是基于xml文件和注解, 我们都会一一讲到。BeanFactory接口IOC容器的底层就是对象工厂Spring提供了IOC容器的两种实现方式(两个接口):BeanFactory: IOC容器基本实现, 是Spring内部使用的接口, 不提供给开发人员使用, 加载文件的时候不会船舰对象, 在获取对象的时候才会创建对象。ApplicationContext: BeanFa

2021-12-07 22:16:38 395

原创 IOC容器解析

前言​ 本文旨在对IOC容器的简单解析, 主要是对自己学习理解的总结, 如有错误, 欢迎各位大佬指正!IOC原理为什么要用IOC​ 在了解什么是IOC之前, 我们先来了解一下, IOC为什么出现, 以及我们为什么要使用IOC。​ 在面向对象设计的程序系统里, 有N多个类, 这些类与类相互依赖, 相互合作, 我们的程序才能完整的运行起来, 但是久而久之就发现一些问题, 如果对一个类结构进行更改, 那么与这个类直接依赖或间接依赖的类也要做出相对应的更改; 就像一块精密的手表, 里面多个独立的齿轮

2021-12-07 11:38:15 191

原创 JDBC五种连接方式

JDBC原理图准备工作在项目目录下创建libs文件夹,将连接用的jar包导入把导入的jar包加入到项目中,右键点击jar包五种连接方式方式一该方式代码中显式出现了第三方数据库的APIpublic void connect01() throws SQLException { //1. 注册驱动 Driver driver = new Driver(); //2. 得到连接 String url = "jdbc:my

2021-12-07 11:33:15 598

原创 数据库事务的四大特性以及事务的隔离级别

前言​ 本篇将会讲述数据库中事务的四大特性(ACID), 事务控制语句, 事务会出现的几种常见问题, JDBC中如何使用事务, 并详细说明事务的隔离级别。四大特性(ACID)​ 如果一个数据库支持事务操作, 那么该数据库必须具备以下四大特性:原子性(Atomicity)​ 一个事务(transaction)中的所有操作, 要么全部完成,要么全部不完成, 不会在中间某个环节结束, 事务在执行过程中发生错误, 会被回滚(Rollback)到事务开始前的状态, 就像这个事务从来没有被执行过一样。

2021-12-07 11:27:54 219

原创 使用hexo搭建博客并部署到云服务器

前言基于hexo搭建个人blog的文章网上有很多,但是其中一些多多少少有点问题,通过搭建本站进行了无数的踩坑,总结出了这篇搭建教程,一步步跟着做基本不会出错,话不多说,下面开始本地部署Hexo一.准备nodejs: 下载git: 下载二.安装本地hexo环境nodejs和git的安装只需要无脑下一步即可,安装完成后可以在dos窗口进行检验,输入命令node -v和npm -v查看版本信息三.安装hexo框架在非系统盘下新建一个blog文件夹,进入文件夹后右键Git Bash Here输

2021-12-07 11:24:14 1859 4

空空如也

空空如也

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

TA关注的人

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