***Java多线程发展简史

http://blog.jobbole.com/28297/本文来自四火的博客(@RayChase),由@_Zhijun 推荐这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的KnowledgeSharing的一个整理,我希望能对Java从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并且提及一些在多线程编程方面常见的问题。对于Java程序员来说,如果从历史的角度去了解一门语言一个特性的演进,或许能有不同收获。引言首先问这样一个问题,如果提到Java多线程编程,你会想到什么?●volatile、synchronized关键字?● 竞争和同步?● 锁机制?● 线程安全问题?● 线程池和队列?好吧,请原谅我在这里卖的关子,其实这些都对,但是又不足够全面,如果我们这样来谈论Java多线程会不会全面一些:1.模型:JMM(Java内存模型)和JCM(Java并发模型)2.使用:JDK中的并发包3.实践:怎样写线程安全的代码4.除错:使用工具来分析并发问题5.……可是,这未免太死板了...

***JAVA多线程和并发基础面试问答

线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)1.进程和线程之间有什么不同?一个进程是一个独立(selfcontained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。2.多线程编程的好处是什么?在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态。多个线程共享堆内存(heapmemory),因此创建多个线程去执行一些任务会比创建多个进程更好。举个例子,Servlets比CGI更好,是因为Servlets支持多线程而CGI不支持。3.用户线程和守护线程有什么区别?当我们在Java程序中创建一个线程,它就被称为用户线程。一个守护线程是在后台执行并且不会阻止JVM终止的线程。当没有用户线程在运行的时候,JVM...

***Java 多线程 并发编程

一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进进程锁拥有的内存和其他资源。2、Java标准库提供了进程和线程相关的API,进程主要包括表示进程的java.lang.Process类和创建进程的java.lang.ProcessBuilder类;表示线程的是java.lang.Thread类,在虚拟机启动之后,通常只有Java类的main方法这个普通线程运行,运行时可以创建和启动新的线程;还有一类守护线程(damonthread),守护线程在后台运行,提供程序运行时所需的服务。当虚拟机中运行的所有线程都是守护线程时,虚拟机终止运行。3、线程间的可见性:一个线程对进程中共享的数据的修改,是否对另一个线程可见可见性问题:a、CPU采用时间片轮转等不同算法来...

JAVA面试题:69道Spring面试题和答案

Spring概述依赖注入SpringbeansSpring注解Spring数据访问Spring面向切面编程(AOP)SpringMVC1. 什么是spring?Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的好处是什么?轻量:Spring 是轻量的,基本的版本大约2MB。控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring 包含并管理应用中对象的生命周期和配置。MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务...

JAVA试题:equals()方法和== 区别

http://bbs.csdn.net/topics/390000725 总结:equals在没重写之前和==一样,重写之后,equals只要内容一样即为trueequals跟==一般情况下是等价的,但是对于String类型,它重写了equals方法,比较的是内容。默认情况下两个都是比较的引用地址,除非你重写equals方法。 equals源码:publicbooleanequals(ObjectanObject){if(this==anObject){returntrue;}if(anObjectinstanceofString){StringanotherString=(String)anObject;intn=count;if(n==anotherString.count){charv1[]=value;charv2[]=anotherString.value;inti=offset;intj=anotherString.offset;while(n--!=0){if(v1[i++]!=v2[j++])returnfalse;}returntrue;}}ret...

JAVA试题:Spring中bean的生命周期

Spring中bean的生命周期短暂吗?在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题。然而在spring中可以设定每次从BeanFactory或ApplicationContext指定别名并取得Bean时都产生一个新的实例:例如: 在spring中,singleton属性默认是true,只有设定为false,则每次指定别名取得的Bean时都会产生一个新的实例一个Bean从创建到销毁,如果是用BeanFactory来生成,管理Bean的话,会经历几个执行阶段(如图1.1):  1:Bean的建立:容器寻找Bean的定义信息并将其实例化。2:属性注入:使用依赖注入,Spring按照Bean定义信息配置Bean所有属性3:Bean...

JAVA试题:String 堆内存和栈内存

java把内存划分为两种:一种是栈(stack)内存,一种是堆(heap)内存 在函数中定义的一些基本类型的变量和对象的引用变量都在栈内存中分配,当在一段代码块定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用 堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由jvm(javavirtualmachine)的自动垃圾回收器来管理,在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象 具体地说:栈和堆都是java用来在Ram中存放数据的地方,与c++不同,java自动管理栈和堆,程序员不能直接地设置栈或堆。 java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray、multiane...

Java中常用的加密方法(JDK)

加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些资料将加密直接分为对称加密和非对称加密)。 双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文。而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密的一种,应该算是摘要算法吧。具体区分可以参考: (本人解释不清呢……) http://security.group.iteye.com/group/wiki/1710-one-way-encryption-algorithm 一、双向加密 (一)、对称加密 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 需要对加密和解密使用相同密钥的加密算法。由于其速度,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。&...

JAVA实现AES加密

       上次介绍了《JAVA实现DES加密》,中间提到近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密。闲话少许,掠过AES加密原理及算法,关于这些直接搜索专业网站吧,我们直接看JAVA的具体实现。2.1加密代码有详细解释,不多废话。/**  * 加密  *   * @param content 需要加密的内容  * @param password  加密密码  * @return  */  public static byte[] ...

前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍前端自动化,这样的一个名词听起来非常的有吸引力,向往力。当今时代,前端工程师需要维护的代码变得及为庞大和复杂,代码维护、打包、发布等流程也变得极为繁琐,同时浪费的时间和精力也越来越多,当然人为的错误也随着流程的增加而增加了更多的出错率。致使每一个团队都希望有一种工具,能帮助整个团队在开发中能精简流程、提高效率、减少错误率。随之讨论自动化部署也越来越多,并且国内很多大型团队也都有自己成熟的自动化部署工具。据我所知,百度有FIS,腾讯有Modjs,360有燕尾服,还有很多团队在使用Ant,Shell等,而现在讨论较多的是Grunt。在平常的工作之中,我们都不断的在重复着做相同的事情,比如说将Sass编译成CSS,检测JavaScript语法,压缩CSS、JavaScript。特别在团队合作开发中,常常会为了各自的习惯而不断的发生麻烦,给开发带来极大的不便。而且前端开发人员在周而复始的做这些相同的,乏味的事情。很多时候我们想工作变得更有意义,更能专注于开发,就希望有一种工具能让我们不去做这些重...

30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类

30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类包括Python、C++、Java、JavaScript、R、Haskell等在内的一系列编程语言的深度学习库。一、Python1、Theano是一种用于使用数列来定义和评估数学表达的Python库。它可以让Python中深度学习算法的编写更为简单。很多其他的库是以Theano为基础开发的:Keras是类似Torch的一个精简的,高度模块化的神经网络库。Theano在底层帮助其优化CPU和GPU运行中的张量操作。Pylearn2是一个引用大量如随机梯度(StochasticGradient)这样的模型和训练算法的库。它在深度学习中被广泛采用,这个库也是以Theano为基础的。Lasagne是一个轻量级的库,它可以在Theano中建立和训练神经网络。它简单、透明、模块化、实用、专一而克制。Blocks是一种帮助你在Theano之上建立神经网络模型的框架。2、Caffe是一种以表达清晰、高速和模块化为理念建立起来的深度学习框架。它是由伯克利视觉和学习中心(BVLC)和网上社区贡献者共同开发的。谷歌的...

python实现文章或博客的自动摘要(附java版开源项目)

python实现文章或博客的自动摘要(附java版开源项目)写博客的时候,都习惯给文章加入一个简介。现在可以自动完成了!TF-IDF与余弦相似性的应用(三):自动摘要-阮一峰的网络日志http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.htmlidf.txt来自https://github.com/jannson/yaha/blob/master/yaha/analyse/idf.txtpython分词库中:https://github.com/jannson/yaha使用summarize3需要安装numpy库。GitHub-jannson/yaha:yahahttps://github.com/jannson/yaha基本功能:精确模式,将句子切成最合理的词。全模式,所有的可能词都被切成词,不消除歧义。搜索引擎模式,在精确的基础上再次驿长词进行切分,提高召回率,适合搜索引擎创建索引。备选路径,可生成最好的多条切词路径,可在此基础上根据其它信息得到更精确的分词模式。可用插件:正则表达式插件人名前缀插件地名后缀插...

JavaScript调试技巧之console.log()详解

JavaScript调试技巧之console.log()详解对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻断JavaScript程序的执行,从而造成副作用;alert弹出框需要点击确认比较麻烦,而console.log()仅在控制台中打印相关信息,因此不会造成类似的顾虑。最重要的是alert只能输出字符串,不能输出对象里面的结构,console.log()console.log()可以接受任何字符串、数字和JavaScript对象,可以看到清楚的对象属性结构,在ajax返回json数组对象时调试很方便。//兼容Firefox/IE/Opera使用console.logif(!window.console){window.console={log:function(){}};}window.console=window.console||{};console.log||(console.log=opera.postError); 下面分享两张打印出来的信息图片:php上传多文件conso...

javascript闭包(Module模式)的用途和高级使用方式

javascript闭包(Module模式)的用途和高级使用方式javascript闭包的用途:1.匿名自执行函数:或者可以理解为,避免污染全局变量2.缓存:源于闭包的核心特性便是保存状态,应用此特性便可对需要的变量进行缓存3.实现封装:同样可以使用闭包保存状态的特性,充当一个作用域块,将块里面的属性变量至于内存之中来实现封装4.闭包的另一个重要用途是实现面向对象中的对象,传统的对象语言都提供类的模板机制:原理同上。对于闭包的定义很多书籍都很模糊,个人认为比较准确的定义——闭包是函数的代码在运行过程中的一个动态环境函数和闭包要有非常清晰的对比——一个函数只是一段静态的代码、脚本文本,因此它是一个代码书写时,以及编译期的、静态的概念;而闭包则是函数的代码在运行过程中的一个动态环境,是一个运行期的、动态的概念。闭包作为与函数成对的数据,在函数执行过程中处于激活(即可访问)状态(通俗来讲,就是当执行到函数的某一条语句的时候,哪些对象能够被使用)。还有一点,就是闭包的实现方式——JavaScript使用作用域链来实现闭包,...

java,swift,oc互相转换,html5 web开发跨平台

java,swift,oc互相转换,html5web开发跨平台写一个java->swift的程序,这个程序是做跨平台系统的核心部分swift和oc到java也在考虑之列Swift->Java,能方便iOS移植到Androidjava的因为有eclipse,里面有个生成AST的library,所以ast不用自己做了swift的需要根据语义,弄ast,才能转。前端后端都需要弄也就是Android代码可以直接转swift代码,难点需要对java的sdk映射成cocoatouch,通过意译和直译两种方式有一个j2objc的,google的,和os没关系j2objc生成的代码,那叫一个乱,我就一个system.out.println("abcd"),生成了上百行代码这个生成的代码不是让你改的,是让你编译的,编译器认识就可以了转换后oc代码能正常显示修改,但看起来太费劲,跟反编译差不多了----------------------------------web就是天生的多平台web+ios+android+wp+。。。web用户体验不好,尽量优化关键是想怎么改就怎么改,随时上线,不用审...
首页上一页...568569570571572...下一页尾页