![](https://img-blog.csdnimg.cn/20201016143728495.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java学习与实践
文章平均质量分 55
Java学习与应用
常敲代码手不生
你越优秀,这个世界便越公平!!!
展开
-
Spring的@Transactional注解踩坑
@Transactional介绍Spring为开发人员提供了声明式事务的使用方式,即在方法上标记@Transactional注解来开启事务。大家在日常的开发中很多业务代码对数据进行操作的时候一定是希望有事务控制的。比如电商卖东西业务,代码的逻辑是商家先生成一个订单(订单信息插入到数据库中),再将钱收入到自己的账户中(数据库中的money增加)。整个过程是要作为一个完整的事务来对待的,如果后面这个操作失败了,那么前者也一定不能插入成功,这时候就会用到事务的回滚。@Transactional的常见错原创 2022-01-25 23:40:55 · 2709 阅读 · 0 评论 -
你不知道的interrupt、interrupted、isInterrupted
被调用的方式:interrupt和isInterrupted 是Thread类普通方法,被实例对象调用,都是非静态方法,也可以用线程对象来访问,例如t.interrupt(),t.isInterrupted()。interrupted是Thread类中的静态方法,可以通过类名形式来访问:Thread.interrupted()概念区分:(注意留意this和current)interrupt()方法:中断此线程(原文:Interrupts this thread)(此线程不一定是当前线程,而是指调.原创 2022-01-24 19:16:00 · 458 阅读 · 0 评论 -
回调方法理解与实践
定义:所谓回调方法,就是调用方把一个需要被回调的方法作为参数,传递给要调用的方法,被调用的方法执行完成后,通过该参数返回来调用此方法,作为参数传递的该方法就称作回调方法。实际上是一种双向的调用方式实际场景在项目开发中,需要各个模块或者对象之间的消息传递,A模块某些方法,需要在B模块满足某些条件下来主动通知并调用A模块的方法,这就是典型的回调应用场景。如果是比较耗时的调用,采用该方法可以避免同步阻塞。上代码:public class Request { public static原创 2021-12-23 19:19:03 · 1355 阅读 · 0 评论 -
Jsvc的使用场景
组件启动安装的操作顺序:执行postinstall.sh执行启动组件的linux服务执行组件的__service文件执行jsvc命令执行spring boot的main方法组件的卸载流程:通过preuninstall.sh脚本,供运管调用启动组件的底层命令,本质上是一个jsvc命令,为什么要使用Jsvc?Jsvc的使用场景:1、在linux系统上进行项目开发部署java项目时,常用方法是通过一个shell脚本启动。但当服务器重启后经常会忘了启动shell脚本,因此原创 2021-07-21 14:00:16 · 1056 阅读 · 0 评论 -
记一次生产频繁出现 Full GC 的 GC日志定位
https://cloud.tencent.com/developer/article/1552089https://www.cnblogs.com/klvchen/articles/11758324.html感谢!转载 2021-06-30 10:04:39 · 253 阅读 · 0 评论 -
Git使用总结
Git1、git pull 总提示让输入merge 信息原因:当本地分支完成commit尚未push到远程时,远程仓库响应分支已经被另一个同事提交了一次或多次,当本地执行git pull origin xxx时 就会出现解法:当执行git pull origin xxx时添加参数--no-edit git pull origin xxx --no-edit 这就避免了让你输入无用的merge信息了,自动保存并上传了默认的merge信息2、gitlab上创建的分支git branch -a 查原创 2021-06-30 10:01:06 · 201 阅读 · 0 评论 -
项目开发模式
项目开发模式在预测未来之前,首先分析一下程序员的日常工作中遇到哪些困难与挑战。需求和设计在需求沟通阶段,程序员需要准确的获取PRD上的需求信息,并对业务的价值和发展有一定的预判。根据以上的信息进行技术选型,数据建模,设计抽象。在这个过程中主要的挑战有: 高效的需求沟通 合理的技术方案选择 对现实世界的逻辑抽象 开发和测试在编码和测试阶段,程序员需要选择适合的数据结构并编写算法,合理的运用设计模式高效的实现功能,并且保证尽可能少的存在bug。在这个过程中主要的挑原创 2021-06-30 09:57:56 · 455 阅读 · 0 评论 -
Java核心技术36讲
java平台的理解 谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确么? Java本身是一种面向对象的语音,最显著的特性有两个方面,一个是所谓的“书写一次,到处运行”(Write once,run anywhere),能够非常容易地获得跨平台能力;另一个就是垃圾收集(GC,Garbage Collection) Java源代码,首先通过Javac编译成字节码(bytecode),然后在运行时,通过Java虚拟机内嵌的解释器将字节码转换为最终的机器码。但是常原创 2021-06-30 09:55:58 · 302 阅读 · 0 评论 -
Stack Overflow
2020-08-13:空指针异常 通过optional语法糖处理:由于未对deviceRtu.getLampNum()进行空值处理 //批量插入device_lamp if (!CollectionUtils.isEmpty(deviceLamps)) { enhancedDeviceLampMapper.batchInsertLamps(deviceLamps); logger.info("批量新增单...原创 2021-06-30 09:54:10 · 320 阅读 · 0 评论 -
阿里后端学习计划
原创 2021-06-27 19:59:40 · 202 阅读 · 0 评论 -
jdk1.8对synchronized锁的优化
synchronized 锁的优化:锁的四种状态-无锁,偏向锁、轻量级锁,重量级锁1、偏向锁:原因是大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁偏向锁的升级:当线程1访问代码块并获取锁对象时,会在java对象头和栈帧中记录偏向的锁的threadID,因为偏向锁不会主动释放锁,以后线程1再次获取锁时比较当前线程的threadID和Java对象头中的threadID是否一致,如果一致(还是线程1获原创 2021-06-09 10:06:55 · 4303 阅读 · 4 评论 -
JVM知识点汇总
原创 2021-05-25 20:35:41 · 49 阅读 · 0 评论 -
java死锁检测
/** * @author:cp * @time:2021-2-24 * @Description: java死锁测试 * 进程id查看命令:jsp 找到对应的进程id * 通过jstack 进程id 输出死锁信息 * * 如何定位死循环导致的其他线程阻塞等待: * linux下top命令查看cpu使用率较高的java进程,进而用top -Hp ➕pid查看该java进程下cpu使用率较高的线程。再用jstack命令查看线程具体调用情况,排查问题。 */public class Dea.原创 2021-02-24 20:34:30 · 167 阅读 · 0 评论 -
slf4j、log4j日志报错排查
1、WARN Please initialize the log4j system properly解法:只要在 src文件目录下建立配置文件log4j.properties即可2、SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"解法:这是因为sl4j和log4j的不兼容导致的,具体处理方案如下:首先看看你工程中的sl4j-api的版本(比如我的是1.7.21),然后在http://mvnrepository.co.原创 2021-02-01 20:30:08 · 1522 阅读 · 0 评论 -
Java停止线程的方式
1、使用中断标志位public class StopThreadTest extends Thread { private boolean exit = false; @Override public void run() { while (!exit) { try { System.out.println("i am running,please wait a moment"); ...原创 2021-01-14 11:07:45 · 100 阅读 · 0 评论 -
堆溢出,栈溢出
堆溢出:不断的new 一个对象,一直创建新的对象,栈溢出:死循环或者是递归太深,递归的原因,可能太大,也可能没有终止。在一次函数调用中,栈中将被依次压入:参数,返回地址,EBP。如果函数有局部变量,接下来,就在栈中开辟相应的空间以构造变量。举例如下:那么堆栈是什么?如果计算机是一个白领的话,那么堆栈就是他的办公桌。为了完成老板(程序)交代的工作,这个白领需要从书架或者柜子里拿出资料转载 2016-07-22 20:54:33 · 6290 阅读 · 0 评论 -
JVM系列三:JVM参数设置、分析
转载自: http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于转载 2016-07-22 20:24:48 · 8220 阅读 · 2 评论 -
垃圾回收算法
实际上,自动内存管理就是持续跟踪应用程序中的存活对象,即有哪些对象被其他正在使用的对象所引用,没有被使用的对象会被垃圾回收器回收掉。在本文中, 存活对象和 正在使用的对象会交替使用,它们是一个意思。但事实上,给垃圾回收技术划分类型并不容易,因此,为了避免在学术社区挑起嘴仗,在这里, 引用计数垃圾回收(reference counting garbage collection)之外的技术都被转载 2016-06-06 12:19:54 · 3535 阅读 · 0 评论 -
线程、多线程与线程池
线程:进程中负责程序执行的执行单元。一个进程中至少有一个线程。多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。线程池:基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复转载 2016-07-25 09:39:35 · 854 阅读 · 0 评论 -
Java中的ReentrantLock和synchronized两种锁定机制的对比
原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造转载 2016-07-21 19:58:23 · 620 阅读 · 0 评论 -
java基础面试题整理(BAT)
转载自:http://www.nowcoder.com/discuss/5949?type=2&order=0&pos=23&page=5点击打开链接在阿里面试之前总结了一下内推同学的面经,把面试题总结到一块,并进行了分类。有些题目我也总结了一下答案,大家可以参考一下,仅仅参考就行了,因为可能自己知识储备不够,答案整理不够完整(也可能会有错误的地方,希望大家指出。嘿~嘿~嘿~嘿~)转载 2016-06-19 19:59:32 · 1905 阅读 · 0 评论 -
前端后端接口那些事吐槽
今天与另一位前端开发人员扯起了后端接口的皮(我也是前端人员),那个兄弟对后端人员提供的接口很大的意见(我是司空见惯),不过他说的也确实有道理,所以结合我的见解,希望提供接口的人员能多加注意。1.没有文档...例如新的前端人员到了一个新的公司,使用接口时,问这个这个不知道,问那个那个不知道,要文档没文档,这绝对是前端人员最抓狂的事,心里肯定是一千只草泥马奔腾而过。为什么要文档?1. ...转载 2018-08-27 20:33:53 · 3282 阅读 · 0 评论 -
服务器启动时Webapp的web.xml中配置的加载顺序
一1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取和两个结点。 2、紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。 3、容器将转换为键值对,并交给servletContext。 4、容器创建中的类实例,创建监听器。 二 Load-on-startup转载 2016-05-31 11:07:39 · 1735 阅读 · 1 评论 -
javaweb中报404错误
这里只提供了一点建议,404大家都懂得是找不到请求的页面,一般就是URL路径请求错误但是我最近发现自己出现这个错误的原因是:每次的struts的配置文件的命名空间忘记加在了form表单的action名字所对应的前面,一定不要忘了当自己定义了命名空间的时候,action的名字前面要加上自己的命名空间!!!希望对别人有所帮助 struts 的配置文件: <package name="searc原创 2016-04-25 21:10:56 · 3589 阅读 · 0 评论 -
当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?
总的思路:在浏览器地址栏键入URL,按下回车之后发生的几个事件: 1)浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址; 2)解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接; 3)浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;转载 2016-03-14 11:28:47 · 6828 阅读 · 2 评论 -
Java Servlet API中的forward()方法和redirect()方法的区别
forward():是容器中控制权的转让,在客户端浏览器地址栏不会显示转向后的地址。forward会将 request state、bean、等信息带到下一个jsp页面;使用getAttribute()来取得前一个jsp所放的信息。默认的都是采用forward方法。redirect():重定向,浏览器将会得跳转的地址,并重新发送请求链接。从浏览器的地址栏里可以看到跳转后的地址信息。redi原创 2016-01-19 15:03:17 · 3564 阅读 · 0 评论 -
CMD窗口的cd命令
cd /? 显示帮助信息cd \ 返回到当前所在的根目录中去cd .. 返回到上一级的目录中去cd 目录名 可以进入下一层目录d: 改变当前驱动器的目录原创 2016-04-09 16:39:38 · 904 阅读 · 0 评论 -
JavaBean为什么要实现Serializable接口
今天无意中发现JavaBean类基本都要求实现了Serializable接口,以前只是知道序列化以后,可以通过io流的方式将对象序列化和反序列化,进行存取,但不知道为什么需要序列化,今天总结一下,方便以后可以查询!Java的"对象序列化"是指一个可以将实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。原创 2016-01-04 09:43:53 · 4170 阅读 · 0 评论 -
Java中的注解以及应用 @Deprecated @SupressWarning @Override
Annotation注解在Java中有着很广泛的,他是做为一种标识 为javac所识别,。每一个注解 都对应这一个Java类 在java.lang包中 有三个注解 分别是Deprecated SuppressWarning Override 在使用 注解前必须要在 注解类前面加上@ 每增加一个注解 就意味着产生了一个注解对象 。注解就是一个标识,编译器 通过转载 2016-07-11 17:47:27 · 3276 阅读 · 0 评论 -
深入浅出: Java回调机制(异步)
一、什么是回调回调,回调。要先有调用,才有调用者和被调用者之间的回调。所以在百度百科中是这样的:软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。回调是一种特殊的调用,至于三种方式也有点不同。1、同步回调,即阻塞,单向。2、回调,即双向(类似自行车的两个齿轮)。3、异步调用,即通过异步消息进行通知。转载 2016-05-18 21:22:59 · 257 阅读 · 0 评论 -
ThreadLocal和线程同步机制的对比
ThreadLocal和线程同步都是为了解决多线程中相同变量的访问冲突问题,那么,二者的区别在哪里?和线程同步机制对比,ThreadLocal有什么优势?同步机制中通过对象的锁机制保证同一时间只有一个线程来访问变量,这是该变量是多个线程共享的,使用同步机制要缜密的分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放掉锁等复杂的问题,程序设计和编写难度大ThreadLoca原创 2016-04-25 20:50:29 · 1067 阅读 · 0 评论 -
ThreadLocal知识介绍
ThreadLocal为解决多线程的并发问题提供了一种新的思路,使用这个工具类可以优美的编写出多线程程序。ThreadLocal他不是一个线程,而是线程的一个本地化对象。当工作于多个线程的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用改变量的线程分配一个独立的变量副本,所以每一个线程可以独立的改变自己的副本,而不会影响其他线程的对应的副本。ThreadLocal原创 2016-04-25 18:59:35 · 360 阅读 · 0 评论 -
同步容器和并发容器的区别
同步容器:可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器。这些类实现线程安全的方式是:将他们的状态封装起来,并对每个公有的方法都进行同步,使得每次只有一个线程能访问容器的状态。同步容原创 2016-03-14 10:22:35 · 1617 阅读 · 0 评论 -
String中intern的方法
internpublic String intern()返回字符串对象的规范化表示形式。一个初始时为空的字符串池,它由类 String 私有地维护。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 Strin转载 2016-07-12 17:07:37 · 654 阅读 · 0 评论 -
【Java线程】锁机制:synchronized、Lock、Condition
转载声明:转载自:点击打开链接http://blog.csdn.net/vking_wang/article/details/9952063非常感谢博主的讲解,对锁这一块又加深了理解http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java内存模型(五)——锁 http://www.ibm.com/developerwo转载 2016-07-12 17:20:39 · 287 阅读 · 0 评论 -
深入理解Java中为什么内部类可以访问外部类的成员
转载自:http://blog.csdn.net/zhangjg_blog/article/details/20000769内部类简介虽然Java是一门相对比较简单的编程语言,但是对于初学者, 还是有很多东西感觉云里雾里, 理解的不是很清晰。内部类就是一个经常让初学者感到迷惑的特性。 即使现在我自认为Java学的不错了, 但是依然不是很清楚。其中一个疑惑就是为什么内部类对象转载 2016-10-12 13:00:55 · 536 阅读 · 1 评论 -
Java多线程系列--“JUC锁”05之 非公平锁
概要前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析。内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基于JDK1.7.0_40)关于锁的数据结构请参考"Java多线程系列--“JUC锁”03之 公平锁(一) ",锁的使用示例请参考“Java多线程系列--“JUC锁”02之 互斥锁Reentran转载 2016-08-22 16:59:27 · 400 阅读 · 0 评论 -
JAVA 中BIO,NIO,AIO的理解
【转自】http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞?转载 2016-08-05 20:32:36 · 1019 阅读 · 1 评论 -
聊聊并发(四)——深入分析ConcurrentHashMap
术语定义术语英文解释哈希算法hash algorithm是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。哈希表hash table根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存转载 2016-07-15 16:09:43 · 1815 阅读 · 0 评论 -
Java 批量插入数据到数据库(MySQL)中
实现Java批量插入数据库数据:package Proxy;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.sql.Connection;import java.sql.Driv转载 2016-07-14 17:42:02 · 8089 阅读 · 2 评论