编程语言
文章平均质量分 87
刘水镜
【欢迎阅读我的最新专栏——《SpringBoot趣味私房课》https://www.imooc.com/read/75】【欢迎加入「开发者」技术交流群:168965372】【群链接:https://jq.qq.com/?_wv=1027&k=Inxd5Aa9】
展开
-
Volatile:JVM 我警告你,我的人你别乱动!
Volatile 的意思是,易变的,动荡不定的,反复无常的。volatile 的作用就是告诉 JVM,被我修饰的变量它非常善变,你要给我盯好了,一旦有风吹草动要立马通知大家;另外,你不要自作聪明的调整它的位置(为了性能重排序),它可是说翻脸就翻脸的主儿。最后,留一个小问题:内存可见性的那个程序中,就算 flag 没有被 volatile 修饰,线程顶多不是第一时间读到 flag 的修改,但也不应该一直读不到呀,这是为啥?这太反直觉了!开动你的脑筋思考一下吧!...原创 2022-08-08 11:10:20 · 339 阅读 · 1 评论 -
为什么 ThreadLocal 可以做到线程隔离?
ThreadLocal的get()方法其实和set()方法逻辑很相似,先从当前线程的threadLocals属性中取,如果该属性为null,那么就初始化。OK,从效果上看,ThreadLocal确实是线程隔离的,那么,它是如何做到线程隔离的呢?当线程结束时,会调用当前线程实例的exit()方法,将threadLocals设置为null,以便垃圾回收器将其回收掉。进入到两个方法内部后发现,不管执行哪个分支,最终是把值保存到了当前线程的threadLocals属性中。...原创 2022-07-25 09:30:00 · 385 阅读 · 2 评论 -
Java 程序在 JVM 中是怎样执行的?(一定要看到最后)
代码很简单,一个类,main()方法调用a()方法,a()方法中定义了一个int变量a,然后调用b()方法,b()方法中new了一个User对象b。一个方法被执行的时候,会创建一个栈帧,用来存放局部变量表、方法出口等信息。堆堆可谓是与程序员打交道最多的一块区域了,也是JVM中最大的一块内存区域了。面向对象的核心成员就是对象和对象的行为(也就是方法),而堆和栈刚好是管着两块儿的。b()方法执行结束,b变量销毁,断开对User实例的引用,出栈。.........原创 2022-07-16 19:20:07 · 788 阅读 · 4 评论 -
写了那么多 Java 代码,却不一定见过它的真面目
我们都知道那句著名的宣传语——「一次编写, 到处运行(Write Once, Run Anywhere)」,这是对 Java 平台无关性的精准概括。字节码 + JVM 使其平台无关,与此同时也衍生出另一个无关性——语言无关性。像 Kotlin、Groovy、Scala、Clojure、JRuby 等语言都可以运行在 JVM 之上。理论上只要能将源代码编译成符合 JVM 规范的字节码,任何语言都可以在 JVM 中运行。字节码是连接语言和 JVM 的关键桥梁,今天我们就一起聊聊这个关键人物。概览我们创建.原创 2022-02-02 14:52:49 · 2184 阅读 · 1 评论 -
菜鸟调错——Spring与DWR集成,配置文件报错
背景简介:该项目是市信用办的一个系统,之前好像是一个石家庄的公司负责的。我属于是半路接手。拿到源码后,根据他们给的简(shao)单(de)明(ke)了(lian)的说明把项目搭起来。结果可想而知,项目文件一片红。于是就开始解决这些错误,好在很多错误都是类似的。经过一番捣鼓,大部分的错误都解决了,有一个Spring跟DWR集成配置的错误,错误信息如下:Multiple annotations...原创 2014-05-12 15:56:39 · 4376 阅读 · 14 评论 -
菜鸟译文——使用Java泛型构造模板方法模式
如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码。这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件; 读取每一行并解析; 把每一行的字符填充到Product或Customer对象; 将每一个对象添加到Set里; 返回Set。 正如你看到的,只有有注释的地方是不一样的。其他所有步骤都是相同的。 ...翻译 2014-08-19 21:36:25 · 8321 阅读 · 8 评论 -
译文——Java中的继承和组合
阅读英文的能力对于程序员来说,是很重要的。这几年也一直在学习英文,今天心血来潮,就在网上找了一篇简短的博文翻译一下。水平一般,能力有限,还请各位看官多多指点。译文:本文将会举例说明Java中继承和组合的概念。首先举一个继承的例子,然后展示一下如何用组合来改善继承的设计。最后概括一下如何在它们之间做出选择。1. 继承假设我们有一个Insect类。这个类包含两个方法:一个是...翻译 2014-08-09 08:08:55 · 3574 阅读 · 5 评论 -
菜鸟调错——Hibernate 4.3.x 注解常见错误及解决方案
编程的过程免不了遇到各种错误,各种问题,而遇到问题,解决问题的这个过程我认为是最让人兴奋的事情。越棘手的问题,解决以后带来的快感也越大。当一个问题你搞了一下午或者一天,甚至几天,当你解决的那一刻你会觉得你又获得了重生。甚至会感觉此时此刻整个世界都是你的。啊哦,扯的有点远了。言归正传,今天我们要说的是关于Hibernate的一些常见错误。大家都知道Java项目更新一个版本可能与之前的版本有很大的...原创 2014-09-16 21:34:12 · 9165 阅读 · 14 评论 -
菜鸟学Java——重新认识泛型
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 规则和限制1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容...原创 2014-10-28 02:35:12 · 4732 阅读 · 15 评论 -
菜鸟学SSH——Hibernate动态模型+JRebel实现动态创建表
项目用的是SSH基础框架,其中有一些信息很类似,但又不尽相同。如果每一个建一个实体的话,那样实体会太多,如果分组抽象,然后继承,又不是特别有规律。鉴于这种情况,就打算让用户自己配置要添加的字段,然后生成对应的表。需要动态配置的部分实例:上图只是一小部分,一个一个组合起来大概有三百多。每一项对应一个实体,显然不好,就算是按照规律归归类还是有不少,于是就想到了在运行期来确定这些...原创 2014-10-20 10:39:11 · 5491 阅读 · 9 评论 -
菜鸟要做架构师——java性能优化之for循环
完成同样的功能,用不同的代码来实现,性能上可能会有比较大的差别,所以对于一些性能敏感的模块来说,对代码进行一定的优化还是很有必要的。今天就来说一下java代码优化的事情,今天主要聊一下对于for(while等同理)循环的优化。作为三大结构之一的循环,在我们编写代码的时候会经常用到。循环结构让我们操作数组、集合和其他一些有规律的事物变得更加的方便,但是如果我们在实际开发当中运用不合理,可能会给程...原创 2014-11-27 18:06:13 · 36810 阅读 · 40 评论 -
菜鸟学Java——Java内存分析
我们常说的Java内存主要分为四大块(寄存器不在考虑之内,我们无法用代码来操控它):stack(栈)、heap(堆)、data segment(数据区)、code segment(代码区)。它们的主要用途如下图所示: 而在上面四个当中,我们经常谈论的是右边那两个家伙——stack和heap。今天我们就来聊聊Java代码在运行的过程中,在stack和heap中到底是什么样子的...原创 2014-11-30 13:52:12 · 4489 阅读 · 19 评论 -
菜鸟学SSH——Spring事务管理
Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如...原创 2013-12-17 17:33:41 · 28872 阅读 · 28 评论 -
菜鸟学SSH——Struts2内部是如何工作的
前面说完了Spring、Hibernate,很自然今天轮到struts了。struts的核心原理就是通过拦截器来处理客户端的请求,经过拦截器一系列的处理后,再交给Action。下面先看看struts官方的工作原理图:图1 struts原理图简单分析一下:首先客户端发来HttpServletRequest请求,传递给FilerDispatcher(ActionMapper是访...原创 2014-07-31 01:38:11 · 4348 阅读 · 14 评论 -
菜鸟学SSH——简单模拟Hibernate实现原理
之前写了Spring的实现原理,今天我们接着聊聊Hibernate的实现原理,这篇文章只是简单的模拟一下Hibernate的原理,主要是模拟了一下Hibernate的Session类。好了,废话不多说,先看看我们的代码:package com.shuijing.hibernate;import java.lang.reflect.Method;import java.sql.Conne...原创 2014-07-25 08:02:04 · 5324 阅读 · 18 评论 -
菜鸟学Java——Ajax+Servlet实现无刷新下拉联动
下拉联动的功能可以说非常的常用,例如在选择省、市等信息的时候;或者在选择大类、小类的时候。总之,下拉联动很常用。今天就跟大家分享一个简单的二级下拉联动的功能。 大类下拉框:页面加载的时候就初始化大类的下拉选项,通过后台代码去数据库里面取得数据(当然像省市这样不变的内容可以直接给值),然后加载到下拉选项中。<select name="region" class="select1"...原创 2013-07-29 11:09:48 · 5662 阅读 · 30 评论 -
菜鸟学SSH——Spring容器AOP的实现原理——动态代理
之前写了一篇关于IOC的博客——《Spring容器IOC解析及简单实现》,今天再来聊聊AOP。大家都知道Spring的两大特性是IOC和AOP。IOC负责将对象动态的注入到容器,从而达到一种需要谁就注入谁,什么时候需要就什么时候注入的效果,可谓是招之则来,挥之则去。想想都觉得爽,如果现实生活中也有这本事那就爽歪歪了,至于有多爽,各位自己脑补吧;而AOP呢,它实现的就是容器的另一大好处了,就是可...原创 2014-07-16 16:16:21 · 9388 阅读 · 11 评论 -
菜鸟学SSH——Hibernate与Spring配合生成表结构
前几天向大家介绍了一种用工具类生成数据表的方法,不过之前的方法需要使用一个跟项目关系不大的工具类。不免让人觉得有些多余,所以呢,今天再向大家介绍一种方法。即Hibernate与Spring配合生成表结构。首先,要将Spring的信息配置的web.xml,配置Spring用于初始化容器对象的监听器。web.xml<?xml version="1.0" encoding="UTF-...原创 2014-05-23 11:59:10 · 3343 阅读 · 17 评论 -
菜鸟调错——jetty运行时无法保存文件
背景交代:上一篇博客写的是用jetty和Maven做开发、测试。在使用的过程中遇到一个小问题,就是在jetty启动以后,修改了jsp、xml等文件无法保存。 错误信息: 解决方案:到Maven库(即repository)中搜索jetty-webapp,如下图: 将jetty-webapp*.jar文件复制到桌面,用压缩软件打开,到"\org\eclipse\...原创 2014-06-06 15:02:12 · 3877 阅读 · 35 评论 -
菜鸟学EJB——在同一个SessionBean中使用@Remote和@Local
不废话,直接进入正题:在Jboss4及以前的版本中,如下代码可以成功部署:package com.shuijing.ejb;import javax.ejb.Local;import javax.ejb.Remote;import javax.ejb.Stateless;@Stateless@Remote@Localpublic class UserManager...原创 2014-04-25 21:11:12 · 5046 阅读 · 15 评论 -
菜鸟学SSH——Hibernate——Session之save()方法
Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中。通过save()将持久化对象保存到数据库需要经过以下步骤:1,系统根据指定的ID生成策略,为临时对象生成一个唯一的OID;2,将临时对象加载到缓存中,使之变成持久化对象;3,提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库。OK,下面来...原创 2014-02-19 20:27:14 · 31832 阅读 · 31 评论 -
有史以来最简单的三层实例(C#)
三层已经学了很久了,一直没有写博客是因为自己感觉对三层的理解还太肤浅,怕写的不对误导别人。当然就现在我的水平而言对于三层的理解还是不够深刻,但是我感觉不至于误导别人了,所以将我对于三层的一些理解写出来,希望会对和我当初一样迷茫的菜鸟一些帮助!回想当初我学习三层的时候,在网上寻找关于三层的知识,找到了很多例子,但是感觉它们都有些复杂,不太适合刚刚接触三层的人学习,所以我决定写一个简单的三原创 2012-03-12 01:15:17 · 12806 阅读 · 125 评论 -
菜鸟学Java——将MyEclipse项目导入到Eclipse
最近由于种种原因,需要将以前用MyEclipse写的项目迁移到Eclipse中。但是当我将之前的项目import到Eclipse中后,发现根本不能运行。经过一番寻觅,终于让我找到了一种解决的办法。一起看看吧! 修改项目中的.project文件(用记事本打开)1,增加一个<buildCommand><buildCommand> <name>...原创 2013-10-30 09:54:48 · 3017 阅读 · 14 评论 -
菜鸟学Java——Ajax异步检查用户名是否存在(附Demo下载)
在任何网站注册用户的时候,都会检查用户是否已经存在。很久以前的处理方式是将所有数据提交到服务器端进行验证,很显然这种方式的用户体验很不好;后来有了Ajax,有了异步交互,当用户输完用户名继续填写其他信息的时候,Ajax就将信息发到了服务器去检查该用户名是否已经被注册了,这样如果用户名已经存在,不用等用户将所有数据都提交就可以给出提示。采用这种方式大大改善了用户体验,今天就一起跟大家聊聊这种交互方式...原创 2013-05-28 10:24:37 · 28429 阅读 · 115 评论 -
Java——你知道long和Long有什么区别吗?
Java中数据类型分两种:1.基本类型:long,int,byte,float,double2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你自己创建的类。其中Long叫 long的包装类。Integer、Byte和Float也类似,一般包装类的名字首写是数值名的大写开头。什么是包装类?在java中有时候的运算必须是两个类对象......原创 2014-06-15 08:40:54 · 37198 阅读 · 21 评论 -
菜鸟学SSH——基于注解的SSH将配置精简到极致
很早之前就想写一篇关于SSH整合的博客了,但是一直觉得使用SSH的时候那么多的配置文件,严重破坏了我们代码整体性,比如你要看两个实体的关系还得对照*.hbm.xml文件,要屡清一个Action可能需要对照applicationContext*.xml和struts*.xml文件。总之过多的配置文件坏破坏代码的整体性,会打乱代码的连续性,因为很多情况下你需要一边看Java代码,一边看xml的配置,采...原创 2014-08-19 08:22:27 · 29669 阅读 · 32 评论 -
菜鸟学Java——如何更好的进行单元测试——JUnit
测试在软件生命周期中的重要性,不用我多说想必大家也都非常清楚。软件测试有很多分类,从测试的方法上可分为:黑盒测试、白盒测试、静态测试、动态测试等;从软件开发的过程分为:单元测试、集成测试、确认测试、验收、回归等。 在众多的分类中,与开发人员关系最紧密的莫过于单元测试了。像其他种类的测试基本上都是由专门的测试人员来完成,只有单元测试是完全由开发人员来完成的。那么今天我们就来说说什么是单元测试...原创 2014-06-18 21:23:32 · 47773 阅读 · 17 评论 -
菜鸟学SSH——Hibernate核心接口
在使用Hibernate的时候,我们通常都会用的Configuration、SessionFactory、Session、Transaction、Query和Criteria等接口。通过这些接口可以,不仅可以存储与取出持久化对象,还可以对事务进行管理。下面对着几个接口一一介绍:几个接口之间的层次关系如下图: Configuration:Configuration是Hiberna...原创 2014-02-22 19:17:14 · 3712 阅读 · 24 评论 -
菜鸟学习JVM——垃圾回收算法
Java垃圾回收算法所有的垃圾回收算法都是为了解决三个问题: * 哪些内存需要回收 * 什么时候回收 * 怎么回收引用计数法(Reference Counting) 引用计数法原理很简单,给每个对象分配一个计数器,当被引用时就加一,引用失效就减一。计数器为零时,则说明该对象不可能再被使用。引用计数法效率不错,大部分情况下是个不错的算法,但它有一个非常明显的缺点,就是无法回收互相引用的对象,从原创 2016-05-20 00:34:54 · 7463 阅读 · 12 评论 -
菜鸟调错——POI导出Excel报错No such file or directory
POI 3.8版本导出excel问题 使用poi 3.8版本导出excel时,在本地和测试环境都是好使的,但是部署到线上环境(linux+tomcat)后直接报错,报错日志如下:java.lang.RuntimeException: java.io.IOException: No such file or directory at org.apache.poi.xssf.strea原创 2016-09-12 10:10:53 · 11653 阅读 · 6 评论 -
C#截取指定长度字符超出部分以"..."代替,用于处理过长的标题
在做网站的时候经常遇到需要显示的东西太长,此时我们通常会将它们按一定的长度截取,然后在其后面加上省略号。当鼠标移到上面时,就会显示出完整的内容。就像下面这样:要实现此效果,需要用到下面这个截取字符串的函数。相信不用我废话,大家一看注释就能明白是如何实现的。 /// /// 将指定字符串按指定长度进行截取并加上指定原创 2012-08-14 22:02:30 · 11119 阅读 · 25 评论 -
菜鸟学Spring Boot——Hello Spring Boot
闲聊本文的目的是让没接触过Spring Boot感受一下它令人发指的方便、快捷、高效率,第一次接触Spring Boot是在16年上半年的事情了,那时候还在日企工作,当时正准备重构一个老项目,太君将Spring Boot引入了进来。那时候Spring Boot在国内还没有太多人用呢,如今它早已火得一塌糊涂。初次见面就被它简洁高效深深吸引,时隔两年多才来跟大家分享,深感惭愧!闲言碎语不要讲,表一...原创 2018-10-15 09:04:00 · 748 阅读 · 2 评论 -
菜鸟学Spring Boot——简单到令人发指的CRUD
前情提要上回书说到,用Spring Boot写了一个Hello World小例子,那么今天就来完成上篇结尾留下的增删改查的实例。软件环境Windows 10JDK 11IDEA 2018.2Maven 3.5.4MySQL 8.0.12代码pom文件中需要添加一下依赖:&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springfra原创 2018-10-16 09:59:52 · 1318 阅读 · 1 评论 -
菜鸟调错——Spring Boot+JPA方式报错:MappingException: Could not get constructor for org.hibernate.persister
文章目录错误信息软件版本错误背景前提推理可能遇到的一些问题结束错误信息018-10-04 15:58:02.540 ERROR 4572 --- [ main] o.s.boot.SpringApplication Application run failedorg.springframework.beans.factory.BeanCreationException: Error cr...原创 2018-10-10 14:00:53 · 2803 阅读 · 14 评论 -
菜鸟带你看源码——看不懂你打我ArrayList源码分析(基于java 8)
文章目录看源码并不难软件环境成员变量:构造方法核心方法看源码并不难如何学好编程?如何写出优质的代码?如何快速提高自己的编程能力?等等一系列的问题下面,我们通常都会看到一个相同的答案——看源码。But,每次点开JDK的源代码,不到五分钟就又关上了。为啥呢?因为看不懂,因为太枯燥等等。总结成一句话就是——看源码是一件很痛苦的事情。其实,之所以觉得看源码很痛苦,看不下去,不是因为源码太难。其实写J...原创 2018-10-23 11:25:57 · 3432 阅读 · 7 评论 -
菜鸟学习JVM——分代回收
分代回收上篇文章介绍了几种垃圾回收的算法,但这些算法当中并没有一个是完美的,可以代替其他所有算法,他们各自有各自的优势。因此JVM需要根据垃圾回收对象的特性,选择合适的回收算法。JVM中大部分对象的生命周期非常短,朝生夕灭;还有一些对象,他们的生命周期很长,有的甚至长生不老、寿与JVM齐。于是就有了分代的概念。分代新生代(Young Generation) +Eden +原创 2016-05-24 14:56:21 · 7842 阅读 · 12 评论 -
菜鸟学设计模式——小单例有大秘密
单例模式大家并不陌生,也都知道它分为什么懒汉式、饿汉式之类的。但是你对单例模式的理解足够透彻吗?今天我带大家一起来看看我眼中的单例,可能会跟你的认识有所不同。下面是一个简单的小实例://简单懒汉式public class Singleton { //单例实例变量 private static Singleton instance = null; //私有化的构造方法,保证......原创 2013-06-17 08:58:56 · 21746 阅读 · 179 评论 -
菜鸟好文推荐(十五)——9个基于Java的搜索引擎框架
在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广告骗子)。那么如果在你自己开发的网站系统中需要能让用户搜索一些重要的信息,并且能以结构化的结果展现给用户,下面分享的这9款Java搜索引擎框架或许就可以帮助到你了。1、Java 全文搜索引擎框架 Lu原创 2015-08-31 22:24:57 · 4973 阅读 · 3 评论 -
菜鸟译文——JDK6和JDK7中substring()方法的对比
substring(int beginIndex, int endIndex)方法在JDK6和JDK7中是不同的。了解他们的区别可以让我们更好的使用这个方法。方便起见,以下用substring() 代替 substring(int beginIndex, int endIndex)。 1. substring()做了什么?substring(int beginIndex, int en...翻译 2015-03-31 22:55:33 · 1674 阅读 · 7 评论 -
菜鸟学JS——JS在文本域光标位置插入文本
很久没有写关于JS的博客了,说实话,对于JS小弟仅限于会简单使用的程度。作为一个非前端人员,个人觉得更好更深入的掌握JS还是很有必要的。这不仅仅可以提高自身价值,更重要的是很多情况下使用JS可以更好的解决问题,带来更好的用户体验。扯得稍微远了一些,回归正题,今天跟大家分享一个很实用的小实例——在光标处插入文本。 JS代码: function insertAtCursor(myF...原创 2015-09-30 22:51:23 · 11618 阅读 · 5 评论