java基础
布拉格的爱
哪有什么岁月静好,只不过是有人替你负重前行
展开
-
Java 实现构建树 和分割List
/*** 两层循环实现建树** @param treeNodes 传入的树节点列表* @return*/public static List bulid(List treeNodes) { List<TreeNode> trees = new ArrayList<TreeNode>(); for (TreeNode treeNode : treeNodes) { if ( "0".equals(treeNode.getParentId(原创 2021-08-08 12:31:56 · 365 阅读 · 0 评论 -
Java Collections类:sort()升序排序
正向排序使用 Collections 类的静态方法 sort() 可以对集合中的元素进行升序排序。这要求列表中的所有元素都必须实现 Comparable 接口,而且所有元素都必须是使用指定比较器可相互比较的。sort() 方法主要有如下两种重载形式。void sort(List list):根据元素的自然顺序对集合中的元素进行升序排序。 void sort(List list,Comparator comparator):按 comparator 参数指定的排序方式对集合中的元素进行排序。p原创 2021-01-10 16:35:08 · 1498 阅读 · 0 评论 -
Java Lambda filter foreach的简单使用
Java在对 List 集合进行按条件查询的时候,经常会想到使用for循环。自从 Java 8 引入了 Lambda 后,简化了循环的使用。举例说明 Lambda的 foreach 和 filter 的简单使用。import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;public class StreamTest { public static void main(S原创 2020-12-06 10:01:36 · 1559 阅读 · 0 评论 -
遍历map,并对里面的值类型判断
一、遍历map,并对里面的值类型判断1、通过EntrySet取出map数据[Iterator遍历]2、采用 instanceof 判断数据类型3、格式化时间可以用 org.apache.commons.lang3.time.DateFormatUtils 这个方法public class Test { public static void main(String[] args) { Map<String, Object> param = new HashMap...原创 2020-11-15 15:20:23 · 1782 阅读 · 0 评论 -
cron表达式详解
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:Seconds Minutes Hours DayofMonth Month DayofWeek Year或Seconds Minutes Hours DayofMonth Month DayofWeek每一个域可出现的字符如下:Seconds:可出现", - * /"四个字符,有效范围为0-59的整数Minutes:可出现", - * /"四个字符,有效范围为0-5...原创 2020-07-15 09:10:30 · 341 阅读 · 0 评论 -
理解ThreadLocal
在使用Spring MVC开发web项目时,在一个请求的任意阶段,都可以通过RequestContextHolder.getRequestAttributes()获取RequsetAttributes对象,进而获取request对象。这是怎么实现的呢?带着这个疑问,我们一起理解一下ThreadLocal对象。 首先看一下getRequestAttributes()的实现public static RequestAttributes getRequestAttributes() { Re...转载 2020-06-27 11:37:39 · 165 阅读 · 0 评论 -
for(:::)和while(true)的区别
for(;;)和while(true)区别从寓意上来看,两种写法都是无限循环 从效率上看,while(true)每次循环要判断循环条件,for(;;)循环没有判断,理论上节省机器指令。对于早期的C语言,两种写法性能会不一样。for语句编译器会优化成一条汇编指令,而while判断则编译器会生成好几条汇编指令。...原创 2020-06-26 17:46:00 · 282 阅读 · 0 评论 -
LockSupport的park()和 unpark()方法
LockSupport是创建锁和其他同步类的基本线程堵塞原语。LockSupport通过许可机制来控制是否堵塞线程,unpark()发放许可,线程不堵塞,park()消费许可,线程堵塞。除此之外,LockSupport还支持传递一个参数的形式,这个参数可以在堵塞的时候获得,具体解释请看下面。park()和unpark()提供了类似wait()和notify()的机制,但是并不用获得对象的监视器,而是获得许可,park()就是堵塞,挂起,不许可的意思。unpark()就是发放许可。unpark()可以转载 2020-06-26 17:40:38 · 828 阅读 · 0 评论 -
揭密FutureTask
Future是我们在使用java实现异步时最常用到的一个类,我们可以向线程池提交一个Callable,并通过future对象获取执行结果。本篇文章主要讲述了JUC中FutureTask中的一些实现原理。使用的jdk版本是1.7。Future Future是一个接口,它定义了5个方法:booleancancel(booleanmayInterruptIfRunning);booleanisCancelled();booleanisDone();V get()...转载 2020-06-26 17:20:04 · 249 阅读 · 0 评论 -
java线程池的作用
现在服务器端的应用程序几乎都采用了“线程池”技术,这主要是为了提高系统效率。因为如果服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。下面我们来看看怎么用Java实现一个线程池。一个比较简单的线程池至少应包含线程池管理器、工作线程、任务队列、任务接口等部分。其中线程池管理器(ThreadPool Manager)的作用是创建...转载 2020-06-09 15:25:47 · 3212 阅读 · 0 评论 -
线程的基本概念、线程基本状态以及状态之间的关系
线程的基本概念:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:运行、就绪、挂起、结束。一个程序中可以有多条执行线索同时执行,一个线程就是程序中的一条执行线索,每个线程上都关联有要执行的代码,即可以有多段程序代码同时运行,每个程序至少都有一个线程,即main方法执行的那个线程。如果只是一个cpu,它怎么能够同时...原创 2020-01-18 14:23:12 · 3565 阅读 · 0 评论 -
AQS同步器的实现原理
1.什么是AQS? AQS的核心思想是基于volatile int state这样的volatile变量,配合Unsafe工具对其原子性的操作来实现对当前锁状态进行修改。同步器内部依赖一个FIFO的双向队列来完成资源获取线程的排队工作。2.同步器的应用 同步器主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,对同步状态的修改或者访问主要通过同步器提供的3个...转载 2020-01-18 12:57:58 · 593 阅读 · 0 评论 -
synchnorized关键字
Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:能够保证同一时刻只有一个线程执行该段代码,保证程序的并发安全性(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。问题,如果两个线程同时count++,最后结果比预计的少public class Syn...原创 2020-01-15 14:49:42 · 382 阅读 · 0 评论 -
Java对象头详解
对象由多部分构成的,对象头,属性字段、补齐区域等。所谓补齐区域是指如果对象总大小不是4字节的整数倍,会填充上一段内存地址使之成为整数倍。后面两个很好理解,今天我主要想总结一下对象头:对象头这部分在对象的最前端,包含两部分或者三部分:Mark Words、Klass Words,如果对象是一个数组,那么还可能包含第三部分:数组的长度。Klass Word里面存的是一个地址,占3...转载 2020-01-11 21:08:09 · 369 阅读 · 0 评论 -
Java 将大字段转字符串
Java 将大字段转字符串 SQL CLOB 是内置类型,它将字符大对象 (Character Large Object) 存储为数据库表某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身。Clob 对象在它被创建的事务处理期间有效。1,i...原创 2020-01-08 19:53:12 · 590 阅读 · 0 评论 -
Redis基本数据类型
Redis支持五种数据类型:string(字符串) hash(哈希) list(列表) set(集合) zset(sorted set:有序集合)String(字符串)redis最基本的类型,几乎与Memcached 一模一样的类型,key => value string 是二进制安全的,就是说可以包含任何数据,比如图片或者序列化的对象 string最大能存储512MB...转载 2019-12-18 20:50:29 · 61 阅读 · 0 评论 -
String、StringBuffer、StringBuilder三者区别
1.基本区别String的对象不可变,StringBuffer和StringBuilder的对象是可变的2.性能区别三者中StringBuilder执行速度最佳,StringBuffer次之,String的执行速度最慢(String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,String对象一旦创建后该对象是不可更改的,后两者的对象是变量是可以更...转载 2019-12-18 20:00:29 · 665 阅读 · 0 评论 -
单例模式的三种实现 以及各自的优缺点
单例模式:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式有三种:懒汉式单例,饿汉式单例,登记式单例。(不管程序是否需要这个对象的实例,总是在类加载的时候就先创建好实例,理解起来就像不管一个人想不想吃东西都把吃的先买好,如同饿怕了一样。)1.懒汉式单例public class Singleton {...原创 2019-11-07 21:20:18 · 406 阅读 · 0 评论 -
java数据类型
Java中的数据类型分为两大类分别是基本类型和引用类型,基本类型包含int,float,double,char,boolean等八种类型。引用类型包含类,数组,接口三种类型在Java语言中,数据类型可以分为基本类型和引用类型两大类型。接下来在文章之后将为大家具体介绍这两大类型的数据,具有一定的参考作用,希望对大家有所帮助【推荐课程:Java教程】基本数据类型简单数据类型是...转载 2019-11-06 21:27:57 · 107 阅读 · 0 评论 -
Java annotation 自定义注释@interface的用法
一、什么是注释 说起注释,得先提一提什么是元数据(metadata)。所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。而J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源代码的。在J2SE5.0中可以自定义注释。使用时在@后面跟注释的名字。 ...转载 2018-09-29 21:09:32 · 842 阅读 · 0 评论 -
Object 用法
List<Object> parentsName=new ArrayList<Object>(); parentsName.add(1212); parentsName.add("dewe");Object是所有类的基类,这个你可以查询jdk文档了解,所有类都继承自Object。 Object …objects这种参数定义是在不确定方法参数的情况下的一种多态表现形式。即这个方法可以传递多个参数原创 2017-07-19 17:48:25 · 673 阅读 · 0 评论 -
反射的访问权限setAccessible
isAccessible()和setAccessible(true);当isAccessible()的结果是false时不允许通过反射访问该字段 当该字段时private修饰时isAccessible()得到的值是false,必须要改成true才可以访问 所以 f.setAccessible(true);得作用就是让我们在用反射时访问私有变量package com.test;pub...原创 2019-09-26 20:34:04 · 949 阅读 · 0 评论 -
@responseBody的使用
1、@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。2、 @RequestMapping("...原创 2019-09-16 20:59:25 · 281 阅读 · 0 评论 -
response 设置响应头的常用几种方法
response 设置响应头的常用几种方法 1.Location 的用法 response.setStatus(302)//临时定向响应码 response.setHeader("Location", "/day03_00_ResponseHeader/servlet/ResponseHeaderDemo2");///day03_00_ResponseHeader/serv...转载 2018-03-23 11:35:24 · 15333 阅读 · 1 评论 -
base64文件下载
@RequestMapping(value = "download") public void download(String id,HttpServletRequest request,HttpServletResponse response){ OutputStream os = null;// InputStream is = null; ZipOutputStream zos =...原创 2018-03-22 14:42:14 · 3060 阅读 · 0 评论 -
java.io.tmpdir指定的路径在哪?
Java.io.tmpdir介绍System.getproperty(“java.io.tmpdir”)是获取操作系统缓存的临时目录,不同操作系统的缓存临时目录不一样, 在Windows的缓存目录为:C:\Users\登录用户~1\AppData\Local\Temp\ Linux:/tmpSystem.getProperty(“”),可以操作一下参数: java.versionJava运...转载 2018-03-22 14:15:55 · 4904 阅读 · 0 评论 -
java如何计算程序运行时间
long startTime = System.currentTimeMillis(); //获取开始时间doSomething(); //测试的代码段long endTime = System.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间:" + (endTime - startTime) + "ms...转载 2018-03-08 15:33:27 · 1798 阅读 · 1 评论 -
Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate如果是在配置文件的话那就是dynamic -insert 和 dynamic-update这两个注解在一定程度上可以增加与数据库操作相关的速度,可以节省SQL语句的执行时间,提高程序的运行效率。使用这两个注解只需要在实体类上加入即可,或者在*.hbm.xml配置。这两转载 2017-12-04 14:12:16 · 165 阅读 · 0 评论 -
在分类中,和自己的父类关联
在分类中,和自己的父类关联 public class AssessQualityIndex extends IdEntity<AssessQualityIndex> { private static final long serialVersionUID = 1L; private String scoreStandard; // 评分标准 private原创 2017-07-19 17:52:22 · 377 阅读 · 0 评论 -
通过url抓获得到的html
需要的jar包 httpclient-4.5.jar httpcore-4.4.1.jarpublic static String findUrlHtml(String url, String encoding) { String html = null; CloseableHttpResponse response = null; Closeab原创 2017-07-04 15:45:55 · 316 阅读 · 0 评论 -
文件操作工具类
/** * 文件操作工具类 * 实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能 * @author ThinkGem * @version 2013-06-21 */public class FileUtils { public static void main(String[] args) { FileUtils.unZipFi原创 2017-07-04 15:04:50 · 181 阅读 · 0 评论 -
java中instanceof用法
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。 用法: result = object instanceof class 参数: Result:布尔类型。 Object:必选项。任意对象表达式。 Class:必选项。任意已定义的对象类。 说明:原创 2017-07-04 11:05:07 · 286 阅读 · 0 评论 -
类型后面三个点(String...)和数组(String[])的区别
类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。 例如我们有一个方法叫做test(String…strings),那么你还可以写方法test(),但你不能写test(String[] strings),这样会出编译错误,系统提示出现重原创 2017-07-04 10:52:37 · 42877 阅读 · 5 评论 -
Java 读写Properties配置文件
1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型/** * Properties文件载入工具类. 可载入多个properties文件, 相同的属性在最后载入的文件中的值将会覆盖之前的值,但以System的Prope原创 2017-07-04 10:41:39 · 285 阅读 · 0 评论 -
动态数据源切换
1,初始化动态数据源,需要动态数据源的工程才需要配置 <bean class="com.dc.city.listener.datasouce.InitDataSourceListener"></bean>2,从数据库表中读取数据源信息,并加载到服务器public class InitDataSourceListener { @Resource private DynamicDataS原创 2017-07-03 16:03:35 · 363 阅读 · 0 评论 -
Tomcat7目录结构详解(非常详细)
Tomcat7 的目录结构如图:1、bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME...转载 2018-03-31 15:45:21 · 376 阅读 · 0 评论 -
java-web之servlet中的线程安全问题
一,servlet容器如何同时处理多个请求。Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线程池来服务请求。线程池实际上是等待执行代码的一组线程叫做工作者线程(Worker Thread),Servlet容器使用一个调度线程来管理工作者线程(Dispatcher Thread)。当容器收到一个访问Servlet的请求,调度者线程从线程池中选出一个转载 2018-04-18 11:27:06 · 312 阅读 · 0 评论 -
关于多个线程同时调用单例模式的对象,该对象中方法的局部变量是否会受多个线程的影响
关于多个线程同时调用单例模式的对象,该对象中方法的局部变量是否会受多个线程的影响对于那些会以多线程运行的单例类,例如Web应用中的Servlet,每个方法中对局部变量的操作都是在线程自己独立的内存区域内完成的,所以是线程安全的。对于成员变量的操作,可以使用ThreadLocal来保证线程安全。局部变量不会受多线程影响成员变量会受到多线程影响多个线程应该是调用的同一个对象转载 2018-04-18 11:31:28 · 718 阅读 · 0 评论 -
Java实现菜单排序
一,获取所有的菜单,然后进行排序 List<Menu> sourcelist = systemService.findAllMenu(); Menu.sortList(list, sourcelist, Menu.getRootId(), true);二,具体的操作此方法3个参数 第一个参数,新构建的menu集合 ...原创 2019-07-21 15:25:03 · 1905 阅读 · 0 评论 -
Java线程详解(深度好文)
Java线程:概念与原理一、进程与线程进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,即进程空间或(虚空间)。进程不依赖于线程而独立存在,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于...转载 2019-06-30 23:01:55 · 123 阅读 · 0 评论