这是黄小斜的第102篇文章 作者 l 黄小斜 来源 l 公众号[程序员黄小斜](ID:AntCoder) 转载请联系作者(wx_ID:john_josh) Java从出生到现在已经走过了 20 多个年头,马上也要三十而立了. 近几年,大家应该也听过不少唱衰Java的论调,恰好最近这段时间,读者群里的小伙伴想让我写一篇关于Java前景分析的文章. 大家都很想知道,这个时候再进场学习Java是不是太晚了,是不是应该向新兴的语言(比如Python.Go)投怀送抱呢,又或者是,干脆直接放弃后端方向,改选…
java参数传递时到底是值传递还是引用传递(baidu搜集) 问”,很多人的BLOG里都引用这些面试题,最近因为工作内容比较枯燥,也来看看这些试题以调节一下口味,其中有一道题让我很费解. 原题是:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 用google查询结果,得到答案基本上是:值传递.当时觉得挺纳闷儿,为什么连参数的内容都被修改了,怎么还能说是“值传递”呢?因为在传统的印象里(尤其是从C++过来以后),值传递都应…
之前看了一篇关于"Java finally语句到底是在return之前还是之后执行?"这样的博客,看到兴致处,突然博客里的一个测试用例让我产生了疑惑. 测试用例如下: public class FinallyTest { public static void main(String[] args) { System.out.println(getMap().get("key")); } public static Map<String,String> g…
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过试验,至少有两种情况下finally语句时不会被执行的: (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到. (2)在try块中有System.exit(0);这样的语句,System.exit(0);是…
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的: (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到. (2)在try块中有System.exit(0);这样的语句,System.exit(0);…
这是javaeye上非常经典的关于线程的帖子,写的非常通俗易懂的,适合任何读计算机的同学. 线程同步 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等. 当多个线程同时读写同一份共享资源的时候,可能会引起冲突.这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团. 同步这个词是从英…
有很多人一直在说JAVA现在已经饱和了,已经没有必要学Java,程序员已经是严重过剩,行业人才竞争状况更是恶性的之类的云云.现实真是这样嘛? Java目前现状 首先,Java的应用可以说是无处不在,从桌面办公应用到网络数据库等应用,从PC到嵌入式移动平台,从Java小应用程序(Applet)到架构庞大的J2EE企业级解决方案,处处都有Java的身影,从银行.证劵的金融行业到阿里.京东等电商行业.移动.电信代表的通信行业至电.水.能源等公共服务行业,无一不是使用了Java来开发控制系统和相关软件.…
2018即将结束,迎来2019年,Java作为世界上 最流行的计算机编程语言,在当今信息时代中发挥了重要的作用.Java语言本身具有着自己独特的优势:面向对象.分布式应用并且安全.多线程.跨平台等.这使得Java语言成为许多应用系统理想开发语言. 不管是手机应用程序还是电脑程序,你在生活中每一次购物到每一笔支付成功,都离不开Java,越来越多的公司也正在采用Java语言开发网站,在所有程序员当中做Java开发的工程师比例相当高的,通常来说,具备3到5年开发经经验的Java工程师,年薪20万元是很…
随社会信息的发展着,java广泛应用于PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网等行业.从目前的招聘量上看,对java开发人才需求量是很大的,而且未来的仍然是主流,就业前景很好.只要你想学,有决心,有信心,什么时候都来得及.前不久,一位有Java开发经验的前辈讲到,Java开发语言是全球最流行的开发语言,无论是程序界还是整个互联网行业势必带来很大的影响.不管是人才需求还是薪资水平上,Java的发展前景都是很乐观的,如果我们真的能用心.努力的学好这门技术,那我们职业的发展也是前途…
被问到了这样一道面试题,当时就懵了,内心一直觉得C++肯定在很多方面要比C#或者java要牛b的. 但是真的不知道怎么回答. 问题是:你以前一直做得是.NET相关项目,现在为什么找C++开发相关工作呢? 1.性能? 2.跨平台? 3.开发难易程度? 4.大公司选择(还是回答题目了)? 真心请教下大家,C++到底牛b在哪里?为什么有时候必须用C++.(园子里以.NET居多吧,但是你们真的不觉得C++比C#牛b吗?) PS: 广州,最近雨一直下,窗外的雨声和音响里的音乐声交错在一起,为什么会有那么一…
这是javaeye上非常经典的关于线程的帖子,写的非常通俗易懂的,适合任何读计算机的同学. 线程同步 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等. 当多个线程同时读写同一份共享资源的时候,可能会引起冲突.这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团. 同步这个词是从英…
近日,微软的 Bruno Borges 在 OpenJDK 邮件列表中发布了一条消息,内容包含接下来发生的事情以及微软如何开始将其团队整合到 OpenJDK 社区. 在邮件中,Bruno Borges 提到,微软已正式签署<Oracle 贡献者协议>.同时,他重申了微软对 Java 的承诺,以及微软团队对回馈 Java 社区的期待. Borges 曾经是 Oracle 开发人员,现在担任微软 Java 的首席产品经理.他向大家介绍了 Java 工程团队负责人 Martijn Verburg,V…
关于JAVA项目中CLASSPATH路径详解 https://www.cnblogs.com/hibou/p/8324276.html java项目中的classpath到底是什么 https://segmentfault.com/a/1190000015802324 java项目中Classpath路径 https://blog.csdn.net/qq_36838191/article/details/81985012…
大家好,之前写(shui)了两篇其他类型的文章,感觉大家反响不是很好,于是我乖乖的回来更新硬核技术文了. 经过本系列前两篇文章我们了解到日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4j 仅仅是接口,实现方面, logback 与 log4j2 仍然难分高下,今天我们就来聊一聊,日志框架实现到底是该选择 Log4j2 还是 Logback.这篇文章我们将从功能.API 设计.可扩展性.性能四个方面展开讨论. 生态 老牌的 Log4j2 凭借着入场早.背靠 Apache 两大优势有…
Java 方法调用中的参数是值传递还是引用传递呢?相信每个做开发的同学都碰到过传这个问题,不光是做 Java 的同学,用 C#.Python 开发的同学同样肯定遇到过这个问题,而且很有可能不止一次. 那么,Java 中到底是值传递还是引用传递呢,答案是值传递,Java 中没有引用传递这个概念. 数据类型和内存分配 Java 中有可以概括为两大类数据类型,一类是基本类型,另一类是引用类型. 基本类型 byte.short.int.long.float.double.char.boolean 是 J…
Java 方法调用中的参数是值传递还是引用传递呢?相信每个做开发的同学都碰到过传这个问题,不光是做 Java 的同学,用 C#.Python 开发的同学同样肯定遇到过这个问题,而且很有可能不止一次. 那么,Java 中到底是值传递还是引用传递呢,答案是值传递,Java 中没有引用传递这个概念. 数据类型和内存分配 Java 中有可以概括为两大类数据类型,一类是基本类型,另一类是引用类型. 基本类型 byte.short.int.long.float.double.char.boolean 是 J…
如果你输入一个命令,比如java那么系统是如何找到这个命令的呢?按照顺序,系统先在当前目录搜索是否有java.exe, java.bat 等. 如果没有,就得到系统的PATH(不区分大小写)里面查找. 比如你的环境变量的PATH里面有 C:\program files\java\jdk1.6\bin那么 系统会尝试在这个目录下面查找,并且找到了 java.exe 那么就会执行它.所以 path 就是系统为了搜索某个资源而配置的一个参数. 多个目录之间用分号(linux里面用冒号)分割. 那么CL…
一.关键字new概述 "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的瞬间都做了什么? 在Java中使用new关键字创建对象变得很容易了,事实上,对这些事情你是不需要考虑的.需要访问一个文件吗?只需要创建一个新的File实例:new File("jdbc.properties"),对于大多数Java开发人员而言,这就是他们需要知道的一切,是不是很简单呢?!但当…
经历过很多面试大部分都会问一句: 你知道Java内存模型么?  然后我就pulapula的说一大堆什么堆呀,栈呀,GC呀什么的,这段时间把JVM虚拟机和多线程编程完整的学习了一遍,发现JMM和堆/栈这些完全不是一个概念,不知道是不是就是因为这才被拒了十来次的 /尴尬. JVM是Java实现的虚拟计算机(Java Virtual Machine),对于熟悉计算机结构的同学,我感觉把这些概念和物理机对应起来更好理解. JVM对应的就是物理机,它有存放数据的存储区:堆.栈等由JVM管理的内存(对应于物…
文本处理中经常有这样的逻辑: String s = new String(bts, "UTF-8"); 看String源代码,里面是一个char[],将bts按照某种编码方式,变成了char[],不经有个疑问: 使用UTF-8,UTF-16,ASIIC 等encode出来的char是相同的么?char是byte按照什么编码方式生成的呢? 简单的办法,是看java序列化的实现方式,char最后是怎么序列化到byte[]中去的. ObjectOutputStream oos = new O…
1.java.io.BufferedReader 和 java.io.BufferedWriter 类各拥有8192字符的缓冲区.当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取.如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中.如果缓冲区中的数据满了,才会一次对目的地进行写出. 2.从标准输入流System.in中直接读取…
为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储之前计算出的某一项的数据map<n, feibo(n)>,当后面项需要使用前面项的值时,只需要从map中取即可,递归的那个方法仅仅行了97次,耗时还不到1ms. 而这仅仅是计算第50项的值,再往大去计算的话,方案一耗时会更久,因为执行的次数是呈现指数增加的,而且递归的次数过多还有可能会出现栈溢出的…
内存模型 在计算机CPU,内存,IO三者之间速度差异,为了提高系统性能,对这三者速度进行平衡. CPU 增加了缓存,以均衡与内存的速度差异: 操作系统增加了进程.线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异: 编译程序优化指令执行次序,使得缓存能够得到更加合理地利用. 以上三种系统优化,对于硬件的效率有了显著的提升,但是他们同时也带来了可见性,原子性以及顺序性等问题.基于Cpu高速缓存的存储交互很好得解决了CPU和内存得速度矛盾,但是也提高了计算机系统得复杂度,引入了新…
依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \u0000 (0),最大值是\uffff(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个字符? char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (o…
在前面介绍Unsafe的文章中,简单的提到了java中的本地方法(Native Method),它可以通过JNI(Java Native Interface)调用其他语言中的函数来实现一些相对底层的功能,本文我们就来顺藤摸瓜,介绍一下jni以及它的使用. 首先回顾一下jni的主要功能,从jdk1.1开始jni标准就成为了java平台的一部分,它提供的一系列的API允许java和其他语言进行交互,实现了在java代码中调用其他语言的函数.通过jni的调用,能够实现这些功能: 通常情况下我们一般使用…
功能向上聚合 Abstract作为抽象类和抽象方法,第一种情况是在聚合子类的通用性上起到作用,往往出现在重构过程中自然而然形成的一种层次结构-希望将多个子类的通用方法和逻辑提取到父层的抽象类. 这种重构情况的最极致表现就是:若再加入新的子类,子类只需要实现抽象类的abstract方法,而且可能就只用几句话的简单声明,或者做一些属性设置就可以了,往往只是用于区分子类的特征,真正的逻辑处理实际上是在抽象类的方法内实现.这样就极大地简化了子类的代码逻辑量,实现子类层去耦合,抽象层高内聚的极佳效果 如下…
看过网上关于Java中异常捕获机制try-catch-finally块中的finally语句是不是一定会被执行的讨论也有很多. 首先明确一点,下面两种情况finally肯定是不执行的: 1). return语句在try之前,还没执行就返回了,当然不执行. 2). try语句中用了system.exit(0)强制退出JVM,暴力退出当然也不会执行. 先来看下面的代码 package com.loongshaw; public class TryReturnFinally { public stat…
6.总结性深一层次综合剖析接口概念[新手可忽略不影响继续学习] 通过以上的学习, 我们知道,所有定义在接口中的常量都默认为public.static和final.所有定义在接口中的方法默认为public和abstract.马克-to-win:当时Sun公司为什么要把java的接口设计发明成这样? 更多内容请见原文,原文转载自:https://blog.csdn.net/qq_44639795/article/details/101455696…
献给各位: Satisfied MindRed Hayes and Jack RhodesHow many times have you heard someone say,"If I had his money I would do things my way."How little they know, well, it's so hard to find,One rich man in ten with a satisfied mind.Oh, once I was waitin…
[学习笔记] 3."超"关键字(super keyword) Super是一个参考(或说指针)指向他紧邻的父类(见下面的例子).用super可以指向被隐藏的父类的同名成员. 3.1 super指向父类的成员 注意: 下例中:子类和父类都有i,我们一共有两个i,用super可以指向前一个父类的i. 例1.3.1--- class AMark_to_win {    int i;} class B extends AMark_to_win {    int i; public B(int…