
Java
star9595
只有回不了的过去,没有到不了的明天
展开
-
Post以及Get请求接口参数接收
1. Get方式:通过 @RequestParam()接收;Post方式:通过 @RequestBody Map param 接收,Map类型也可以改为类对象类型;同时使用@RequestParam() 以及 @RequestBody 此种情况,接口为POST方式;原创 2021-07-01 10:14:57 · 971 阅读 · 0 评论 -
java邮件收发功能总结
1. 可以参考GitHub示例,拥有完善的功能;2.参考博客1:博客13.参考博客2:博客2原创 2020-12-12 21:36:55 · 232 阅读 · 0 评论 -
JDK,JRE,JVM三者的区别
JDK,JRE,JVM三者的区别jdk里面的jre与jdk外面的jre区别:相同点:这两个JRE都可以作为开发Java程序的运行环境。不同点:JDK里面的JRE是JDK自带的为其开发工具提供运行环境的JRE,JDK自带的开发工具只能使用JDK自己目录下的JRE,不能使用JDK外面的JRE,JDK外面JRE用于为Java程序提供运行环境。可以参考如下链接:JDK,JRE,JVM三者的区别...原创 2020-12-06 16:26:19 · 521 阅读 · 0 评论 -
多线程notify与wait
使用wait和notify方法实现线程之间的通信,注意,这两个方法是Object类的方法,也就是说Java为所有的对象都提供的这两个方法。1 wait和notify必须配合synchronized关键字使用。2 wait方法释放锁,notify方法不释放锁。3 涉及到线程之间的通信,就肯定会用到 volatile 修饰。import java.util.ArrayList;import java.util.List;/** * @Auther: 13213 * @Date: 2020/原创 2020-11-16 11:08:11 · 348 阅读 · 0 评论 -
观察者模式总结
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。ConcreteSubject:具体主题(具体被观察者),该角色将有关转载 2020-11-16 09:52:03 · 304 阅读 · 0 评论 -
对list中的map进行key去重值合并去重
public static void main(String[] args) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("id", 1); .原创 2020-07-19 17:49:04 · 1381 阅读 · 1 评论 -
Array、List、Set基本操作
1.数组排序与输出demo1:public class Test1 { public static void main(String[] args) {// List list = arr2list();// Set set = arr2set();// System.out.println(list);// System.out.println(set);// List list = set2list();.原创 2020-07-19 16:40:07 · 479 阅读 · 0 评论 -
深入理解jvm
1.JVM体系结构类装载器ClassLoader:用来装载.class文件执行引擎:执行字节码,或者执行本地方法运行时数据区:方法区、堆、Java栈、程序计数器、本地方法栈1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成;如果线程正在执行...原创 2020-05-04 15:19:41 · 192 阅读 · 0 评论 -
java堆内存和栈内存分析
1. 区别:堆和栈区别堆:主要用于储存实例化的对象,数组。由JVM动态分配内存空间。一个JVM只有一个堆内存,线程是可以共享数据的。栈:主要用于储存局部变量和对象的引用变量,每个线程都会有一个独立的栈空间,所以线程之间是不共享数据的。2. 堆内存和栈内存区别堆内存:储存的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里原创 2020-05-28 13:41:31 · 312 阅读 · 0 评论 -
重写equals()时需要同时重写hashcode()
示例代码:1.没有重写equalspackage com.compareObject;/** * @Auther: 13213 * @Date: 2020/5/26 14:22 * @Description: */public class Dog { private int age; private String name; public Dog(int age,String name){ this.age=age; this.原创 2020-05-26 14:55:25 · 242 阅读 · 0 评论 -
分布式应用中的分布式锁
分布式应用中的分布式锁如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁,分布式锁就是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。分布式锁的要求:1. 互斥性–在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;2. 高性能的获取锁与释放锁;3. 具备可重入特性–当一个客户端获取锁之后,这个客户端可以再次获取锁;一般有三种实原创 2020-05-26 09:28:39 · 181 阅读 · 0 评论 -
@PostConstruct作用
1.作用:@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。2. 执行顺序:其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么.原创 2020-05-25 17:34:05 · 4063 阅读 · 0 评论 -
Java基本数据类型
bit (位):位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为0或1。byte (字节):字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据或者一个英文字母,但是一个汉字需要两个字节表示。1B=8bit1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1GB=1024MB1TB=1024GB...原创 2020-05-23 15:07:12 · 124 阅读 · 0 评论 -
cookie/session的区别与联系
为什么要有cookie/session在客户端浏览器向服务器发送请求,服务器做出响应之后,二者便会断开连接(一次会话结束)。那么下次用户再来请求服务器,服务器没有任何办法去识别此用户是谁。有了cookie可以向服务器证明用户身份了,我们的web系统中是不是需要将用户的详细信息储存在某个位置供页面调用呢?用户的详细信息就包括姓名,年龄,性别等信息。而cookie是存在于客户端的,将用户详细信息通过网络发送到客户端保存是极不安全的。且cookie大小不能超过4k,不能支持中文。这就限制cookie不能满足存原创 2020-05-15 10:28:10 · 140 阅读 · 0 评论 -
Map排序
首先解释下泛型:List<? extends T>表示该集合中存在的都是类型T的子类,包括T自己;List<? super T>表示该集合中存的都是类型T的父类,包括T自己;以? extends T这种方式可以取元素而不能添加,这个叫get原则;以? super T可以添加元素但是没法取出来,这个叫put原则;public class TypeTest { public static void main(String[] args) { Boa原创 2020-05-14 13:38:45 · 425 阅读 · 0 评论 -
过滤器与拦截器
1.过滤器Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是设置字符集、控制权限、控制转向、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的w.原创 2020-05-12 13:00:28 · 243 阅读 · 0 评论 -
HashSet和HashMap的区别
HashSet和HashMap的区别*HashMap* *HashSet* HashMap实现了Map接口 HashSet实现了Set接口 HashMap储存键值对 HashSet仅仅存储对象 使用put()方法将元素放入map中 使用add()方法将元素放入set中 HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来...原创 2020-05-03 11:09:36 · 159 阅读 · 0 评论 -
hashmap实现原理
为什么Java强调当重写equals()时需要同时重写hashcode()方法,假设两个不同对象,在内存中的地址不同分别为a和b,那么重写equals()以后a.equals(b) =true 开发者希望把a,b这两个key视作完全相等然而由于内存地址的不同导致hashcode不同,会导致在hashmap中储存2个本应相同的key值;执行new HashMap()时会通过默认的负载因子初始化...原创 2020-05-02 17:19:45 · 118 阅读 · 0 评论 -
java设计模式
代理模式:静态代理总结:1.可以做到在不修改目标对象的功能前提下,对目标功能扩展.2.缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.动态代理:Cglib代理是功能最为强大的一种代理方式,因为其不仅解决了静态代理需要创建多个代理类的问题,还解决了jdk代理需要被代理对象实现某个接口的问题。Cgli...原创 2020-05-01 10:36:13 · 262 阅读 · 0 评论 -
利用IDEA反编译jar包
有时使用jd-gui进行反编译不太靠谱,可以通过idea反编译方式,两者进行对比:1. 利用IDEA反编译jar包(idea需要安装插件Java Bytecode Decomplier)2. 在需要编译的jar包的目录下,打开命令行界面,输入以下命令:java -cp "D:/Program Files/JetBrains/IntelliJ IDEA 2019.1.3/plugins/ja...原创 2019-11-19 10:58:15 · 6010 阅读 · 1 评论 -
JDK版本切换
一、问题以前安装过安装版的jdk后,配置过环境变量,然后现在更换jdk版本且修改环境变量并不能生效,如原本安装了1.8,现更换为1.7(或其他版本),且配置了环境变量,但是java -version仍显示1.8(任然显示原来的版本),配置如下:环境变量:JAVA_HOMED:\Program Files\Java\jdk1.8.0_172D:\Program Files\Java\jd...原创 2019-10-28 10:08:21 · 378 阅读 · 0 评论 -
接口和抽象类有什么区别
接口和抽象类有什么区别你选择使用接口和抽象类的依据是什么?接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类...转载 2018-04-18 09:21:49 · 90 阅读 · 0 评论 -
Spring+SpringMVC+Mybatis+Mysql整合实例
一、创建Web项目最终整个工程目录如下:需要导入的包二、创建库表映射类并配置MyBatis1、首先在数据库中创建一张表 t_useruse test; DROP TABLE IF EXISTS t_user; create table t_user ( userId int primary key auto_increment, userName VA...转载 2018-03-29 13:52:25 · 1689 阅读 · 1 评论 -
System.getProperties获取系统属性
源码如下:package com.hongshan.properties;import java.util.Properties;import java.util.Set;public class PropertiesTest { public static void main(String [] args){ Properties properties = Sy...原创 2018-04-17 11:21:43 · 892 阅读 · 0 评论 -
Java中的String,StringBuilder,StringBuffer三者的区别
首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > StringString最慢的原因: String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:String str="a...转载 2018-03-28 22:30:38 · 129 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。1. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不...转载 2018-03-28 22:10:31 · 115 阅读 · 0 评论 -
Java中HashMap和LinkedHashMap以及TreeMap的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和 TreeMap、Map主要用于存储健值对、根据键得到值、因此不允许键重复(重复了覆盖了),但允许值重复Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值、具有很快的访问速度、遍历时、取得数据...转载 2018-03-28 22:00:53 · 1690 阅读 · 0 评论 -
HashMap的实现原理
HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的数据结构在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列...转载 2018-04-11 10:09:46 · 118 阅读 · 0 评论 -
静态代码块与构造代码块执行顺序
话不多说参见代码:package com.cmos.adapter.service;public class Test { public Test(){ System.out.println("我是构造方法"); } //构造代码块 { System.out.println("我是构造代码块"); } //...原创 2019-03-08 16:39:10 · 314 阅读 · 0 评论 -
java中关键字final、static使用总结
一. finalfinal类不能被继承,没有子类,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法。父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。1. final类如果一个类不允许...原创 2019-03-08 17:39:22 · 142 阅读 · 0 评论 -
jar包打包以及Linux后台运行
jar打包有多种方法主要有利用IDE以及jar命令下面介绍利用jar命令进行打包:1. 如对/home目录下的test文件夹进行打包:jar cvf test.jar test2. 解压命令jar xvf test.jar3. 查看test.jar包的详细内容:jar tvf test.jar例如jar命令打包修改配置文件重新打包jar vcf expend.jar com c...原创 2019-03-25 14:11:38 · 774 阅读 · 0 评论 -
抽象类与接口
抽象类:1. 包含抽象方法的类就做抽象类,如果一个类中包含一个或多个抽象方法,该类必须被限定为抽象类;2. 抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性;3. 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法;4. 抽象类不能被...原创 2019-04-18 10:11:23 · 94 阅读 · 0 评论 -
List、Set、Map区别
List、Set、Map区别List1. 可以允许重复的对象。2. 可以插入多个null元素。3. 是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。4. 常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList最为流行,它提供了使用索引的随意访问,而LinkedList则对于经常需要从List中添加或删除元素的场合更为合适。S...原创 2019-04-18 10:47:00 · 139 阅读 · 0 评论 -
IDEA使用apache-tomcat-9.0.16控制台Tomcat日志中文乱码问题
最近在idea中使用Tomcat9时,已启动Tomcat就发现控制台下中文乱码,非常不方便,经历一番捣腾,查阅各种资料之后,发现主要原因时新版本apache-tomcat-9.0.16\conf\logging.properties与之前老版本文件不一致,有所改动,解决方案如下:发现比之前版本多了这一行java.util.logging.ConsoleHandler.encoding = UT...原创 2019-07-09 15:41:08 · 558 阅读 · 0 评论 -
Java Web NIO
在非阻塞IO(Nonblocking IO,NIO)出现之前,Java是通过传统的Socket来实现网络通信功能。以服务端为例,传统的Socket基本流程如下: 如果客户端没有对服务端发起连接请求,调用accept时会阻塞(阻塞指的是暂停执行一个线程以等待某个条件发生,例如某资源就绪)。如果连接成功但数据没有准备好时,调用read时会阻塞。如果处理多个连接,采用多线程方式时,...转载 2018-03-28 15:07:40 · 258 阅读 · 0 评论