自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java内存模型与线程

1.主内存与工作内存Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值。此处的变量与Java编程中的所说的变量有所区别,它包含了实例字段,静态字段和构成数组对象的元素,单实不包括局部变量与方法参数,因为后者是线程私有的,不会被共享。Java内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存,线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的数据。不同线程之

2022-01-11 15:09:50 206

原创 Javac

Javac编译过程编译过程大致分为1个准备过程和3个处理过程,1)准备过程:初始化插入式注解处理器。2)解析与填充过程①词法,语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树。②填充符号表。产生符号地址和符号信息。3)插入式注解处理器的注解处理过程:4)分析与字节码生成过程:①标注检查。②数据流及控制流分析。③解语法糖。④字节码生成。类型擦除笔者理解:泛型的存在是为了规范编程人员对集合存储类型的统一,存在于代码阶段,在编译阶段中会将这种泛型类型擦除,变为裸类型。...

2022-01-11 12:39:07 435

原创 静态分派&动态分派

1.静态分派所有依赖静态类型来决定执行版本的分派动作称为静态分派。静态分派的最典型应用表现就是方法重载。静态分派发生在编译阶段,因此静态分派的动作实际上不是由虚拟机来执行的;2.动态分派父类使用多态调用子类重写方法时,会执行invokevirtual指令。该指令执行的第一步就是在运行期确定接收者的实际类型,所以该指令并不是把常量池中方法的符号引用解析到直接引用上就结束了,还会根据方法接收者的实际类型来选择方法版本,这个过程就是Java语言中方法重写的本质。*既然这种多态性的根源在于虚方法指令invo

2022-01-10 09:39:01 335

原创 虚拟机加载机制

1.类加载的过程一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载,验证,准备,解析,初始化,使用和卸载七个阶段;1.加载加载阶段是整个类加载过程中的一个阶段。在加载阶段虚拟机需要完成:①通过一个类的全限定名来获取定义此类的二进制字节流;②将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;③在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口;2.验证验证是连接阶段的第一步,这一阶段的目的是确保Clas

2022-01-09 10:35:20 242

原创 类文件结构

1.Class文件结构1.魔术与Class文件的版本1.魔术:每个Class文件的头4个字节称为魔术,其唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件;2.紧接着魔术的4个字节储存的是Class文件的版本号:第5和第6个字节是此版本号,第7和第8个字节是主版本号;3.紧接着是常量池入口,常量池主要存放字面量和符号引用;3.1.字面量:接近于Java语言层面的常量概念,如文本字符串,被声明为final的常量值等;3.2.符号引用主要包含:①被模块导出或者开放的包;②类和接口的全限定

2022-01-09 08:23:42 61

原创 ^运算的运用

//^运算:无进位相加,满足结合律与交换律//例:整型数组中,只有一个数出现了奇数次,其余数出现了偶数次,求这个数//例:整型数组中,只有两个数出现了偶数次,其余数出现了偶数次,求这两个数public class Test1 {public void one(int nums[]){ int r = 0; for (int num : nums) { r ^= num; } System.out.println(r);}public void

2022-01-07 21:00:43 402

原创 垃圾收集与内存分配

1.判断对象存活状态1.引用计数算法(在对象中添加一个计数器):难以解决循环引用的问题;2.可达性分析算法:通过一系列“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”,如果某个对象到GC Roots间没有任何引用链相连,则证明此对象是不可能在被使用的;3.finalize方法:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记,随后进行一次筛选,筛选的条件是此对象是否有必要执行finalize()

2022-01-07 16:59:50 541

原创 Java内存区域

1.运行时数据区包含:方法区,堆,本地方法栈,虚拟机栈,程序计数器1.程序计数器:程序控制流的指示器;2.Java虚拟机栈:与程序计数器一样,其是线程私有的,其生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表(Java虚拟机的基本数据类型),操作数栈,动态链接,方法出口等信息;每一个方法被调用直到执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程;3.Java堆:被所有线程共享的一块内存区域,在

2022-01-07 11:27:10 690

原创 Files类读写文件的基本使用

1.传统的输入/输出流或读入器/写入器操作文件读写:输入/输出流// InputStream in = new FileInputStream(new File("D://test.txt"));// byte[] bytes = new byte[1024];// BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new Fil

2021-08-22 16:22:22 864

原创 redis基本事务操作

文章目录1.redis事务基本操作2.取消事务3.异常1.编译型异常2.运行时异常1.redis事务基本操作127.0.0.1:6379> multi //开启事务OK127.0.0.1:6379(TX)> set k1 v1 //命令入队QUEUED127.0.0.1:6379(TX)> set k2 v2 //命令入队QUEUED127.0.0.1:6379(TX)> exec //提交事务2.取消事务127.0.0.1:6379> multi

2021-08-08 18:08:16 67

原创 Java中的方法参数如何接收调用者的值

1.前言在程序语言中,方法参数中接收调用者的值的方式一共有三种,即按值调用:表示方法接收的是调用者提供的值;按引用调用:表示接收方法接收的是调用者提供的地址;按名调用(过时)。2.Java中是如何接收调用者的值1.对于基本数据类型假定一个方法试图将一个参数增加至3倍:不过这样并不能起到作用,调用这个方法之后i的值还是3,即一个方法不能修改基本数据类型。2.对于引用类型编写一个方法交换两个Employee对象的方法public static void swap(Employee x,Em

2021-07-15 10:03:36 747

原创 如何让控制台项目略显高级(Console类的使用)

文章目录1.前言2.源代码3.注意4.运行结果1.前言通常我们使用Scanner类来接收用户的输入,但在使用控制台交互类型的软件,在接收用户输入信息时(特别是接收用户登录信息时),我们无法通过Scanner类对用户部分信息进行加密,因此引入Console类。2.源代码import java.io.Console;public class Test { public static void main(String[] args) { Console console =

2021-07-07 23:06:54 97

原创 格式字符串之参数索引

1.前言试想一下,Java中,同时打印多个参数时,如何对每个参数进行相应的格式化操作。2.String.format方法如下代码:String message = String.format("Hello, %s. Next year,you will be %d",name,age);但如果参数一旦很多或者某个参数格式化相符繁杂,使用这种方法很容易出现错位,即格式化与对应参数出错的情况,这里需要引入另一种方法3.参数索引如下代码String message = String.form

2021-07-07 23:06:28 494

原创 iconfont的使用

文章目录1.前言2.下载图标1.搜索想要的图标2.添加入库3.下载代码4.解压并添加文件到项目中5.修改配置文件3.引用(通过图标的unicode编码进行引用)1.查看Unicode编码2.添加类配置图标1.前言iconfont链接:https://www.iconfont.cn/?spm=a313x.7781069.1998910419.d4d0a486a2.下载图标1.搜索想要的图标2.添加入库3.下载代码4.解压并添加文件到项目中在项目中创建目录并添加该文件5.修改配置

2021-06-29 12:06:56 368

原创 spring高级应用

1.实验目的1、掌握spring的注解使用 2、深入理解注解的实现过程 3、掌握事务管理的配置以及切面的注解配置2.实验内容1、通过对@Compoent注解的解读深入理解各个层注解的使用;2、通过@Before、@After的方式实现切面的通知3.实验过程1.理解@Compoent在各层的使用并创建分层结构2.编写配置文件开启注解aop功能3.编写切入点以及切面方法4.详细步骤理解@Compoent并创建分层结构编写配置文件开启注解aop功能配置切入点及切面方法5.

2021-06-15 11:04:27 411 1

原创 Android多媒体之音频播放

文章目录1.前言2.前期准备1.在/storage/emulate/0目录下创建Music目录用于存放音频文件2.添加音频文件到Music中3.前台页面1.编写播放列表2.播放页面4.后台逻辑1.创建实体类2.编写适配器3.播放列表4.音频操作1.前言在Android中播放音频文件一般使用MediaPlayer类实现。通过调用其方法可实现对本地音频文件的操作。2.前期准备1.在/storage/emulate/0目录下创建Music目录用于存放音频文件2.添加音频文件到Music中3.前

2021-06-08 18:59:11 319 2

原创 Android使用HttpURLConnection,OKHttp发送请求及注意事项

文章目录1.HttpURLConnection的使用1.编写测试代码1. 使用ScrollView组件接收网站返回数据2.编写活动2.测试结果(注意)2.OKTttp的使用1.HttpURLConnection的使用1.编写测试代码1. 使用ScrollView组件接收网站返回数据<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res

2021-06-02 10:20:37 1430 6

原创 搭建tomcat服务器,分别通过HttpURLConnection和OkHttp的方式进行网络访问

文章目录1.实验目的2.实验内容3.实验过程4.详细实验步骤5.实验结果6.疑难小结1.实验目的1、了解手机移动端如何和服务器端进行网络交互 2、学习WebView控件 3、掌握原生HttpURLConnection使用以及轻量的网络请求框架OkHttp使用 4、掌握不同格式的数据解析2.实验内容搭建tomcat服务器,分别通过HttpURLConnection和OkHttp的方式进行网络访问,获取服务器上的不同格式数据文件,并将这些格式文件的数据提取出来3.实验过程利用本地tomca

2021-06-01 20:14:21 519

原创 mybatis的一级缓存

文章目录1.前言2.源码分析1.创建测试代码2.如何创建缓存3.如何命中缓存4.结果分析1.前言先上代码:SqlSession sqlSession = sqlSessionFactory.openSession(); BookMapper mapper = sqlSession.getMapper(BookMapper.class); Book book1 = mapper.findById(1); Book book2 = mapper.findBy

2021-05-30 08:58:42 476

原创 递归-迷宫问题

文章目录1.利用二维数组模拟迷宫2.设置“墙”3.根据设置策略执行4.遍历输出5.运行结果1.利用二维数组模拟迷宫 //利用二维数组创建一个地图 int[][] map = new int[7][7];2.设置“墙”//给地图设置墙,默认1表示墙 public static void setWall(int[][] map) { //第一行和第八行置为1,第一列和第七列置为1 for (int i = 0; i < 7; i++) {

2021-05-25 23:35:15 70

原创 something about MyBatis

文章目录1.入门1.基于xml构建SqlSessionFactory1.编写配置文件2.编写映射文件3.创建SqlSessionFactory4.测试1.入门1.基于xml构建SqlSessionFactory1.编写配置文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis

2021-05-25 16:35:13 73 1

原创 JdbcTemplate这个模板类的巧妙

文章目录1.前言2.我的理解1.完成数据库的连接2.书写JdbcTemplate类,完成对操作方法的封装(例子中只书写了部分的方法)3.看看源码1.首先将其注册到ioc容器中2.部分JdbcTemplate封装的方法3.当然了,源码自然有高深之处1.前言之前学习spring时,对其中的JdbcTemplate没有进行太多研究,对数据库的操作基本都是通过MyBatis完成的,最近有碰到了这个“熟悉的陌生人”,那么就彻底熟悉熟悉吧。2.我的理解1.完成数据库的连接public class Jdbc

2021-05-20 23:12:51 91 1

原创 java 常用io流操作

前言所谓温故而知新,最近学习一些新技能时需要用到我许久都未触碰的io流操作,借此机会,回顾一些基本的io流操作。实例1.fileInputStream&fileOutputStreampublic static void main(String[] args) throws Exception{ File file = new File("D:/test.txt"); write(file); String res = read(file)

2021-05-18 21:52:29 65 1

原创 又见消息队列

前言:system v提供的ipc(inter-process communication)机制主要有消息队列,信号量,共享内存。使用:一个ipc工具至少包含key值,ID等属性值;使用ipc工具前必须先创建;使用ftok函数创建key值使用msgget函数创建消息队列使用msgctl函数对属性值进行操作使用msgrcv函数接收队列中的消息使用msgsnd函数发送信息到队列实例:这里用一个实验题作为实例:编写一段程序,使其用消息缓冲队列来实现父进程和子进程之间的通信。父进

2021-05-14 23:32:39 97 1

原创 稀疏数组与二维数组的转换

二维数组转稀疏数组1.遍历二维数组得到有效数据的个数2.根据有效数据的个数创建稀疏数组3.将二维数组的有效数据存入到稀疏数组稀疏数组转二维数组1.读取第一行,创建二维数组2.继续读取数据赋值给二维数组...

2021-05-12 23:04:34 55 1

原创 匿名用户实现向ftp服务器上传文件

上传文件匿名用户登录ftp服务器默认权限为:默认可下载不可上传,且上传权限由两部分组成,即主配置文件和文件系统。所以要想完成上传操作,修改配置文件即可。1.修改主配置文件打开/etc/vsftpd.conf配置文件,修改如下:2.修改文件权限要想上传文件到服务器,需要将服务器接收上传文件的目录对其他人添加写权限,即chmod o+w (服务器接收上传文件的目录)通过上述修改后完成了文件的上传:关于上传的文件无法下载的问题:由报错信息可知,无法打开该文件,即对该文件没有读权限。修改主配置

2021-04-22 15:37:02 1766

原创 初识序列化

什么是序列化?序列化在Java中实际上是对对象的操作,将对象转换为字节流。序列化的作用?既然对象变为了字节文件,那么此时被序列化的对象即可以存储到磁盘文件,也可以在网络中进行传输啦。注意事项静态字段不会参与序列化!因为序列化要保存的是对象的状态,而静态变量则是属于类的状态。参与序列化的对象对应的实体类必须要实现Serializable接口,否则会报如下错误transient关键字被transient关键字修饰的字段不会参与序列化。具体操作初识序列化,只需通过io流简单操作一下即可,

2021-04-13 22:40:32 60

原创 mybatis报错:Invalid bound statement (not found)

解决方法:修改配置文件原来yml文件中的映射文件修改后的映射文件*总结:如果Mapper.xml与Mapper.class在同一个包下且同名,spring扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。...

2021-04-11 10:23:06 59

原创 redis三种特殊数据类型

redis三种特殊数据类型Geospatial:redis提供的对地理位置操作的命令geoadd key longitude(经度) latitude(纬度) 名称 #创建一个地理位置geodist key name1 name2 #计算已保存的两个地理位置之间的距离,默认单位是m,可在最后一个参数设置单位,可选值有[m,km,ft…]georadius key longitude(经度) latitude(纬度) radius 单位 #根据当前的地理位置,以半径radius的值查找在此r

2021-04-04 11:30:16 66

空空如也

空空如也

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

TA关注的人

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