- 博客(183)
- 资源 (25)
- 收藏
- 关注
原创 Java多线程编程——线程创建方式
在Java中,创建线程有以下几种方式:通过实现 Runnable 接口;通过继承 Thread 类本身;通过 Callable 和 Future 创建线程。通过实现 Runnable 接口来创建线程创建线程最简单的方式就是直接实现Runnable接口,该接口定义了一个run()方法,在我们的实现类中通过对该方法的实现来定义我们自己的任务,这样使得我们在创建并启动线程之后能够执行...
2018-04-26 17:43:01 295
原创 Java多线程编程——为什么需要多线程编程
谈到为什么需要多线程编程,可能需要从并发这个概念的历史来说起。在很久以前,计算机并没有操作系统,同一个时刻他们只能执行一个单独的程序,而且这些程序直接访问所有的计算机资源。在计算机刚面世的那个年代,程序的这种处理方式其实并没有什么不对。但是随着计算机以及软件的快速发展,操作系统以及多核处理器的诞生,这使得同一时刻只处理一个任务让计算机的效率变得很低,并且不能充分发挥计算机的能力,达到充分利用计...
2018-04-26 17:37:38 1775
原创 JavaMail使用(检测邮箱是否能收件和发件)
使用过JavaMail我们都知道,通过JavaMail这个工具,我们可以在自己的系统中实现邮件收发功能。本文我们将给出如何检测我们所设置的邮箱是否能接收和发送邮件。首先、如果您想要实现邮件接受和发送功能,您需要在邮箱中开启POP3和SMTP协议。一般情况下,POP3协议用于邮件的接受,SMTP协议用于邮件的发送。我们以QQ邮箱为例,如果您需要在您的系统中使用一个QQ邮箱为您接受和发送邮件,首先...
2018-04-18 14:26:21 6457
转载 8张图带你轻松温习Java知识
1、字符串不变性String s = "abcd"; s = s.concat("ef"); 2、equals()方法、hashCode()方法的区别HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于:如果两个对象相等(equal),那么他们一定有相同的哈希值。如果两个对象的哈希值相同,但他们未必相等(equal)。 ...
2018-04-14 13:35:34 267
原创 Spring Boot打Jar包部署
对于传统的Web项目,可能大部分都要部署到web容器中,如Tomcat。Spring Boot提供了一种超级简单的部署方式,就是直接将应用打成jar包,在生产上只需要执行java -jar就可以运行了。一般情况下,如果我们的应用只是作为一个服务、工具类、API的形式存在,那么我们一般将其打包成jar包。而如果我们的应用是一个Web应用,都是打成war包,进行发布,同时如果我们的服务器是Tomc...
2018-04-12 13:14:08 16490
原创 Java高级系列——不得不说的对象序列化(serialize)
1、什么是Java对象序列化?Java的对象序列化是将那些实现了Serializable接口的对象转化成一个字节序列,并能够在以后将这些字节序列完全恢复成原来的对象。简单来说序列化就是将对象转化成字节流,反序列化就是将字节流转化成对象。对象必须在程序中显示的序列化(serialize)和反序列化(deserialize)。2、序列化的作用序列化的主要用途主要有两个,一个是对象持久化...
2018-04-09 16:18:12 10509 1
原创 Java高级系列——File类
在做应用开发的过程中,文件是我们经常需要接触到的东西。在Java中,File是一个相对重要的类,在很多文件处理上我们都会用到该类以及相关的API。但是,从名字上来看,我们可能会认为,File所代表的应该是一个文件,实则不然,在Java中,File代表一个具体的文件名称,也代表一个具体目录的名称。如果要对File所代表的文件进行操作,我们需要借助Java中的输入和输出流的操作,这里我们不谈输入流和输...
2018-04-07 16:48:36 407
原创 Java高级系列——散列与散列码
使用散列的目的:想要使用一个对象查找另一个对象。散列的价值:散列的价值在于速度,散列使得查询得以快速进行。设计hashCode()时最重要的因素:无论何时,对同一个对象调用hashCode()都会产生同样的值。如果将一个对象用put()添加进HashMap时产生一个hashCode()值,而用get()取出时却产生了另外一个hashCode()值,那么就无法重新取得该对象了。想要使ha...
2018-04-04 13:35:31 1985
原创 区块链-技术简介
1、什么是区块链?区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。简单来讲, 在区块链系统中, 每过一段时间, 各参与主体产生的交易数据会被打包成一个数据区块, 数据区块按照时间顺序依次排列, 形成数据区块的链条,各参与主体拥...
2018-03-30 17:08:08 32963
转载 图文还原HTTPS原理
本文用图文的形式一步步还原HTTPS的设计过程,进而深入了解原理。 A在向B进行通信时,如果是以明文的方式进行通信,中间窃听者会获得双方的传输的数据hello。HTTPS要解决如下问题:A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容;如何做到安全?这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称加密、DES、RSA、XX、。。。。...
2018-03-23 17:29:14 431
原创 Java高级系列——何时使用、如何使用异常(Exceptions)
一、介绍在Java中,异常是一个非常重要的工具,在程序流中异常可以发出一些反常的(异常的)情况并阻止程序进行更深入的执行。自然地,异常情况可能是致命的(程序不能执行任何操作并且会终止),也可能是可恢复的(程序可以继续执行,但是有些功能可能不可用)。本文我们将会阐述一些使用异常的经典场景,讨论Checked Exceptions和Unchecked Exceptions,并且接触一些不太常见
2018-01-23 10:56:14 6848
原创 Java高级系列——通用编程指南
一、介绍本文我们将会继续讨论Java中一些优秀且强大的编程风格中的一些通用规则。我们将要讨论的这些规则中的一些我们在前面的文章中已经提及,然而为了提高Java开发者的相关技巧,有很多新的实战建议本文我们将会讨论。二、变量作用域(Variable scopes)在如何设计类和接口一文我们已经讨论过在设计类和接口时如何使用可见性规则和可访问性规则来限制他们的作用域。但是我们没有讨论过局部变
2018-01-19 16:14:52 1092
原创 Spring Boot整合Mybatis实例
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。本文将简单的演示在Spring Boot
2018-01-17 18:25:09 4683
原创 Java高级系列——如何高效的编写方法(methods)
一、介绍本文我们将会花一些时间从不同的方面去讨论一下Java中方法的设计和实现方式。在本系列前面的文章中我们已经看到,在Java中编写一个方法非常的简单,但是在编写方法时掌握一些关键的要素可以让方法可读性更强而且更加高效。二、方法签名(Method signatures)我们已经知道,Java是面向对象语言。因此,Java中的每个方法属于类的实例(static方法属于类本身),每个方法
2018-01-17 13:44:23 4668 1
原创 Java高级系列——注解(Annotations)
本系列文章的这一部分我们将会介绍Java 5版本引入的除泛型和枚举之外的另外一个强大特性:注解,可以将注解看成一种特殊的接口。注解是一种特殊种类的元数据,它能够关联Java语言中不同元素和结构。有意思的是,在Java生态系统中大多数使用样板XML描述符的地方,注解在消除这些XML描述符上做出了很大的贡献。注解引入了新的,类型安全以及非常强健的配置和个性化技术。
2018-01-13 17:13:44 11829
原创 Java高级系列——枚举(Enums)
一、介绍本系列文章的这一部分我们将会介绍Java 5版本之后引入的除泛型之外的另外一个强大特性:枚举。可以将枚举看成一种特殊的类,并且可以将注解看成一种特殊的接口。枚举的思想很简单,也很方便:它代表了一组固定的常量值。实际上,枚举经常用来设计一些状态常量。比如,星期几就是枚举的一个最好例子,因为他们被限制在周一、周二、周三、周四、周五、 周六和周日。二、枚举作为特殊的类在枚举被引入
2018-01-12 15:56:51 19887
原创 Java高级系列——如何使用、何时使用泛型(Generics)?
一、介绍泛型的概念代表了对类型的抽象(C++开发人员熟知的模板)。它是一个非常强大的概念,它允许开发抽象算法和数据结构,并提供实体类型以供后续操作。在早期的Java版本中并未出现泛型,泛型是在Java 5发布之后被添加到Java中的。从那以后,可以说泛型彻底改变了Java程序的编写方式,提供了更强大的类型保证,使代码更安全。本文我们将会从接口、类、和方法的开始去讨论有关泛型的用法。泛型提供
2018-01-10 18:32:15 6022
原创 Java高级系列——如何设计类和接口
一、介绍无论你使用哪一种编程语言(在这里Java也不排除),遵循一种好的设计规则对于写出清晰、易于理解、可测试、长生命周期以及易于维护的代码来说非常关键。在本系列文章的这一部分我们将会讨论Java语言提供的基础构件和引进的一些设计规则来帮助大家在项目研发过程中做出最好的设计决策。确切的讲,我们将会讨论接口(interfaces)和接口默认方法(interfaces with default
2018-01-06 14:27:55 14366 1
原创 Java高级系列——使用所有对象的通用方法
本文我们介绍equals,hashCode,toString和clone方法的使用,其他的方法我们将会在后续的多线程最佳实战的文章中细说。
2018-01-03 17:48:47 1856
原创 Java高级系列——如何创建和销毁对象
本系列文章我们我们将会覆盖一些高级的Java概念,我们假设你对Java语言已经有一些基础知识。本系列文章并不是一个完整的参考,而是一个将您的Java技能提升到下一个级别的详细指南。Java是面向对象的编程语言,所以新实例(objects)的创建可能是它最重要的概念之一。在新的类实例中构造器(Constructors)扮演了非常核心的角色,Java对于构造器(Constructors)的定义提供了很多方案。
2017-12-30 14:28:55 15202 1
翻译 Java垃圾回收(4)
G1垃圾收集器是hotspot虚拟机中实现的最新的垃圾收集器。从Java 7的第4个更新版本开始就提供了此回收器的支持。Oracle GC小组也公开表示,他们希望在G1中完全实现低停顿GC。问题:回
2017-12-28 15:53:23 270
翻译 Java垃圾回收(3)
CMS(Concurrent Mark Sweep)垃圾收集器Hotspot中的parallel垃圾收集器旨在尽量减少应用程序花费在垃圾收集上的时间,这被称为吞吐量(throughput)。对于所有的应用来说,这并不是很适当的折中方案,有些所谓的延迟需求(latency requirement)要求系统停顿
2017-12-26 15:10:58 289
翻译 Java垃圾回收(2)
本文我们将会描述并行垃圾回收(Parallel GC)是如何工作的。具体来说,这是一个在Eden空间运行Parallel Scavenge收集器、在老年代(Tenured generation)空间运行并行标记(Parallel Mark)和Sweep收集器的组合。你可以通过传入参数’ -XX:+UseParallelOldGC’来获取这些特性,虽然在某
2017-12-24 15:49:08 406
翻译 Java垃圾回收(1)
本文是关于垃圾回收(GC)系列的第一篇文章。我希望通过这一系列的课程能够覆盖一些垃圾回收的原理和在hotspot虚拟机中的一些主要的垃圾回收器。本文仅仅只是描述什么是垃圾回收和不同垃圾收集器的共同元素。
2017-12-23 14:40:44 418
原创 Spring Boot整合RabbitMQ实例
消息是一个或者多个实体之间沟通的一种方式并且无处不在。自从计算机发明以来,计算机以多种多样的方式发送消息,消息定义了软硬件或者应用程序之间的沟通方式。本文通过实例的形式讲述如何整合Spring Boot和RabbitMQ
2017-12-18 16:44:11 3076
原创 Spring Boot使用JDBC Template访问数据
本文通过实例介绍使用Spring Boot,使用JDBC Template如何操作内存数据库和MySQL数据库。
2017-12-11 18:08:39 1484
原创 Spring Boot自动配置(Auto-Configuration),@EnableAutoConfiguration,Spring Beans和依赖注入
自动配置(auto-configuration)是Spring Boot最重要的特性之一,因为该特性会根据应用的classpath(这个主要是根据maven pom.xml决定),annotations和其他的一些java配置描述符自动配置Spring Boot应用。
2017-12-07 17:58:54 15986
原创 Spring Boot是如何工作的?
本文我们将会简单介绍一下Spring Boot内部是如何工作的,如何让我们开发人员从令人头痛的J2EE web应用中解放出来的。本文也简单介绍了@SpringBootApplication注解的组成以及@EnableAutoConfiguration注解的相关功能,读者通过本文可简单理解Spring Boot的工作原理。
2017-12-07 12:17:29 1399
原创 Spring Boot内嵌数据库的使用(H2)
Spring Boot在开发应用的过程中使用内嵌的内存数据库是非常方便的,很明显,内存数据库不提供数据的持久化存储;当应用启动时你需要填充你的数据库,当应用结束时数据将会丢弃。本文通过演示H2内嵌数据库的使用来帮助理解在Spring Boot中如何使用内嵌数据库。
2017-12-06 18:24:53 27408
原创 第一个Spring Boot应用(Hello World)
本文将介绍如何安装和使用Spring Boot CLI,如何创建第一个Spring Boot应用程序,通过本文的学习读者将会对Spring Boot的内部工作原理有一些了解,对Spring Boot这项令人疯狂的技术有一个更好的画像。你可以通过Spring Boot命令行接口(CLI)或者Maven,Gradle甚至是Apache Ant创建Spring Boot应用。
2017-12-05 17:57:28 1149
原创 初识Spring Boot
Spring Boot简化了开发方式,它使开发独立的, 产品级别的基于Spring的应用变得非常简单, 你只需"just run"。Spring Boot最棒的功能之一就是Spring Boot采用的是“opinionated”技术,通过这种技术的使用可以帮助用户在创建稳定、可拓展的Spring应用会有更好的实践。
2017-12-05 14:26:22 1319
原创 超级账本-面向企业的分布式账本
超级账本项目是Linux基金会近些年来重点支持的面向企业的分布式账本平台。它同时也是开源界和工业界技术力量颇有历史意义的携手合作,共同为分布式账本技术提供了在代码实现、协议和规范标准上的技术参考。成立一年多以来,超级账本社区已经吸引了国内外来自各行业的大量关注,并从最初的一个项目、三十位成员,发展到今天的近十个顶级项目,过百个企业会员。这些项目和各行业的领军企业,共同构造了完善的企业级区块链生态系统。同时,超级账本项
2017-12-04 15:03:45 37038
原创 以太坊-挣脱数字货币的枷锁
以太坊项目将区块链技术在数字货币的基础上进行了延伸,提出了打造更为通用的智能合约平台的宏大构想,并基于开源技术构建了以太坊为核心的开源生态系统。本文内容介绍了以太坊的相关知识,包括核心概念、设计、工具等。比照比特币项目,可以掌握以太坊的相关改进设计,并学习智能合约的编写。实际上,智能合约并不是一个新兴概念,但区块链技术的出现为智能合约的“代码即律法”提供提供了信任基础和实施架构。通过引入智能合约,区块链技术释放了支持
2017-12-04 14:53:28 2891
原创 Java值、引用和对象
每种编程语言都有自己操作内存中元素的方式,有时候,程序员必须注意将要处理的数据是什么类型,是直接操纵元素,还是通过某种间接的表示来操纵对象。本文简单介绍Java中如何分配内存,值类型和对象的存储逻辑。
2017-12-01 10:10:21 924 2
原创 区块链-密码学与安全技术
本文主要总结了密码学与安全领域中的一些核心问题和经典算法。通过阅读本文内容,相信读者已经对现代密码学的发展状况和关键技术有了初步了解。掌握这些知识,对于帮助理解区块链系统如何实现隐私保护和安全防护都很有好处。现代密码学安全技术在设计上大量应用了十分专业的现代数学知识,如果读者希望成为这方面的专家,则需要进一步学习并深入掌握近现代的数学科学,特别是数论、抽象代数等相关内容。可以说,密码学安全学科是没有捷径可走的。
2017-11-29 17:14:51 22261
原创 分布式系统核心问题
分布式系统是计算机科学中十分重要的一个研究领域。随着现代计算机集群规模的不断增长,所处理的数据量越来越大,同时对于性能、可靠性的要求越来越高,分布式系统相关技术已经变得越来越重要,起到的作用也越来越关键。分布式系统中如何保证共识是个经典的技术问题,无论在学术上还是工程上都存在很高的研究价值。令人遗憾地是,理想的(各项指标均最优)解决方案并不存在。在现实各种约束条件下,往往需要通过牺牲掉某些需求,来设计出满足特定场景的
2017-11-28 18:40:51 24819 5
原创 Java面向对象、抽象、封装、继承、多态
面向对象是一种编程思想,是一种程序设计模型。要深入理解面向对象的概念,首先你必须要明白,软件在现实世界中的职责所在。我们都知道,软件的存在是为了让计算机直接模拟现实环境,在虚拟的世界中帮助人类解决问题,提高效率。在软件开发时,我们必须要面对一个问题,那就是如何将现实世界中的问题元素在软件中表示出来,我们将问题空间中的元素以及它们在方案空间的表示物称作“对象”(Object)。
2017-11-28 15:07:22 748
原创 区块链(Blockchain)-应用场景
本文介绍了大量基于区块链技术的应用案例和场景,展现了区块链以及基于区块链的分布式账本技术所具有的巨大市场潜力。当然,任何事物的发展都不是一帆风顺的。目前来看,制约区块链技术进一步落地的因素有很多。比如如何来为区块链上的合同担保?特别在金融、法律等领域,实际执行的时候往往还需要线下机制来配合;另外就是基于区块链系统的价值交易,必须要实现物品价值的数字化,非数字化的物品很难直接放到数字世界中进行管理。
2017-11-27 14:11:41 12727
原创 区块链(Blockchain)-核心技术概览
本文剖析了区块链的相关核心技术,包括其定义、工作原理、技术分类、关键问题和认识上的误区等。通过本章的学习,读者可以对区块链的相关核心技术形成整体上的认识,并对区块链在整个信息科技产业中的位置和发展趋势形成更清晰的认知。
2017-11-26 15:05:10 27235 1
gpg4win-3.1.7
2019-04-09
Deep Learning with Python.pdf
2017-09-13
Spring Cloud 中文参考手册
2017-08-21
Spring Cloud 参考手册英文版
2017-08-21
软件系统架构实战
2017-08-17
The Art of Scalability Scalable Web Architecture 2nd
2017-08-12
[奥莱理] High Performance Browser Networking
2017-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人