Java从诞生到日趋完善,经过了不断的发展壮大,目前全世界拥有了成千上万的Java开发人员。如何编写出更清晰、更正确、更健壮且更易于重用的代码,是大家所追求的目标之一。作为经典Jolt获奖作品的新版书,它已经进行了彻底的更新,涵盖了自第1版之后所引入的Java SE 5和Java SE 6的新特性。作者探索了新的设计模式和语言习惯用法,介绍了如何充分利用从泛型到枚举、从注解到自动装箱的各种特性。本书的作者Joshua Bloch曾经是Sun公司的杰出工程师,带领团队设计和实现过无数的Java平台特性,包括JDK 5.0语言增强版和获奖的Java Collections Framework。他也是Jolt奖的获得者,现在担任Google公司的首席Java架构师。他为我们带来了共78条程序员必备的经验法则:针对你每天都会遇到的编程问题提出了最有效、最实用的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
2、访问修饰符public,private,protected,以及不写(默认)时的区别?
入门 · 练级 书名 介绍 《Head First Java》 非传统的教学方式,运用大量图片和对话,尽量有趣地讲解严肃的技术主题。适合初学者的入门书籍。当然,也有同学反映信息密度不高,学习效率一般。 《Java 核心技术:卷1 基础知识》 口碑最好的Java教程。系统全面讲解Java语言的核心概念、语法、重要特性和开发方法,内有大量程序实例,极具实用价值。 是Java初学者和Java程序员的必备参考书。 进阶 · 打怪 书名 介绍 《Effective Java》 Joshua Bloch大神(Jav
Java的内存模型是主内存和工作内存,我们在进行程序调用的时候,变量值都是从主内存中读取然后复制一个副本,对这个副本进行操作。到最后将这个副本再更新到主内存中。但是这个只是针对于单线程,那如果是多线程呢?并且操作的是同一个变量值,那这两个线程之间的可见性应该如何来定义呢?
在测试IO密集型应用程序的时候,当出现内存泄露的时候,往往需要针对这部分进行分析内存泄露的具体原因。常规的一种方式是我们使用JVM的监控工具来监控这部分,来查看堆内存以及非堆内存的实际使用率和过程中应用程序本身的CPU使用率。但是被测试的服务一旦出现内存泄露,该服务就会疯狂的打印内存泄露的日志信息同时客户端请求服务,服务一直处于超时的情况。那么这个时候如JVisualVM的监控也会失去连接,并不能够看到很关键的信息。所以下面详细的阐述下当被测试的服务一旦出现内存泄露的时候,使用自动导出以及命令行导出的方式来获取到内存映像的文件,从而对分析内存泄露提供有利的信息。
如果你写过一些 Java 代码的话,你应该知道 Java 中最常见的就是空指针异常错误。
文档注释是 Java 特有的,文档注释可通过 JavaDoc 工具转换为 HTML 文件。
需要注意的是,Netty的线程模型并非固定不变,而是取决于用户的启动参数配置。通过启动参数的设置,Netty可以支持Reactor单线程模型和多线程模型。
Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。
与 Java、Python 等语言相比,C/C++ 语言是离操作系统更近的一种高级语言,因此其执行效率也更高。可以说,就像武侠小说中的“九阳神功”一样,C/C++ 一旦学成,其妙无穷!有了这个基础,你就可以一通百通,快速学习任何语言和编程技术了。
这些年,前端发生了颠覆性的变革,这种变化极大地改变了前端的生态,前端从很多年前一个不起眼的角色跨步式的演变为一个不可或缺的存在。
上文说到,有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想要个对象——于是Spring就很贴心的给你个对象。听起来似乎很简单,使用起来也不难,但是如果仅仅是这样的拿来主义,倒也洒脱,不用费什么脑子。。。可是,你就真的不关心,Spring是从哪里把对象给你的吗? 如果你想要了解Spring深一些,而不仅仅是拿来用用,那么你就应该好好思考一下上诉问题,不然,这篇博文
👆点击“博文视点Broadview”,获取更多书讯 开学季啦,同学们准备好迎接新学期的到来了吗? 什么?觉得编程开发总不得其法,数学太难学了?写论文不知道怎样更有效地展示自己的数据,不知道如何使用LaTeX?不知道怎样更有效地学习?…… 别慌!本期书单就来解决你学习中的各种焦虑和恐慌,让你轻松有趣学编程,快速掌握底层原理和核心技术点;让学数学不再是啃天书;掌握数据呈现的正确玩法,轻松驾驭LaTeX,让写论文不再痛苦;了解学习的学问,学会学习,让学习更高效! 让这几本书承包你整个学期的快乐吧! 悄悄告诉你
翻译自Java developer interview questions: The hard part ---- 面向对象编程的基本理念与核心设计思想 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)。 继承(Inheritance)与聚合(Aggregation)的区别在哪里。 你是如何理解干净的代码(Clean Code)与技术负载(Technical Debt)的。 描述下常用的重构技巧。 阐述下 SOLID 原则。
作者:王下邀月熊 链接:https://zhuanlan.zhihu.com/p/24910702
DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素。
现流行的文章SpringBoot如何优雅处理异常,落地的确方便,使用AOP统一处理异常,但只是处理了api层次的异常
有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想要个对象——于是Spring就很贴心的给你个对象。
1)BeanFactoryPostProcessor在spring容器加载完BeanDefinition之后,在bean实例化之前执行的2)对bean元数据(BeanDefinition)进行加工处理,也就是BeanDefinition属性填充、修改等操作
现在有这么一个问题,有一个带参数的构造函数,当默认构造去调这个带参数的构造,在Java中大家都明白,直接穿个this(xxx)就可以了,那就在C++中模仿一下,写出下面代码:
在探讨今天的主题——如何利用各类资源学习Hadoop知识——之前,让我们首先搞清楚另一个问题:大数据Hadoop到底是什么?简单来 讲,Hadoop是一套用于实现大数据技术的框架方案。为了顺利掌握Hadoop,大家需要理解两项与文件存储以及数据处理紧密相关的基础知识。在 Hadoop当中,我们甚至可以保存比可用存储空间更大的文件。Hadoop提供相关选项,允许大家将大型文件存储在节点之上。很明显,处理规模如此可观 的文件绝非儿戏,不过Hadoop能够引入“MapReduce”机制让一切变得更为简单。Map
java作为最热门的编程语言,它无处不在。目前全球有着数10亿的设备正在运行着java,全球80%的服务器程序都是用它编写,用以处理每天超过5000w+的数据。
面试官:“我们在Java的集合和数据结构中都离不开比较器,请你聊一聊Comparable 和 Comparator 这两种的区别吧”
计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的 应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作。甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事 情。举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示。甚至文字处理器也应该能在忙 于重新格式化文本和刷新显示的情况下同时响应键盘和鼠标事件。这样的软件就被称为并发软件。
在开始每周讲一个具体的原则前,本周笔者希望写一篇序章,解释下为什么笔者认为这些基本的原则才是最基本的,同时也是最重要的
今天习得了一个不错的项目代码质量检测工具,并且在自己的 IDE 上进行安装,这一实践不要紧,感觉还是很不错的。后来查了文档,这个工具不仅可以在 IDE 上来使用,在项目的持续集成部署上面,依然有用武之地,可以提高项目的代码质量。也就是说在你项目根目录下的 gitlab-ci.yml 文件中把它作为一个持续集成部署中的一个 pipeline,就可以对你上线代码的质量进行把控。这个工具的名字就是 SonarQube,同时针对 JetBrains 也有一款起相同作用的工具 Qodana。
通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。 上面比较绕口,通俗点讲就是说一个变量如果用volatile修饰了,则
通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下:
AOP,面向切面编程,作为Spring的核心思想之一,度娘上有太多的教程啊、解释啊,但博主还是要自己按照自己的思路和理解再来阐释一下。原因很简单,别人的思想终究是别人的,自己的理解才是自己的,尤其当用文字、代码来阐述一遍过后,理解层面上又似乎变得不一样了。
前言 在学习java多线程并发编程前,必须要了解java内存模型,只有了解java内存模型,才能知道为什么多线程并发时会出现数据不一致,什么时候需要加锁同步等各种问题。下面只是简单阐述下java内存模型及其相关的概念。 内存模型简介 java的并发采用的是共享内存模型(而非消息传递模型)。 Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。 Java线程之间的通信由Java内存模型(JMM
尤其是目前的形式来看,很多编程教育或者视频课程中 html/css/js 已被当成了菜鸟入门级。
各位都知道,匿名内部类在使用的时候需要使用外部的变量,该变量必须被final修饰,否则编译报错。实际使用中,有时候确实还给我们造成了不少麻烦,可大家可曾想过这是为什么吗?
C是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元素到期,是不能从列头获取元素的,哪怕有元素也不行。也就是说只有在延迟期到时才能够从队列中取元素。 DelayQueue主要用于两个方面: 缓存:清掉缓存中超时的缓存数据 任务超时处理 DelayQueue DelayQueue实现的关键主要有如下几个: 可重入锁ReentrantLock 用于阻塞和通知的Condition对象 根据Delay时间排序的优先级队列:P
好的分析工具能起到事半功倍的效果,利用分析利器JMC、JFR,可以实现性能问题的准确定位。
👆点击“博文视点Broadview”,获取更多书讯 在过去几年里,如果你没有“两耳不闻天下事”,肯定会注意到这样一件事情,那就是企业级领域正在朝着采用云技术的方向发展,微服务、Kubernetes、Linux 容器等技术无不牵涉其中。 尽管二十多年来,Java 语言一直是企业开发人员的主力,但它在这个新的云计算世界中并没有在第一时间表现出如此强大的统治力。 Java以及使用它构建的框架和技术栈通常被视为单体应用的代表,启动缓慢,消耗大量的内存或磁盘空间,而且Java 本身的动态特性似乎与 Kubernet
👆点击“博文视点Broadview”,获取更多书讯 一年一度的423世界读书日即将到来, 又到了提醒大家要“多读书,读好书”的日子 ~~ 好书,可以带领我们在时间的长河中不惧变化、稳扎稳打;也可以带领我们穿越时空、窥探未来…… 所以,今天就给大家分享10本最近的爆款新书, 既有久经时间沉淀的经典书升级,又有紧贴未来趋势的前沿新书,希望可以帮大家以不变的根基拥抱变化的未来! 此外,423当天,我们也会为大家带来一场特别的专场活动,有17位大咖会做客博文视点直播间,和大家聊聊读书这件事儿,点击下方预约
10月的TIOBE编程语言排行榜发布了最新一期榜单,雄踞榜首多年的Java终于让出了榜首位置,Python成功登顶。一时间,关于Python的吹捧与对Java的看衰持续引发热议。“世界上只有两种编程语言,一种广为诟病,另一种没人用”。C++之父的这句名言用来形容Java同样合适,作为企业级的编程语言,Java不仅在中国互联网大厂中有着广泛的应用,在世界范围内更是有着庞大的生态和就业机会。 编程语言之争是技术圈经久不衰的话题,国内开发者培训业务多了起来以后,关于编程语言的话题炒作更是此起彼伏。但雄踞榜首多年
各位小伙伴大家好,我是A哥。各位都知道,匿名内部类在使用的时候需要使用外部的变量,该变量必须被final修饰,否则编译报错。实际使用中,有时候确实还给我们造成了不少麻烦,可大家可曾想过这是为什么吗?
本文将详细阐述如何使用java实现Prometheus的集成。主要内容会包括Prometheus的Java客户端库使用,以及如何将Prometheus metrics export到Prometheus Server。
面试例题7:你需要存储元素到某种数据结构中,而且要确保元素在自然队列中没有重复,下面哪个接口能保证这种能力?
在软件开发中,设计模式与框架的应用极大地提高了开发效率和软件质量。其中,Spring框架因其强大的功能和灵活的扩展性,成为了Java企业级应用开发的首选。而Spring框架中的核心特性之一,即控制反转(Inversion of Control,简称IOC),更是为软件架构带来了革命性的变化。本文将详细阐述Spring框架中的IOC概念、原理、实现方式及其带来的好处。
阐述:见名知义,“饿汉”说明它很“饥饿”,迫切需要找到吃的,这里也就是我们所说的实例。为什么说它是线程安全的呢?因为我们一开始就创建一个这样的实例,其他线程在访问前这个实例就已经创建完成,在类的生命周期中只创建一次,所以饿汉单例天生就是线程安全的。
领取专属 10元无门槛券
手把手带您无忧上云