java
文章平均质量分 80
weixin_46008168
这个作者很懒,什么都没留下…
展开
-
clone相关
1.学习目标1.能够理解clone方法的由来2.能够使用clone方法创建对象3.能够理解克隆对象和原对象的关系4.能够理解clone方法创建对象与反射和new关键字创建对象的不同5.能够理解浅复制和深复制的含义6.能够探寻对象的复制必须实现Cloneable接口的底层源码1.1 克隆方法的由来问题1:什么是clone方法创建并返回此对象的一个副本 – 按照原对象,创建一个新对象(复制原对象的内容)问题2:已经存在new 关键字和反射技术都可以创建对象,为什么还有一个Object的clo原创 2021-05-19 19:48:39 · 126 阅读 · 2 评论 -
Runnable实现参数传递
大家都知道Runnable()是无法传参数的,但是,有时候,我们提交任务的时候,是需要传递参数的,所以,为了解决这个问题,有以下的方法;这是,一个参数传递的设置接口,里面有一个设置参数的方法public interface MyRunnable extends Runnable { public MyRunnable setParam(String param);} public static void main(String[] args) { MyRunnabl原创 2021-03-08 15:37:40 · 4566 阅读 · 0 评论 -
Spring
Spring观察者模式 :在spring容器中,有一系列的监听器,用来完成:在不同的阶段做不同的处理工作;Spring 的整体架构图:IOC 和 AOC联系IOC底层实现的机制是通过反射的方式来实现;AOC底层实现是通过动态代理;IOC 控制反转,里面有一个容器;放我们的对象Bean;这个Bean是放在Map里面的;这个Bean 就是通过反射来创建的;我们可以模拟@Autowired这个注解public class UserController { private UserServic原创 2021-01-26 16:13:42 · 120 阅读 · 0 评论 -
String有关拼接问题
我们都知道如果是在很多String拼接的时候,选择StringBiluder 效率会更高;那么,原因是什么呢?其执行如下:final char c1[] = {'h','e','l','l','o'};final char c2[] = {'w','o','r','l','d'};final char c3[] = new char[10];c3[] = {'h','e','l','l','o','w','o','r','l','d'};所以,String 在运算时,会创建一个大小合适的c原创 2021-01-10 16:32:53 · 183 阅读 · 0 评论 -
AOP理解
面向切面编程AOPAOP 编程 把业务功能分为核心、非核心两部分;核心业务比如说订单系统啊,会员系统啊;非核心业务比如说日志模块,过滤模块;在常见的编程开发中,核心系统,比如说:订单系统,它需要自己的日志模块;而会员系统也需要自己的日志模块;而我们的AOP编程就是将非核心业务功能定义为切面,核心业务和非核心业务被分别进行独立开发,然后把切面功能和核心业务“编织”在一起。AOP就是将那些于业务无关,却为业务模块所共同调用的逻辑封装起来,以便减少系统的重复代码,降低系统的耦合度,利于未来的扩展和维护。原创 2020-12-15 09:00:47 · 99 阅读 · 0 评论 -
Java中位操作,以及在日常编码中的使用
机器中是如何存储的背景:在计算机中,有原码、反码、补码三种形式,首先先介绍一下原码:所谓的原码:表达简单明了,是人类最容易理解的表示法;但是,原码有一个很大的弊端,使用原码进行计算的时候非常复杂,特别是两个操作数符号不一样的时候。步骤如下:1.判断两个数绝对值的大小 2.使用绝对值大的数减去绝对值小的数 3.对于符号数,以绝对值大的为准。所以,需要一种使用加法来替代减法的操作,从而消除减法。为了解决这个问题补码出现了;在计算机中,存储数据是使用补码来进行存储的。那么 : 原码 反码 补码 之间的原创 2020-12-14 21:15:33 · 111 阅读 · 0 评论 -
jvm 类加载和类加载器
概述:一个类从被加载JVM开始,到卸载出内存,整个生命周期如图加载:查找并加载类文件的二进制数据所谓直接引用,就是将类直接引用到他们依赖的,或者想要引用的目标。类加载要完成的功能一般,我们做的程序是由应用程序类加载器来加载的。加载一些基础的核心的基础模块类。这个为null就说明它的加载器是启动类加载器。 启动类加载器为null这里在java8中没有,不测试了上面演示的是启动类的加载器。这个时候,就可以看到,在java8中,AppClassLoader的父类是Ext.原创 2020-10-27 20:12:42 · 394 阅读 · 0 评论 -
Future和Callable --治理线程第二大法宝
Runnable的缺陷有两大缺陷;1.不能返回一个返回值,返回值为void2.也不能抛出checked Exception在run()方法中,无法抛出异常,只能使用try catch 来处理异常;下面的那个对比方法是可以抛出异常的;为什么又这样的缺陷?因为它设计的时候,方法返回值为void 而且也设计成无法抛出异常;Runnable 为什么设计成这样?如果抛出异常后,就给Thread 这时候没办法处理;所以,就设计成为直接在Runnable中进行处理;针对于无法抛出检查后异常这..原创 2020-10-21 16:22:49 · 93 阅读 · 0 评论 -
AQS 并发灵活人物
为什么需要AQS理解相似点:比如说,锁只能允许一个线程,而Semaphore,只允许一定量的线程。比如说:他们还可以去看一看目前是不是陷入等待,tryLock() tryQuire()方法,还有在一定时间内尝试获取。代码演示:可以看到他有一个Sync内部类。进入这个内部类,可以看到它继承了AQS(这是类的缩写)结论:在Semaphore中,有一个Sync内部类,这个内部类是继承了AQS其实CountDownLatch也是这样的;其实,在ReentrantLock()中,其实也...原创 2020-10-21 12:54:02 · 77 阅读 · 0 评论 -
线程协作、控制并发流程
控制线程什么是控制并发流程:如果不控制的情况下,那么并发的各个流程他会尽可能的跑。同时,它会收到并发控制器的控制,不受我们程序员的控制。有的时候,我们要求一些任务,它先执行,一些任务必须等我前一些任务执行完毕之后,再执行。这时候,我们必须控制它。所以:CountDownLatch类:分析如下:Ta调用await()来进行等待,它要等待3,这时候,线程1,它会调用countDown()给他减一。然后,线程1继续执行。等countDown()调用三次以后。Ta线程就被唤醒了。代码如下:...原创 2020-10-16 13:52:27 · 93 阅读 · 0 评论 -
并发队列
并发队列Queue:阻塞队列队列:底层由链表实现;BlockingQueue:阻塞队列,当要取一个数据时,如果队列中没有,就会一直等待。当要存一个数据时,如果数据满了,也会一直等待,直到队列有空出来为止。方法介绍:put,往队列中添加一个数,如果队列已经满了,就堵塞住;take 在队列中拿出一个数,如果队列是空的,就堵塞住;add 往队列中添加一个数,如果队列已经满了,会抛出异常remove 往队列中移除一个数,如果队列空了,会抛出异常element 查看队列中第一个数原创 2020-10-14 10:14:49 · 110 阅读 · 0 评论 -
CopyOnWriteArrayList
CopyOnWriteArrayListCopyOnWriteArrayList诞生记适用场景CopyOnWriteArrayList:就是不能一起写,可以一边读一边写,也可以一边写一边读。从这个方面来说,比读写锁强,读写锁是可以多读一写。代码演示package copyonwrite;import java.util.ArrayList;import java.util.Iterator;/** * 描述: 演示CopyOnWriteArrayList可以在迭代过程中修改原创 2020-10-13 20:57:11 · 213 阅读 · 0 评论 -
ConcurrentHashMap等并发集合
##并发容器精讲并发容器概览集合类的历史进入查看它的方法:发现了synchronized的同步方法,然后,会发现他的很多方法都是synchronized修饰的由于有多个同步方法,而同步方法是不能由多个线程同时执行的,所以说,他的性能不会很安全。下面经常查看Hashtable,发现情况是一样的。所以,Hashtable效率不是很高。升级版代码演示:package collections.predecessor;import java.util.ArrayLis原创 2020-10-13 16:20:05 · 175 阅读 · 0 评论 -
并发学习--final
因为别人只能进行读取,却不能进行更改。类用final反正被继承,方法用final防止被重写,变量用final防止被修改。例子如下:final修饰变量代码演示如下:package immutable;public class FinalVariableDemo { // 如果不赋值直接报错 private final int a = 6; private final int b; private final int c; /...原创 2020-10-11 14:18:35 · 61 阅读 · 0 评论 -
CAS原理
CAS原理面试中常客很多原子类的底层原理,也是乐观锁的底层原理。比如说,面试官问你知道什么锁,你说乐观锁,问乐观锁的原理是什么:你说CAS原理,他让你在介绍一下CAS原理CAS是一种用于并发的算法比如说CPU1想把内存中的值从56改成57;cpu1去查发现是56。于是,就改成了57。当CPU2想把内存中的值从55改成56,他去查了,发现里面数据是57,那么他就不能改了。他可能会重试或者报错,但是,肯定是不会进行更改的。CAS的原子性是由CPU进行保证的。下面对CPU的原子性进行模拟原创 2020-10-10 16:43:29 · 59 阅读 · 0 评论 -
原子类
原子类注意:就第三个方法来说,如果是写a++ 那么其实它是分成三个部分的。a先赋值,a加1,a再重新赋值。原子类线程安全代码如下;package atomic;import java.util.concurrent.atomic.AtomicInteger;/** * 演示AtomicInteger的基本用法,对比非原子类的线程安全问题 * 使用了原子类之后,不需要加锁,也可以保证线程安全。 */public class AtomicIntegerDemo1 impl原创 2020-10-10 15:17:01 · 73 阅读 · 0 评论 -
并发学习--锁
章节情况:第一部分为什么需要lock第一点:就是说synchronized 它只有在执行完代码,或者里面抛出异常的时候,才会进行释放锁。第二点:不够灵活,加锁和释放锁的时机单一第三点:不知道能不能获取到锁lock的优点lock():方法要是陷入了死锁,就会一直进行等待。所以,也非常的不好。为了解决这个问题,出现了tryLock()这个方法下面先介绍tryLock的兄弟方法如果一定时间内,可以得到锁就成功,不能得到就放弃。用了tryLock这个方法可以避免死锁的问题.原创 2020-10-08 18:50:05 · 64 阅读 · 0 评论 -
并发学习--线程池
并发学习并发工具类 - 分类第一类:为了并发安全第二类:管理线程 提高效率第三类:线程协助线程池的重要性什么是池 ? 可以理解为计划经济 比如说我们的资源总量是有限的,就我电脑来说,我电脑有16个线程。所以,我就可以创建16个线程的线程池,我的任务可能很多,就依靠这16个线程来慢慢执行。然后,也不用创建的多,因为创建线程有多开销的。所以:好处主要是有两个;第一个:可以复用我们的每一个资源第二个:可以控制我们资源的总量如果不用线程池,一个任务一个对应一个线程,那么1000个任务就需要创建1原创 2020-10-02 16:03:38 · 98 阅读 · 0 评论 -
String相关学习情况
##String首先,String 重写了hashCode 和 equals 方法。注意:== 和 hashCode 还是有区别的,==:它代表的是完全相同。equals:它更多代表的“值相等”。当然如果没有重写equals方法的话,那么equals就是以==来进行判断的。下面以String 为例子来分析以下的各种情况:public class StringTest { public static void main(String[] args) { //编译期就可以确原创 2020-09-23 21:41:40 · 140 阅读 · 0 评论 -
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer错误分析
Exception in thread “main” java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationContextInitializer : org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializerat org.springframewo原创 2020-09-22 14:05:51 · 2211 阅读 · 0 评论 -
动态规划上
动态规划首先,动态规划问题一般形式就是求最值。比如说求最大递增子序列,最小编辑距离核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。但是,动态规划的穷举问题有点特别,这类问题存在重叠子问题,如果暴力穷举的话效率非常低,需要备忘录来优化穷举过程,避免不必要的重复。穷举所有的可行解需要列出正确的状态转移方程,才能正确的穷举,这个是最困难的一步。思维框架明确 基本情况 -> 明确状态 -> 明确选择 -> 定义dp数组/函数的含义注意:用递归的时候原创 2020-09-15 16:19:55 · 137 阅读 · 0 评论 -
类加载机制与反射
反射通过反射查看类信息Java程序中的许多对象在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person p = new Student(); 该变量的编译时类型为Person,运行时类型为Student;除此之外,还有更加极端的情形,程序在运行时接受到一个外部传来的一个对象,该对象在编译时类型时Object,但是程序又需要调用该对象运行时的类型的方法。为了解决这一问题,程序需要在运行时发现对象和类的真实信息。解决该问题有以下两种方法:1.第一种做法是假设在编译时和运行时都完全知道对象和类原创 2020-08-26 18:41:34 · 91 阅读 · 0 评论 -
idea最简单的DevToos热部署教程
第一步:在pom中加入 <!-- 集成DevTools--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>第二步:在settings中设置第原创 2020-08-13 14:11:15 · 76 阅读 · 0 评论 -
关于前后端传递对象的相关问题
将后端对象传送给前端前端页面test2.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><script src="js/jquery-3.3.1.min.js"></script><body><button oncl原创 2020-08-05 19:53:04 · 655 阅读 · 0 评论 -
配置文件的读取,以及Lombok的使用
背景意义:1.有时候我我们要改变不同的值,有时候,写在java代码里面,还不如写在配置文件里,这样就不需要进行更改java代码了。2.有时候我们的项目需要进行服务器部署,同时,一般在服务器部署之前需要先进行本地测试。但是,在本地测试的过程中,mysql的数据库密码啊,redis的密码是不一样的,如果我们进行直接更改的话,效率很慢,但是,我们可以设置两个配置文件,但在本地跑的时候,用本地的配置文件,当在云上跑的时候,用云上的。配置文件内容读取首先,在配置文件上写上,我们的配置内容。这时候,就可以把原创 2020-08-05 14:31:18 · 814 阅读 · 0 评论 -
git学习
git版本管理linux开发者为了维护git版本而开发的,后来就产生了windows版本了。Git是分布式版本控制器系统,它没有中央服务器,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了。因为版本都是在自己的电脑上。既然每个人电脑都是一个完整的版本库,那么多个人如何协作呢?比如说自己电脑上改了文件A 其他人电脑上改了文件A ,这时,你们两之间只需把各自的修改推送给对方,就可以相互看对方的修改了。git工作流程一般工作流程如下:1.从远程仓库中克隆Git资源作为本地仓库2.从本原创 2020-07-27 10:57:12 · 111 阅读 · 0 评论 -
正则表达式
正则表达式正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换操作。常用的方法有:boolean matches(String regex):判断该字符串是否匹配指定的正则表达式;String replaceAll(String regex, String replacement): 将该字符串中所有匹配regex的子串替换成 replacement.String replaceFirst(String regex, String replacement):将字符串中第一原创 2020-07-27 08:11:59 · 85 阅读 · 0 评论 -
操作集合的工具类:Collections
Collections:1.可以操作Set、List、Map2.该工具类提供了大量的方法对集合进行排序、查询、和修改等操作。还提供了将集合对象设置为不可变、对集合对象实现同步控制等方法。3.这是一个工具类排序操作目标对象:List测试代码:package Collections;import java.util.ArrayList;import java.util.Collections;public class SortTest { public static void m原创 2020-07-23 21:05:48 · 84 阅读 · 0 评论 -
Map学习 java
MapMap用于保存具有映射关系的数据,因此Map集合中保存着两组值。一组保存Map里的key,另外一组保存Map里的value,key和value都是可以任何引用类型的数据。Map中的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总能返回false。key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的,确定的value。从map中取出数据时,只要给出指定的key就可以取出对应的value。如果把map里面的两组值拆开来看,map里所有的key放在一起原创 2020-07-22 21:36:01 · 104 阅读 · 0 评论 -
guns-vip v3.4版本快速开发--之搜索框实现
guns-vip版本v3.4还是比较新的版本,他提供了自动生成代码,能够解决我们开发过程中很大的重复性的工作。但是,在开发过程中会需要进行条件搜索。故我在这里进行条件搜索的练习。首先,这里已经代码自动生成完毕了。结果如下:现在对该表进行搜索学习;1.首先先对页面显示一个搜索框打开页面加入下面代码: <div class="layui-inline"> <input id="cond原创 2020-07-13 12:15:58 · 790 阅读 · 0 评论 -
Mqtt开发java开发-消息服务mns中的一些坑
mqtt首先创建一个设备,然后自定义topic,为什么要自定义topic。因为,这样的好处就是不要按json格式书写。然后我找到了阿里云联网平台在服务端订阅中,我发现有MNS服务端订阅,和AMQP服务端订阅,看了一下我选择了比较简单的MNS服务端订阅;照着教程做啊做啊,我发现一个问题,下位机的数据是可以发上来的,但是数据乱码了,由于,刚刚开始我下位机发送上来的数据是json数据,所以乱码的数据特别长,所以,刚刚开始的时候一直找不到原因,后来通过找代码发现了一些问题;如上文所示,他是将mes原创 2020-07-11 13:31:54 · 664 阅读 · 0 评论 -
mybites PageHelper学习
PageHelperpagehelper是实现后端分页的一个工具,本文将通过spring boot 对PageHelper进行一个简单的入门建表简单的建一张表用于测试即可:新建springboot项目新建项目并且引入mybatis和mysql和pagehelper依赖com.github.pagehelperpagehelper4.1.6org.projectlomboklomboktrueorg.mybatis.spring.bootmybatis-spring-bo原创 2020-07-11 11:42:18 · 96 阅读 · 0 评论 -
Queue 集合学习 java
QueueQueue接口用来模拟队列这种数据结构。Queue接口中定义了如下几个方法:add :将指定元素加入此队列的尾部element: 获取队列头部元素但是不删除offer:将指定的元素加入到此队列尾部,当使用容量有限的队列时,此方法通常比add好peek:获取队列头部的元素,但是不删除poll:获取队列头部的元素,并删除该元素’remove:获取队列头部的元素,并删除该元素PriorityQueue实现类PriorityQueue:保存队列元素的顺序并不是按加入队列的顺序,而是按照原创 2020-07-10 21:03:34 · 79 阅读 · 0 评论 -
java List学习
Listlist:代表有序、可重复的集合。集合中每个元素都有其对应的顺序索引。list是collection接口的子接口。可以使用collection中的全部方法。还增加了一些根据索引来操作集合元素的方法。下面示范List集合的常规用法:package List;import java.util.ArrayList;public class ListTest { public static void main(String[] args) { ArrayList boo原创 2020-07-10 11:22:08 · 79 阅读 · 0 评论 -
idea中maven无法导入问题
idea有无maven判断如上图所示:这代表的是有maven的。如果没有dependencies则代表没有maven。如果右侧没有maven,如何进行打开点击shift + ctrl + A然后,输入maven点击这个把你的pom文件进行加入这样就会有maven了。如果maven一直无法导入还可能是maven设置错误了我这里这三个是配套的,所以就一直用他三个就可以了,如果你的maven里面写的xml不对应,那么可能就会报错。我经常新项目的更改设置这样以后新项目就用这个了。原创 2020-07-09 15:29:50 · 1366 阅读 · 0 评论 -
Maven学习
MavenMaven:在美国是一个口语化的词语,代表专家Maven:是一个项目管理工具。Maven的作用:第一:导入jar包,而且他能够解决jar冲突,jar冲突手动解决是很困难的。第二:maven可以让java编译成二进制字节码文件第三:可以帮助我们快速打包第四:maven可以帮我们一键构建maven依赖管理用maven项目的话所占的磁盘空间小;传统的工程是把jar放到项目中,而用maven开发的项目是把jar放在了jar仓库中(在idea中可以进行设置)这样如果是只有一个项目的话,并原创 2020-07-08 21:30:37 · 71 阅读 · 0 评论 -
java -- set各集合学习小结
HashSet首先HashSet是在Set中使用得最多的。特点不能保证元素的排列顺序HashSet不是同步的,多线程同时进行修改的话,需要通过代码保证其同步集合元素可以为null判断两个元素相同的条件当两个对象equals() 和 hashCode() 这两个方法返回值相等时,这代表这两个对象相等。相应代码如下:package HashSet;import java.util.HashSet;class A{ public boolean equals(Object ob原创 2020-07-08 20:16:21 · 68 阅读 · 0 评论 -
Redis
Redisredis学习内容概念下载安装命令操作数据结构持久化操作使用Java客户端操作redis概念: redis是一款高性能的NOSQL系列的非关系型数据库关系型数据库:不同表中数据相互之间有关系:如下,关系是多对一的关系1.数据之间有关联关系2.数据存储在硬盘的文件上非关系型数据库1.数据之间没有关联关系2.数据存储在内存中在现在的生活中,高速互联网环境下,追求速度快不快,数据量非常大,如果按照传统的客户端;先是客户端访问服务器,服务器访问数据库,数据库把原创 2020-07-08 16:37:57 · 92 阅读 · 0 评论 -
JQuery基础学习学习
JQueryJQuery:JavaScript框架,本质上就是一些js文件,封装了js的原生代码而已。首先,学习一个东西需要了解到他的作用和目的。学习JQuery的作用是为了简化javascript代码的书写,就是写JavaScript代码量更加少了,这就是他的目的。那么他的实现原理是什么呢?他就是把我们可能用到的函数给写好,然后放到一个js文件中。当我们想使用的时候,就把该文件进行引入。然后,就可以在html文件中调用JQuery里面定义的函数了。2.快速入门1.步骤:1.下载JQuery版本原创 2020-06-30 13:27:10 · 100 阅读 · 0 评论 -
Filter&Listener学习
Filter:过滤器web中的过滤器:当访问服务器资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。过滤器的作用:一般用于完成通用的操作。如:登录验证、统一编码处理、(在servlet上需要进行统一编码,在过滤器上使用,会简化编码)、敏感字符过滤(比如打游戏的时候,你骂人了,则可以把骂人的话改成xxx)快速入门1.步骤:1.定义一个类,实现接口Filter2.复写方法3.配置拦截路径4.放行注意:导入的时候,一定要实现servlet下面的这个。重写里面的方法,在doFilter写原创 2020-06-29 19:21:31 · 128 阅读 · 0 评论