
Java
文章平均质量分 64
广州接入
毕业于北京交通大学计算机系,一直从事企业应用开发,有十多年的SaaS平台产品研发经验。擅长系统架构,需求分析。
展开
-
对Java的一点看法
这段时间没事的时候写写Java,当然,工作还是用C#,虽然在很多资深Java人士看来,还远远不够.但说实话,我对此不以为然.能解决问题的东西,其实与语言本身是没有多大关系的.我也一直想写一些编程要点学习系列的东西,但因为比较懒,一直都是只有想法,没有行动(后面应该会写).下面是对Java的一点看法,也希望大家指正(这篇文章主要是写给那些想多了解几门语言,同时没有语言控的同仁):1)Java 真正的原创 2012-12-12 12:03:48 · 2703 阅读 · 0 评论 -
吐槽一下Java的不友好
整体来说,Java和C#可以算作是非常近亲的语言,基本架构其实都差不多。最近在做Java的框架,框架基本做完(后面我会开源这个项目),今天来吐槽一下Java语法的不友好度(开发工具就不要对比了,VS确实是宇宙第一):1) 属性 C#类的成员分域,属性和方法,Java没有属性的概念,本质上Java的域+访问器就等于C#的属性,但方便度真的不如C#,C#的语法非常简洁:property ...原创 2019-02-16 10:19:19 · 3312 阅读 · 6 评论 -
Springboot获取应用的上下文(记录)
获取应用的上下文ApplicationContext实例非常有用,因为底层代码需要获取一些配置信息和Bean.这可以大大的增加底层的灵活性,下面代码是参照别人所写: import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import or...原创 2019-02-10 23:20:02 · 3798 阅读 · 0 评论 -
Java后端开发MVC的一点小疑问
最近参与一个项目,采用的是Springboot+mybatis,我按照mvc模式做了一个简单的框架,我的实体Bean是可以到控制层的,也可以直接通过json转换传递给前端,当然,前端传回的Json数据也会在这里转换成实体bean(如果需要),然后调用业务逻辑层进行业务逻辑处理,结果,合作方说不允许这样做,他们要求业务层的实体Bean,不能传递到控制层,这中间都用Map来传递数据,当然,他们甚至把r...原创 2019-02-17 22:04:09 · 1102 阅读 · 0 评论 -
Java开发框架基本完成
前面的文章说了,准备搞一个java的快速开发框架,主要的架构是:springboot+mybatis,但实际上,除了注解和jdbcTemplate之外,基本抛弃了Mybatis的功能,当然为了兼容,原来的模式也可以用。底层是基于mybatis的一个简单ORM系统,这个已经在项目中用了,之所以不用mybatis的那套,主要目的一时方便,二是为了后面扩展,为做类hadoop那种数据访问模式打个基础,便...原创 2019-02-27 23:55:43 · 1643 阅读 · 1 评论 -
Spring,Mybatis等框架的局限性
任何事情都是两面性的,Spring类框架提供了一些基本的功能(特别是程序管理功能,包括Bean,事务,连接池),为系统的搭建和开发提供了很大便利性,但同时也失去了灵活性和可控性,特别是对于开发人员来说,这种可控性是很致命的。Spring的这种管理功能大多依赖于配置文件,但现代系统开发,特别是分布式系统来说,配置应尽量数据库化,而不是文件化,还必须配合预编译。hibernate由于其内存数据库风...原创 2019-02-25 09:08:56 · 1278 阅读 · 0 评论 -
开发中规范的目的是什么?
Java开发规范中实体类的方法是开头单词小写,属性也是一样,采用的是驼峰命名,严格的来讲,这只是的推荐规范,但问题是这个规范形成的时候还没有目前的这种三层模式,因此这个规范中有些规定是不适合目前开发的,对于非数据库实体来说,这个规范没有问题,而对于数据库实体来说,其实是不合时宜的。原因非常简单,一般数据库都是不区分大小写的(注意不是数据库数据,只是指数据库表名,字段名这些),为了保持一致性,数据库...原创 2019-02-20 07:35:55 · 5154 阅读 · 0 评论 -
Java 开发吐槽说明
我只是对比了一下C#和java开发的语法,没有说谁高谁低,因为对我来说,开发语言只是个开发工具,我即不是C#迷,也不是Java迷,Scala,php,python,.....用过很多的语言,其实语言的底层逻辑都是一回事情,当然,在语法和语言库上有差异,效率也肯定有差异,但这不是核心的问题,核心的问题就是你用熟,有效率就行。不过Java和C#确实太相似了,因为最近两种都在用,我经常是互相拷贝代码...原创 2019-02-20 07:44:32 · 1150 阅读 · 0 评论 -
应用集成和微服务
系统庞大的时候,放在一起开发也好,部署也好,肯定是会有问题的,所以,就出现了子系统,后来又出现了SOA,所谓的面向服务。但到现在,由于网络带宽的提升,BS架构很流行,当然,另外一个方面,现在系统面临的吞吐也大了很多。到现在流行微服务。这种演变的本质就是系统功能太大时,需要拆分,这里面,实际上还有一个因素就是一个系统功能部署在一台服务器上所面临的计算能力问题,这种情况下需要进行分布式处理。分布式处理...原创 2019-03-01 14:51:12 · 1338 阅读 · 2 评论 -
Java用字符串做同步对象的注意事项
很多时候用字符串做线程同步变量是非常具有一定优势的,可以动态利用业务数据来进行。但字符串在很多编程语言中的处理都是比较特殊的,因此需要注意,我们认为的字符串相等,可能实际上在内存中是不相等的,这对于java和c#来说尤其如此。字符串是放在堆里面还是栈里面有很大的区别。记住,在Java中用字符串做同步,一定要用如下用法:String theSychString =("LOADVALUESXXX...原创 2019-03-16 00:51:10 · 1255 阅读 · 0 评论 -
坑爹的mybatis+mysql
因为分布式框架,虽然用了mybatis,但底层进行了比较大的修改,在开发环境下,没问题,发布到测试环境,居然碰到了有些表不自动提交事务(默认的链接都是自动提交事务),但在其它表进行操作后,数据又提交了,大致如下:1)A表插入数据(执行一个插入语句,没有事务,自动提交);当前界面可以看到数据(另外一个查询链接),但在后台数据库无法看到数据;2)B表插入了一条数据,后台可以看到数据,而且A表的...原创 2019-07-03 18:18:12 · 892 阅读 · 0 评论 -
Mybatis用Connection进行数据操纵的注意事项
最近做底层遇到了很多坑,记录如下(有些内容来自网络,标记):注意: 使用DataSourceUtils.getConnection(dataSource);方式获取连接,而不是dataSource.getConnection()。dataSource.getConnection()会取到非当前线程的连接导致和当前线程的事务中的连接不相同导致事务不生效的问题。mybatis插入语句结合...原创 2019-07-03 18:29:17 · 2692 阅读 · 1 评论 -
坑中坑:Datasource ,Connection,pooledConnection
昨天使用了DatasourceUtil.getConnection(),结果出现了悲剧,在我的电脑上没问题,在其它同事的电脑上都出现了从连接池获取的连接已经关闭的错误,经过分析,原因就是这个方法优先是获取同一个池子同一个进程的连接,而连接已经被我关闭了。要用这个方法,就必须使用对应的释放方法:DatasourceUtil.releaseConnection.由于我的处理机制,非事务方法不好处理,所...原创 2019-07-04 08:16:56 · 2743 阅读 · 1 评论 -
DotNet写Java的小坑
用多了DotNet,把代码移植到Java,发现substring的参数不一样,前者是开始和长度,后者是开始和结束,小坑一个。原创 2019-06-29 12:30:09 · 878 阅读 · 0 评论 -
SpringBoot的Json转换大小写的坑
最近搞了一个Springboot+mybatis的框架,往前端进行Json格式转换的时候,发现属性的大写首字母变小写了,这极大的不方便前后一致性,如是网上一堆乱搜,测试了N多情况,算是把问题解决了,不过坑大,记录如下:1) 如果没有使用fastjson(阿里巴巴出品),使用@JsonProperty("XXXX")的注解方式可以解决问题,XXXX就是转换成Json的属性名,但注意,只有放在ge...原创 2019-02-16 00:01:10 · 10664 阅读 · 2 评论 -
Java小坑
最近学习Spark的Scala编程,需要时间处理,用的还是Java这套,在做时间转换成Unix时间戳的时候,发现在Java中,获取某天是getDate,而不是getDay.getDay是获取星期几,害得我调试了小半天才发现是这里错误导致我的程序结果有问题,微软系的转过来估计都有这个错觉。val theNow = new Date()val theSDate = DateAddHelper(theN原创 2016-10-05 08:09:50 · 1741 阅读 · 0 评论 -
Spark学习(2)
昨天安装完成,起床后抄了个简单的单词计数,单机版运行成功,从Java和Scala两种语言比较来看,Scala在做Spark开发的时候确实要简练很多:/** * Created by tsq on 2016-07-17. */import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;impo原创 2016-07-17 12:28:18 · 6326 阅读 · 0 评论 -
Java学习笔记(方法重载)
static void f3(short x) { prt("f3(short)"); } static void f3(int x) { prt("f3(int)"); } static void f3(long x) { prt("f3(long)"); } static void f3(float x) { prt("f3(float)"); } static void f3原创 2012-12-29 22:44:32 · 2514 阅读 · 0 评论 -
Java学习笔记(对象的释放)
对于基本类型变量来说,因为都被分配在内存栈中,因此释放不是问题,而且都会被及时地释放.但对于引用类型来说,就不一样了.Java提供了基本的对象内存回收机制-垃圾回收器.下面看看如何工作:首先我们必须了解一点,引用类型的变量和基本类型的变量一样,都是被分配到内存栈里的,只是引用类型的变量在栈中保存的是一个引用地址(指针),该引用地址所指的堆内存就是实际的对象存放区。Java的垃圾回收器对于Java程原创 2013-01-06 08:30:54 · 7027 阅读 · 0 评论 -
Java学习笔记(成员变量初始化补充)
为了进一步理解类的初始化过程,这里有必要进一步区分一下类的实例化(类实例)和类的对象实例化(对象实例),我们通常所说的实例化都是指对象实例化。我们可以把类的使用简单分为三个过程:类加载,类实例化,对象实例化。类的加载:由Java虚拟机根据需求将要用的类加载到内存中,让类的代码处于可用状态;对于解释型虚拟机来说,这个代码就直接可解释执行,而对于采用即时编译(JIT)技术来说,虚拟机一般会在方法第1次原创 2013-01-09 09:36:59 · 2228 阅读 · 0 评论 -
Java学习笔记(类的可见性)
1)类的可见性:public;友好的(无关键字);protected;private; public:公开类,在包内,包外都可见,是可见性级别最高的; 友好的:也是默认的安全级别,包外不可见,包内可见.用在内部类同protected级别相同. protected:保护级,只能用于内部类.对类及子类(包内子类,包外子类不可见)和包内其它类可见. private:私有级,只能用于内原创 2013-01-06 08:36:59 · 10067 阅读 · 2 评论 -
Java学习笔记(成员变量的初始化)
类的初始化包括实例成员的初始化和静态成员的初始化:1、静态成员变量的初始化 静态变量的初始化方法: A)直接赋值 public static String variableA="hello",//当然也可以调用方法或者其它变量来赋值,但必须满足前向引用的原则. B)在静态从句中写赋值语句:static{//初始化语句块} 其中直接赋值触发原创 2012-12-29 22:44:09 · 4067 阅读 · 0 评论 -
Java学习笔记(异常处理)
1) 异常处理机制 在程序运行过程中,如果某条语句执行出现意外(比如,零除错误,IO错误等),那么Java的虚拟机就会停下,不会继续执行后续的语句,而是由里到外(因为一个方法内部,异常捕获是可以嵌套的),沿被调用关系寻找异常处理模块,如果:A) 最终找到异常处理模块,则转而执行异常处理模块中的语句,异常处理语句执行完成后,则继续执行异常处理模块的后续语句(可能是finally模块),如下:p原创 2013-01-08 09:36:33 · 2194 阅读 · 0 评论 -
设计方法(间接法与软件设计模式)
从更高的层次来思考设计模式其实就是方法论的范畴,对于现在流行的软件设计模式来讲,对其介绍的出发点大部分都处在程序设计层面.设计模式本身属于方法学层面,是人们在对现实世界的认知和改造过程中总结而来,因此,这些方法无论是在软件设计还是硬件设计,甚至是其它领域的设计都是适用的,是跨学科和跨领域的方法学. 现实世界的对象之间的关系是非常复杂的,在4维空间下,对于对象之间的关系可以简单的分为静原创 2013-01-11 08:52:34 · 2260 阅读 · 0 评论 -
一个领导者选举算法
根据Matrix67的"囚徒与灯泡"文章而写:public class Wakeup { static class People { //记录第一次进入时确定的位置 0未确定,-1 左边 1右边. public int Position; //手上的球 public int BallNum; //标识 public int Id; //是否还在参与跷跷原创 2013-01-26 23:56:57 · 4572 阅读 · 0 评论 -
Java学习笔记(事件,内部类)
Java目前来讲不支持委托,就是方法的回调.而要达到这种功能,需要用到对象回调.虽然Java提供了匿名对象可以在一定程度上简化事件处理对象的编写,但由于一些接口方法很多,如果用命名对象或者匿名对象来处理事件的话,就需要实现这个事件接口的所有方法,而大多时候其实只需要实现其中某个或某几个方法就可以,采用直接实现接口的方式就会增加工作量,接口一多还会使得事件接口处理编程看起来很混乱,很复杂,因此用事件原创 2013-02-01 09:29:13 · 2240 阅读 · 0 评论 -
终于调通了SSH.
花了1天多时间,终于调通了一个SSH应用,终于完成了SSH的一个简单的增删查改,中途经历曲折,连Eclipse,Tomcat都重装几次.感觉SSH好强大,一个简单的问题在一种宗教般的信仰(脱耦)下整成了一套如此复杂的体系,确实不容易.Spring刚开始时的IOC,还只是简单类构建,现在连属性都能关联创建,够强大,但如果逻辑复杂点呢?做项目就变成了做配置.Hibernate的注解映射,比起xml映射原创 2013-04-29 13:47:56 · 2964 阅读 · 1 评论 -
EasyUI杂记
年纪大了,遇到的东西记录一下,原创 2014-11-12 14:40:18 · 2162 阅读 · 0 评论 -
Java学习笔记(泛型)
泛型是一种代码级的有效复用手段,理解泛型的机制有利于更好的编写程序.1) 泛型类package generictest;public class MyA {public MyA(){}public String Name;public String ReturnName(){return Name+"hello";}}package generictest;public class MyB ext原创 2012-11-24 18:44:38 · 4143 阅读 · 0 评论 -
Android页面事件挂接模拟
Java没有C#的引用类型,因此事件的挂接一般都是利用接口来实现,有两种方式:1)定义一个实现事件接口的类,然后实现接口方法,然后通过将这个类的实例添加到事件监听器里面: public class OnClickListenerHdl implements View.OnClickListener { @Override public void onClick(Vi原创 2015-07-12 16:09:26 · 2251 阅读 · 0 评论 -
Spring框架注解式事务的缺陷
事务基于连接(Connection)是基本的,由于Spring框架里,类实例的创建都是框架完成,参与事务的方法之间没有连接的传递,因此要保证事务的执行,就只能采用其它的方法,Spring框架采用的是将一个线程中执行的标有事务注解的数据库操作采用一个连接来达成事务处理的目的,优点是简单,不用程序员操心。但实际上这种事务处理方式有非常大的局限性:1)如果一个线程中有多个不同的事务很难处理;2)...原创 2019-07-06 18:51:38 · 1297 阅读 · 0 评论