自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 数组另类用法(字符来当数组下标使用)

的值为a,细心的朋友可能就发现了,没错就是a的ASCII值。看力扣的时候发现有位大佬使用字符来当数组下标使用。我打开idea,复制代码,加上断点,开始调试。

2023-12-04 00:16:58 594

原创 【代码】基于Android的电子地图初步设计(高德SDK)

代码

2023-11-22 16:38:10 398

原创 Git——分布式版本控制工具

分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。举例:Git

2023-11-21 10:18:37 970

原创 IDEA中application.properties文件中文乱码

在File->Settings->Editor->File Encodings选项中,将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致,可以是GBK或者UTF-8。项目编码格式与IDEA编码格式不一致导致的。

2023-10-28 16:27:23 2673

原创 【JavaWeb】后端(MySQL+Mybatis)

数据库:DataBase ( DB),是存储和管理数据的仓库。数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

2023-10-22 14:45:30 1366

原创 IDEA创建完Maven工程后,右下角一直显示正在下载Maven插件

每次创建 Project 后都需要设置 Maven 家目录位置(就是我们自己下载的Maven),否则 IDEA 将使用内置的 Maven(不稳定)并使用默认的本地仓库位置。这样一来,我们在命令行操作过程中已下载好的 jar 包就白下载了,默认的本地仓库通常在 C 盘,还影响系统运行,因此可以将默认的maven改成我们下载的maven。这是由于新建的Maven工程,IDEA会用它内置的默认的Maven版本,使用国外的网站下载Maven所需的插件,速度很慢。

2023-09-17 22:47:22 5826

原创 【JavaWeb】后端(Maven+SpringBoot+HTTP+Tomcat)

Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM,Project object model)的概念通过一小段描述信息来管理项目的构建。作用:方便的依赖管理统一的项目结构标准的项目构建流程仓库:用于存储资源,管理各种jar包。

2023-04-12 21:21:10 1114 2

原创 【JavaWeb】前端框架(Vue+Ajax+工程)

Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。基于框架进行开发,更加快捷、更加高效。Vue项目-创建vue uiVue项目-目录结构基于Vue脚手架创建出来的工程,有标准的目录结构,如下:Vue项目-启动Vue项目-配置端口打开vue.config.js。

2023-04-05 00:18:57 941

原创 【JavaWeb】前端基础(HTML+CSS+JavaScript)

Web标准也称为网页标准,由一系列的标准组成,大部分由W3C ( World wide web Consortium,万维网联盟)负责制定。HTML:负责网页的结构(页面元素和内容)。CSS:负责网页的表现(页面元素的外观、位置等页面样式,如:颜色、大小等)。JavaScript:负责网页的行为(交互效果)。HTML ( HyperText Markup Language) :超文本标记语言。超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。

2023-03-31 20:38:29 2431

原创 Maven

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)POM (Project Object Model)项目对象模型Maven中的坐标用于描述仓库中资源的位置。

2023-03-21 17:19:20 388

原创 MySQL锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

2023-03-18 17:30:11 764

原创 【Spring】spring框架简介

spring是一个开源的轻量级Java开发应用框架,可以简化企业级应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。Spring的生态及其完善,不管是Spring哪个领域的解决方案都是依附于在Spring Framework基础框架的。

2023-03-17 03:58:02 596

原创 MySQL多表查询

一对多(多对一)多对多一对一概述:指从多张表中查询数据笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)

2023-03-16 17:10:08 311

原创 MySQL分库分表

IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘I0,效率较低。请求数据太多,带宽不够,网络I0瓶颈。CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。Mycat是(阿里巴巴)开源的、活跃的、基于Java语言编写的MySQL数据库中间件。

2023-03-15 14:47:16 407

原创 MySQL SQL优化

开启慢查询日志( SET GLOBAL long_query_time=阈值;超过阈值的sql就会记录到慢查询日志当中),或查看执行计划(explain+SQL)。慢查询优化如下:(1)分析sql语句,是否加载了不需要的数据列(2)分析sql执行计划,字段有没有索引,索引是否失效,是否用对索引(3) 使用复杂查询时,尽量使用关联查询来代替子查询,并且最好使用内连接(4)orderby查找时使用索引进行排序,否则的话需要进行回表,然后在排序缓冲区中进行排序。

2023-03-15 12:08:42 339

原创 MySQL索引

索引(index)是帮助MysQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

2023-03-12 09:23:18 369

原创 MySQL事务

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。默认MysQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

2023-03-10 12:20:13 359

原创 MySQL数据库引擎(MyIsAm和InnoDB)

MyIsAM的访问速度一般InnoDB快,差异在于innodb的mvcc、行锁会比较消耗性能,还可能有回表的过程(先去辅助索引中查询数据,找到数据对应的key之后,再通过key回表到聚簇索引树查找数据)xxx.ibd: xx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。InnoDB是聚簇索引,MyIAm是非聚簇索引。

2023-03-09 15:31:32 419

原创 MySQL 数据类型

这些类型包括严格数值数据类型(integer、smallint、decimal和numeric),以及近似数值数据类型(float、real和double precision)。字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。表示时间值的日期和时间类型为datetime、date、timestamp、time和year。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

2023-03-07 10:50:28 606

原创 MySQL简述

数据库概念:数据仓库,相当于一款软件,安装在操作系统(Windows,Linux,mac,…)之上,可以存储大量的数据,500万!作用:存储数据,管理数据,(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。

2023-03-07 09:42:58 282

原创 【Java】JVM

JVM是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。JVM包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

2023-03-05 15:21:40 560

原创 【Java】AtomicInteger的使用场景

类是系统底层保护的int类型,通过对int类型的数据进行封装,提供执行方法的控制进行值的原子操作,但。是一个提供原子操作的Integer类,通过线程安全的方式操作加减。从JAVA 1.5开始,AtomicInteger 属于java.util.concurrent.atomic 包下的一个类。

2023-02-26 00:47:08 1098

原创 【Java】如何根据 CPU 核心数设计线程池线程数量

CPU密集型任务主要消耗CPU资源进行计算,当任务为CPU密集型时,核心池线程数设置为CPU核数+1即可;一般来说池中总线程数是核心池线程数量两倍,只要确保当核心池有线程停止时,核心池外能有线程进入核心池即可。I/O密集型任务,核心池线程数量大小应在CPU核数两倍以上且不宜过多。所以说,将线程池的核心池线程数量配置为CPU核数的两倍是比较合适的。

2023-02-26 00:37:05 872

原创 【Java】Synchronized锁原理和优化

中文意思是同步,也称之为”同步锁的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。在JDK1.5之前是一个重量级锁,相对于j.u.c.Lock,它会显得那么笨重,随着对进行的各种优化后,并不会显得那么重了。原子性:确保线程互斥地访问同步代码;可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “ 对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行。

2023-02-25 22:01:54 3299

原创 【Java】CAS锁

CAS的全称为,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值。经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些类便是使用了这些封装后的接口。简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。

2023-02-25 19:32:27 1127

原创 【Java】ThreadLocal原理

每个线程都会有属于自己的本地内存,在堆(也就是上图的主内存)中的变量在被线程使用的时候会被复制一个副本线程的本地内存中,当线程修改了共享变量之后就会通过。​ 很明显,在多线程的场景下,当有多个线程对共享变量进行修改的时候,就会出现线程安全问题,即数据不一致问题。类,来修饰共享变量,使每个线程都单独拥有一份共享变量,这样就可以做到线程之间对于共享变量的隔离问题。实例中的,但实际上不是的,这种说法只是让我们更好的理解。生命周期长的线程可以理解为:线程池的核心线程。的线程一直持续运行如线程池中的线程,那么这个。

2023-02-24 22:21:13 919

原创 【Java】线程使用方式

实例负责对池中的线程进行管理和调度,并且可以有效控制最大并发线程数,提高系统资源的使用率,同时提供定时执行、定频执行、单线程、并发数控制等功能。实例在执行完成之后是不可复用的,实际工作中需要对已创建好的线程实例进行复用,需要用到线程池。执行目标实例在执行之后没有办法对其异步执行过程进行控制,只能任其执行,直到其执行结束。的异步执行过程进行控制,比如取消执行、获取结果等。提供的一个线程池接口,每次在异步执行。线程池实例去提交或者执行。执行目标实例或者无返回值的。执行目标实例和有返回值的。

2023-02-24 19:07:12 615

原创 【Java】volatile

变量发生修改之后,由于线程工作内存中的值在此前已经加载,从而不会对变更操作做出相应变化,即私有内存和公共内存中变量不同步,进而导致数据不一致。解决的是变量读时的可见性问题,但无法保证原子性,对于多线程修改共享变量的场景必须使用加锁同步。只是保证从主内存加载到线程工作内存的值是最新的,也就是数据加载时是最新的。为例,不具备原子性,该操作是先读取值,然后写回一个新值,相当于原来的值加上。的写内存语义是直接刷新到主内存中,读的内存语义是直接从主内存中读取。写时,不论第一个操作是什么,都不能重排序。

2023-02-24 03:36:40 281

原创 【Java】保证并发安全的三大特性

并发编程这三大特性就是为了在多个线程交替执行任务的过程中保证线程安全性。之所以会出现并发编程的三大特性,就是因为在提升程序性能的同时需要保证安全性,而原子性、可见性、有序性这三大特性可以认为是线程安全的等价概念,我们需要通过一些机制来保证这三大特性,也就是保证线程安全。原子性:一次或多次操作在执行期间不被其他线程影响可见性:当一个线程在工作内存修改了变量,其他线程能立刻知道有序性JVM对指令的优化会让指令执行顺序改变,有序性是禁止指令重排。

2023-02-24 01:39:30 983

原创 【Java】Java内存模型

​JMM是Java内存模型(),简称JMM。它本身只是一个抽象的概念,并不真实存在,它描述的是一种规则或规范,是和多线程相关的一组规范。通过这组规范,定义了程序中对各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。需要每个JVM的实现都要遵守这样的规范,有了JMM规范的保障,并发程序运行在不同的虚拟机上时,得到的程序结果才是安全可靠可信赖的。如果没有JMM内存模型来规范,就可能会出现,经过不同JVM翻译之后,运行的结果不相同也不正确的情况。​ 计算机在执行程序时,每条指令都是在CPU。

2023-02-22 21:59:26 655

原创 【Java】线程池七大参数

线程池中的基本线程数量线程池中会维护一个最小的线程数量,即使这些线程处理空闲状态,他们也不会被销毁,除非设置了。这里的最小线程数量即是。一个任务被提交到线程池以后,首先会找有没有空闲存活线程,如果有则直接将任务交给这个空闲线程来执行,如果没有则会缓存到工作队列(后面会介绍)中,如果工作队列满了,才会创建一个新线程,然后从工作队列的头部取出一个任务交由新线程来处理,而将刚提交的任务放入工作队列尾部。线程池不会无限制的去创建新线程,它会有一个最大线程数量的限制,这个数量即由指定。一个线程如果处于空闲状态,并且当

2023-02-21 04:36:44 2348

原创 【Java】线程的生命周期和状态

在源码中定义Thread State时就定义了现在的6种状态。线程的生命周期分为:(初始化状态)、(可运行状态/运行状态)、(阻塞状态)、(等待状态)、(有时限的等待)、(终止状态) 初始状态, 线程被构建,但是还没有调用方法 可运行状态, 可运行状态包括运行中状态()和就绪状态()运行中状态() 表示处于该状态的的线程正在运行, 即相应线程对象的方法所对应的指令正在由处理器执行 。当出现以下三种情况时就会变为就绪状态: 阻塞状态, 处于这个状态的线程需要等待其他线程释放锁或者等待进入官方给出了两点定义

2023-02-20 21:53:34 1416

原创 【Java】AQS锁

AQS:全称为,抽象的队列式同步器,是一个抽象类,是除了java自带的关键字之外的锁机制,这个类在包,可以用来构造锁和同步类,如Semaphore。AQS。

2023-02-20 01:55:17 913

原创 【Java】yield()和join()区别

1、yield的是静态方法也是native方法2、yield告诉正在执行的线程给线程池中有相同优先级的线程一个机会3、yield不能保证正在执行的线程立刻变成Runnable状态4、它仅仅可以使一个线程从running状态变成Runnable状态,而不是wait或者blocked状态。

2023-02-19 16:18:10 616

原创 【Java】sleep()和wait()的区别

- sleep()可以使线程睡眠一段时间。 - sleep()是Thread类的静态方法。 - sleep()是不释放锁的。 - sleep()常用于一定时间内暂停线程执行。 - sleep()方法睡眠指定时间之后,线程会自动苏醒。 - sleep()不需要一定在在同步方法或者同步代码块中执行。 - sleep() 方法不依赖于同步器 synchronized()。 - wait()都可以暂停线程的执行。 - wait()是Object类的方法。

2023-02-19 03:28:35 410

原创 【Java】中的各种锁

Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。在并发编程中,经常遇到多个线程访问同一个共享资源 ,这时候作为开发者必须考虑如何维护数据一致性,在`java`中`synchronized`关键字被常用于维护数据一致性。`synchronized`机制是给共享资源上锁,只有拿到锁的线程才可以访问共享资源,这样就可以强制使得对共享资源的访问都是顺序的,因为对于共享资源属性访问是必要也是必须的。

2023-02-19 00:27:55 1465

原创 【Java】object类常用方法

对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等。如果所有的线程都在此对象上等待,那么只会选择一个线程,选择是任意性的,并在对实现做出决定时发生。当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的。方法唤醒在此对象监视器上等待的所有线程,

2023-02-17 02:50:35 518

原创 【Java】lock和synchronized区别

因为阻塞线程需要CPU从用户态转到内核态,开销大,如果刚刚阻塞不久这个锁就被释放了,就得不偿失了,因此这个时候就干脆不阻塞这个线程,让它自旋这等待锁释放。由于是一个关键字,所以他无法实现非阻塞竞争锁的方法,一个线程获取锁之后,其他锁只能等待那个线程释放之后才能有获取锁的机会。它提供了更多的灵活性,比如可以尝试获取锁而不会阻塞线程、可以重试获取锁的次数以及可以提供公平锁和非公平锁。的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作。

2023-02-17 01:49:53 1296

原创 【Java】死锁

死锁指多个线程在执行过程中,因争夺资源造成的一种相互等待的僵局。进程死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。线程死锁是指由于两个或者两个以上的线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。

2023-02-17 01:02:16 1489

原创 【Java】线程上下文切换

现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。多线程执行是cpu抢占时间片的方式执行。多线程创建并切换到另一个线程的过程,称之为线程的上下文切换。线程切换,同一进程中的两个线程之间的切换进程切换,两个进程之间的切换模式切换,在给定线程中,用户模式和内核模式的切换地址空间切换,将虚拟内存切换到物理内存。

2023-02-16 23:46:19 432

空空如也

空空如也

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

TA关注的人

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