
java
文章平均质量分 94
striveb
趁年轻,多吃点苦吧
展开
-
java导出Excel
参考这两个https://blog.youkuaiyun.com/chengwangbaiko/article/details/70228832https://blog.youkuaiyun.com/u011794238/article/details/46281181转载 2018-07-16 21:31:50 · 233 阅读 · 0 评论 -
synchronized原理及其相关特性
写在前面:尽量不要使用 synchronized(String a) 因为在JVM中,字符串常量池具有缓冲功能!而这个会导致线程一直循环,因为String的引用只有一个,会导致只有一个线程不断循环执行。1.synchronizedsynchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区或临界区。synchronized可以保证方法或者代码块在运行时,同一时刻只有...原创 2018-10-26 14:59:40 · 1707 阅读 · 0 评论 -
什么是Lock?什么是ReentrantLock?ReentrantReadWriteLock又是啥?
ps:不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放。目录一.什么是Lock对象?二.使用ReentrantLock实现线程同步三.使用Lock对象实现线程间通信四. 使用Lock对象和Condition实现等待/通知实例五.使用Lock对象和多个Condition实现等待/通知实例六、公平锁和非公平...原创 2018-10-27 00:23:35 · 1623 阅读 · 1 评论 -
多线程之join方法
一.前言: 在很多情况下,我们都是通过主线程创建并启动子线程的,如果子线程中需要耗费大量的时间计算的话,主线程往往会比子线程先结束,这个时候就会导致有时候主线程想获取子线程计算之后的结果,但是却获取不到。这个时候,我们就可以通过join方法来解决这个问题。二.join方法的作用:join方法的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期的...原创 2018-10-31 16:43:16 · 9554 阅读 · 1 评论 -
多线程之可见性:volatile
一.什么是volatile,它的作用是什么我们知道线程安全的三大核心就是原子性、可见性和顺序性,synchronized可以实现原子性,而volatile就是来实现可见性。那么什么是可见性呢?我们知道,在现代计算机中,由于 CPU 直接从主内存中读取数据的效率不高,所以都会对应的 CPU 高速缓存,先将主内存中的数据读取到缓存中,线程修改数据之后首先更新到缓存,之后才会更新到主内存。如...原创 2018-10-30 11:34:33 · 2131 阅读 · 0 评论 -
线程之间的通信方式:wait/notify
1.什么是线程间的通信通信,顾名思义就是一种通知交通的方式,在多线程的环境下,如果各个线程之间可以互相通信的话,可以很好地提高工作效率,提高CPU的利用率。Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)...原创 2018-10-30 15:07:16 · 803 阅读 · 0 评论 -
Java中的线程池及其实现类ThreadPoolExecutor
前言:像我们连接数据库一样,需要不断地创建连接,销毁连接,如果都是人为地一个个创建和销毁的话会很费劲,所以就诞生了数据库连接池,线程池的产生也是同样的道理。线程池预先创建了若干数量的线程,并且不能由用户直接对线程的创建进行控制,在这个前提下重复使用固定或较为固定数目的线程来完成任务的执行。一.线程池的实现原理首先,我们先来看看线程池是怎么实现的。先来看下面这个图:这是线程池的工作流...原创 2018-11-09 17:47:46 · 1157 阅读 · 0 评论 -
深入理解Java虚拟机之运行时数据区域
一.运行时数据区域有哪些?首先,我们先来看一张图:如上面的图所示,运行时内存区域主要分为:1.程序计数器,2.Java虚拟机栈,3.本地方法栈,4.Java堆,5.方法区等等,下面就一个个来剖析一下。二.这些区域都有哪些作用?首先我们熟悉一下一个一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运...原创 2018-11-03 12:18:13 · 228 阅读 · 0 评论 -
Java多线程之Executor框架
在前面的这篇文章中介绍了线程池的相关知识,现在我们来看一下跟线程池相关的框架--Executor。一.什么是Executor1.Executor框架的两级调度模型在HotSpot VM的线程模型中,Java线程(java.lang.Thread)被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程;当该Java线程终止时,这个操作系统线程也会被回收。操作系统会调...原创 2018-11-13 11:30:35 · 253 阅读 · 0 评论 -
深入理解Java虚拟机之创建对象,即创建一个类的过程
一.对象的创建1.类加载检查和分配内存虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、 解析和初始化过。 如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。 对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Ja...原创 2018-11-08 16:18:30 · 799 阅读 · 0 评论 -
ConcurrentHashMap 的工作原理及源码分析,如何统计所有的元素个数
1.ConcurrentHashMap(线程安全):ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组。 final Segment<K,V>[] segments;Segment继承了ReentrantLock(参照:https://blog.youkuaiyun.com/striveb/article/...原创 2018-11-15 16:38:38 · 3951 阅读 · 2 评论 -
浅谈Fork/Join框架
前言:本文基于jdk1.7,jdk1.8与jdk1.7还是有些差别。一、什么是Fork/Join框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。简单来说,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+...原创 2018-11-16 17:03:23 · 969 阅读 · 0 评论 -
ThreadLocal原理详细解析
1.ThreadLocal概念ThreadLocal,可以叫做线程本地变量或线程本地存储,顾名思义就是ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。其实就是通过空间换时间的方式来取得对每个线程各自变量的共享。变量值的共享可以使用 public static 变量的形式,所有的线程都使用同一个被 public static 修饰的变量。Th...原创 2018-10-26 11:57:21 · 506 阅读 · 0 评论 -
什么是PO,VO,DTO,DAO,POJO
1.POPO(persisent object),即持久对象,在一些Object/Relation Mapping工具中,能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。主要是对应数据库中的字段,可以简单认为一个PO对应数据库中的一张表,其中po对象的属性对应数据库中的字段。持久对象由insert数据库创建...原创 2018-10-17 17:52:20 · 664 阅读 · 0 评论 -
初学springboot遇到的一些坑(持续更新)
1.springboot有自动装配的功能,省去了spring很多繁琐的配置,但是也要注意一些地方。比如在主程序中,需要加入扫描mapper文件夹的注解:@MapperScan("com.kmbgi.project.*.*.mapper"),括号中的内容为mapper文件所在的地方。mapper配置文件中resultMap和resultType:https://www.cnblogs...原创 2018-08-17 11:49:43 · 299 阅读 · 0 评论 -
手撕Java--spring注解(个人感觉好玩,常用的一些注解)
一直很好奇这些Java中注解是怎么实现的,所以就去了解了一番,做此记录。1.元注解(meta-annotations),可以理解为为其他注解做注解。@Target:描述注解的使用范围,主要返回了枚举类ElementType的值,其中ElementType的值主要有(最后两个为Java8新增的): TYPE:说明该注解只能被声明在一个类上。 FIELD:说明该注......原创 2018-08-23 16:35:51 · 871 阅读 · 0 评论 -
设计模式之代理模式
代理模式从字面的含义上来讲就是找一个中介作为代理,对某些方法或服务进行增强,降低代码的耦合性。主要有三种代理模式一.静态代理:静态代理是由程序员创建或特定工具自动生成源代码,在对其编译。在程序员运行之前,代理类.class文件就已经被创建了。1.先创建提供服务的接口,作为源头package Proxy_design;//提供服务本体public interface SomeSer...原创 2018-08-27 21:30:45 · 207 阅读 · 0 评论 -
实现微信授权认证过程/步骤
GitHub:https://github.com/JDawnF最近在做个项目是基于微信的,所以去查看了微信开发文档。具体而言,网页授权流程分为四步:1 第一步:用户同意授权,获取code2 第二步:通过code换取网页授权access_token3 第三步:刷新access_token(如果需要)4 第四步:拉取用户信息(需scope为 snsapi_userinfo)...原创 2018-08-23 17:34:12 · 21877 阅读 · 2 评论 -
tomcat.service报错无法启动web应用及Nginx111解决方案
1.tomcat.service报错无法启动web应用,如图所示可能是权限问题,所以要进到Tomcat所在的目录,运行下列命令:sudo chown -R tomcat tomcat/这个命令就是修改Tomcat的权限,第一个Tomcat表示用户名,第二个Tomcat表示Tomcat目录,这个时候要注意你Tomcat的目录是不是叫这个名字2.Nginx111:这个就是up...原创 2018-08-24 11:10:49 · 768 阅读 · 0 评论 -
Java面试/笔试题目之Java基础(持续更新中)
GitHub:https://github.com/JDawnF声明:题目大部分来源于Java后端公众号,有些个人整理,但答案皆为个人整理,仅供参考。目录Java中有几种基本数据类型,各占几个字节?面向对象的特征:继承、封装和多态final, finally, finalize 的区别Exception、Error、运行时异常与一般异常有何异同请写出5种常见到的run...原创 2018-09-07 11:05:18 · 1587 阅读 · 0 评论 -
java面试/笔试题目之Java常见集合(持续更新中)
声明:题目大部分来源于Java后端公众号,有些个人整理,但答案皆为个人整理,仅供参考。GitHub:https://github.com/JDawnF目录Java中的集合List 和 Set 区别1.Set:集合中的对象不按特定方式排序(针对内存地址来说,即非线性),并且没有重复对象。它的有些实现类能对集合中的对象按特定方式排序。2.List:集合中的对象线性方式储存,可以...原创 2018-09-11 23:56:57 · 3052 阅读 · 1 评论 -
sso
https://www.cnblogs.com/ywlaker/p/6113927.html转载 2018-09-05 20:51:09 · 920 阅读 · 0 评论 -
java面试/笔试题目之多线程及锁 (持续更新中)
GitHub:https://github.com/JDawnF前言:这一模块可以参照徐刘根大佬的博客。目录一.线程和进程的概念、并行和并发的概念二.创建线程的方式及实现三.线程间通信的方式四.说说 CountDownLatch、CyclicBarrier 原理和区别五.说说 Semaphore 原理六.说说 Exchanger 原理七.ThreadLocal ...原创 2018-10-24 11:35:52 · 1554 阅读 · 0 评论 -
打包maven项目时出现Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war)
当一个maven项目是web工程的时候,要注意添加web.xml文件,一般默认是创建在main目录下的webapp/WEB-INF/web.xml,当然,如果你选择了maven 动态模板,会自动帮你建好这个目录,如果没有的话,你就要自己创建了。如果没有的话,会报错:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war...原创 2018-09-28 23:55:33 · 7922 阅读 · 1 评论 -
java工程师常用的Linux命令(crontab,netstat,service等命令)
开发过程中,难免会需要部署,所以也需要掌握一些基本的Linux命令,那些简单的ls,touch,mkdir,mv,cp等等这些就不列举了。1.netstat:显示各种网络相关信息这是一个非常实用的命令,当我们要查看某个端口是否开放的时候,就可以通过这个命令查询。此外,这个命令还可以用于显示路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 ...原创 2018-10-10 09:51:57 · 246 阅读 · 0 评论 -
Java 自定义比较器:Comparator 和 Comparable
这两个接口都是为了实现比较而用到的,当想要比较两个对象的时候,就可以实现这两个接口,参照:https://blog.youkuaiyun.com/u012289441/article/details/45154401?ref=myread主要补充:PriorityQueue<Integer> pq = new PriorityQueue<>((a,b)->map....转载 2019-03-03 12:02:55 · 657 阅读 · 0 评论