即使Java方法说明文档说是线程安全的,不代表就多线程下的线程操作肯定安全,还是会遇到同步问题的。比如Vector,对比ArrayList是一个线程安全的类,但是不恰当的操作,还是会有问题,下面的代码中,Vector中放了10000个数字,有20个线程,循环删除这个列表中的最后一个数字。运行的时候,很大的概率会出现java.lang.ArrayIndexOutOfBoundsException的异
C#中的泛型有时会被人吐槽不支持void。试了一下Java的泛型,发现泛型参数类型中,Void(不是void)是支持的,编译不报错。但是真的的写方法的时候,还是要输入返回值。比如下面的代码@OverridepublicVoidcall(){returnnull;}你不得不返回一个null,不然编译会不过的。所以说,Java泛型虽然支持了Void,但看上去就是一个假象。
用久了C#中的DateTime类型之后,再用回Java中的时间类,真是一种痛苦的事情。Java8之前,Date类就以其糟糕的设计,被人吐槽,比如最简单的初始化日期的方法,会出现反直觉的结果,比如Datedate=newDate(1980,12,25);它的真实日期是WedJan1200:00:00CST3881这种不可思议结果。当然,它也是有一种算法的,是1900+1980+1导致的,至于为啥是这
51CTO博客开发李涛的技术专栏不胜人生一场醉beniao我不是AI点亮代码
Controller中,回填到模板的的一个数据类型是Calendar,在前端显示的时候,直接显示会报错,比如模板中这样写${submitDate},会出现如下的错误: java.util.GregorianCalendar[time=-2209017600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=java.util.
FreeMarker中调用Java后台中的方法。 需要在Controller传回模板的时候,把该方法的类进去,类似如下的方法: model.addAttribute("freeMarkerHelper", new FreeMarkerHelper()); model.addAttribute("myController", this);this参数为当
Controller响应,喷出图片,是一个很常见的功能,代码如下@RequestMapping(value = { "/img/{filename:.+}" }, method = RequestMethod.GET, produces = { MediaType.IMAGE_JPEG_VALUE,
thymeleaf中使用layout功能,根据官方的文档,看上去非常的简单,但是就是各种搞不定。百度谷歌都没能查到有效的方案,有些方案是需要再写代码配置。 直到后来我在pom文件中更新的Thymeleaf的版本,才搞定。 原来我开发的时候,是从springboot官网http://projects.spring.io/spring-boot/#quick-start上下载了一个工程文件,这个工
最近流行语又多了个微服务,事实上已经流行蛮久了。对于微服务的概念,其实业界并没有给出明确的定义。只是罗列了几个微服务的特征,比如:独立部署组件化,按业务或者服务的功能来划分粒度低易于部署,快速部署去中心化......还有其它的一下特征,一时枚举不全,因为各个文章都有自己的解释。但是我读了个大概,发现个名词和SOA并没有什么大不同,硬是要有什么不同点,那就是原先早起的SOA还依赖于ESB这种东西,而
敏捷编程的概念出来已经很久了,期间涌现出了很多名词,什么XP啊,Scrum啊,被很多人所推崇。我想说的是TDD这个东西,也是被很多人认为是保证软件质量的法宝,一旦选择了TDD方式,就自动的获得了设计代码的能力,这其实只是一种假设,不是一种必然。我觉得这些都是错的,不要认为TDD了,就能解决现在的问题。首先,TDD意味着还未开发就要写大量的测试用例,这本来就是和敏捷开发的初衷是违背的,因为写大量的测
在重构一个结构繁杂,代码逻辑千丝万缕的业务系统时,除了对代码层面的重构之外,很多人会忽视对于业务结构的重构和简化。目前正在遭遇着这个事情,一个异常复杂的系统,不断的在上面添加需求,代码量增大,函数的体积也在增长,Web服务也越来越臃肿。关于代码层面的解耦,方法论很多,但本质上就是“提取公因式”,即相同的代码不要写两遍。通常,良好模块的模块设计,很容易达成这种只写一次的目标。还有的复杂度就是模块之间
很久没更新博客了,因为太忙了。没什么时间写东西,也好久没学习新的东西。
前端传到Controller:方法1通过HttpServletRequest 。写法如下:@Controller public class MyTestController { @RequestMapping("/print") public String PrintInfo(HttpServletRequest request)&nbs
由于进制的关系,十进制下的大多数小数,在二进制下无法完美的表示,只能表示为无限循环小数。比如0.5可以表示为0.1,0.4则只能表示为0.011001100110......十进制小数转换成二进制小数的方法,可以通过对小数部分乘2法来实现,比如:0.40.4 *2 0.80.8 *2 &nbs
javascript中java语言不一样,它没有类这个说法,更没有子类父类一说,所以它所谓的继承机制,也是和其他语言完全不同的。创建对象三种方式1.最简单的方式,创建一个object对象,然后为它添加属性和方法var person=new object(); person.name="zhangsan"; person.age=20; person.sayName=functi
IT圈一直有轮回,一开始说某某某东西非常好,似乎出现了救世主,依靠它能解决一切问题,再过段时间,用的人多了,就慢慢出现异样的声音,再过段时间很多人就开始提出反对的口号,甚至全盘否定。设计模式就是这么一个概念。十多年前,国内的软件开发还处于粗犷式的野蛮发展阶段,各种码农写各自的代码,码农之间经常看不懂对方在写什么东西,同时又互相轻视对方的代码水平。直到有一天,不知哪冒出来设计模式这一术语,顿时天亮了
相同点:都采用了分代的机制。都支持并发GC。都没有采用引用计数方式,而是采用了追踪技术。.NET中,可以通过代码GC.Collect() 强制要求CLR进行垃圾回收(由于垃圾回收是异步的,CLR有一个专用的线程负责垃圾回收,因此,即使调用GC.Collect,也并不是实时的调用了Finalize,因此要保证确实调用了析构方法,可以使用语句GC.WaitForPendingFinalizers()来
当初看文档的时候,了解到.net CLR中的Background GC机制,它类似于并发GC,当使得在做GC动作是,能够同时进行内存分配。这种机制显著的减少的stop the world这种事情,使得GC的干扰最小化。 当初认为.net这招非常优秀,足以鄙视JAVA,前几天看JVM的书,发现JVM也有类似的机制,但是不叫后台线程,而是称作CMS(Concurrent Mark Sweep)。
C#有统一的类型系统,所有的类型包括原始类型(int,bool,short,long等类型)都继承于Object类。 Java略不同,它的原始类型不是继承于Object,每个原始类型都有对应的包裹类(继承于Object),比如int的包裹类Integer C#有无符号整数,uint、ulong、ushort Java没有 C#没有高精度的decimal
Servlet中可以把当前的请求和响应转发到另一个Servlet中,并由另一个Servlet负责输出响应。转发时,源Servlet会把它的ServletRequest对象和ServletRespnse对象都传递给目标Servlet。转发需要调用javax.servlet.RequestDispatcher接口的forward方法。转发的路径在生成RequestDispatcher实例的时候传入。有
经常看到各类文章中出现jdk1.5或者JAVA5,其实这都是指的同一个东西。 JAVA的版本最开始是1995年的JDK Alpha and Beta版本,第二年发布JDK1.0版本 之后就是JDK1.1,JDK1.2。到1998年,不再叫JDK了,而是叫J2SE,但是版本号还是继续延续下去。到了2004年,Sun公司又各种不爽了,按理J2SE1.5的版本,改名叫J2SE5.0了。之后又把J2S
Java中,单例模式通常有2种分类饿汉模式和懒汉模式。饿汉模式指的是单例实例在类装载时就被创建了。懒汉方式值的是单例实例在首次使用时才被创建。无论是饿汉模式还是懒汉模式,都是用了一个静态成员变量来存放真正的实例。并且私有化构造函数,防止被外部实例化。单例(饿汉模式)代码:public class Singleton {
参考刘鹏的《实战Hadoop》一书,按照hadoop 0.20.2几个注意的地方。 第一,首先理解Hadoop中的几个后台进程。 NameNode,Secondary NameNode,JobTracker,TaskTracker,DataNode这几个角色。 NameNode:负责如何切分数据块,和切完放哪个节点。它对内存和I/O集中管理。 这个进程部署在Master节点上,是一个单点,
八位的带符号的整数,比如JAVA中的byte,c#中的SByte,为什么值域范围都是-128-127而不是-127~128? 事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号数的范围是-127~127,它的一个缺点是0是有正负。它用一位表示正负数,然对剩余的位数采用取反。 比如,0111 1111表示127,那-127的则是1000 0000。0000 0000表示正
关于一致性哈希算法,网上有很多博文都有讲解。推荐2个。http://blog.codinglabs.org/articles/consistent-hashing.htmlhttp://blog.csdn.net/cywosp/article/details/23397179总结一下:网上博文的例子都将hash值的结果定义在0 - 232-1,实际上也是非必要的,你可以设定的比这个范围小,或者比这
看到Stackoverflow上有个问题在讨论Java和Python的对比,其中就有人问答为啥Java的运行环境被称之为JVM,而Python的只能叫做Interpreter。这个问题估计想过的人不多,先找维基百科看一下虚拟机的定义。虚拟机的定义有2个,一种是类似Vmware的系统虚拟机,另一种是虚拟机称之为程序虚拟机,诸如JVM,CLR就是最常见到的虚拟机。程序虚拟机也称作托管运行时环境,运行这
C#中的字符串驻留熟悉.NET的人都应该知道C#中的字符串驻留机制,.NET维护了一个驻留池,它会把在编译期间就相同的字符串只保留一份拷贝。如果仅在运行期间值才相同的字符串变量,.NET不会为这个2个相同的字符串变量指向同一份引用的。不过.NET提供了一个方法,让开发人员可以强制将两个相同的字符串指向同一个引用,使用String类中的Intern方法。string s1 =&n
根据同源策略,浏览器默认是不允许XMLHttpRequest对象问非同一站点下的资源的,即用ajax方式访问非同一域名下的资源会出错。比如当google要通过ajax去访问百度的数据,是不行的。所谓同源,是要求协议,域名,端口都相同。比如 http://www.aaa.com 和下列URL相比,都不属于同源。https://www.aaa.comhttp://www.aaa.com:8080htt
CD,DVD使用的ISO9660文件系统,ISO9660,也称作CDFS(光盘文件系统),是国际标准化组织(ISO)为光盘媒介发布的文件系统。其目标是能够在不同的操作系统,如Windows,Mac OS以及类Unix系统上交换数据。Linux系统上使用CD,需要执行挂载操作(桌面版大多会自动帮用户挂载了)。1,侦测CD/DVD-ROM驱动器首先,要找到可用的设备,即在Linux系统找到光驱,通常使
通过Latex语法,实现生成数学公式的解决方案也很多。这里介绍一种方法,使用开源的mimeTex。该项目的官网地址如下:http://www.forkosh.com/mimetex.html网站主页有一个声明。如果你的服务器上已经安装了latex,那么推荐使用mathTex,因为mathTex基于真正的Latex,并且显示的图像质量高于mimeTex。但是mathTex只能在linux环境部署,并
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号