![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
-Thinker
这个作者很懒,什么都没留下…
展开
-
OAuth 2.0 详解
1.定义OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。2.名词说明Third-party application:第三方应用程序,本文中又称"客户端"(client)。 HTTP service:HTTP服务提供商,本文中简称"服务提供商"。 Resource Ow原创 2020-06-14 15:51:44 · 421 阅读 · 0 评论 -
Java垃圾回收机制
概述Lisp 第一门真正使用内存动态分配和垃圾收集技术的语言;为什么学习垃圾回收机制: 当垃圾收集成为系统达到更高并发量的瓶颈时, 我们就需要对这些自动化的技术实施必要的调节和监控。垃圾收集的3件事情:哪些内存需要回收;什么时候回收;如何回收哪些内存需要回收首先总结一下Java虚拟机主要的内存区域(主要在第2章):程序计数器:当前线程所执转载 2017-02-23 13:23:33 · 228 阅读 · 0 评论 -
近5年133个Java面试问题列表
Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你转载 2017-02-23 10:15:49 · 1296 阅读 · 0 评论 -
Java程序员笔试必备--Java基本概念
1. Java 语言的优点?简单、高效Java 语言与 C++ 类似,如果用户了解 C++ 和面向对象的概念,就可以很快编写出 Java 程序;此外,Java 又不同于诸如 C++ 语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性,例如去掉了头文件、指针变量、结构、运算符重载、多重继承等复杂特性。Java 语言虽然简单,却很高效,它可以用面向对象的方法来描述转载 2017-02-23 10:09:58 · 394 阅读 · 0 评论 -
Java 抽象类与oop三大特征
面向对象主要有三大特性: 继承和多态、 封装 。一、抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它 只有声明,而没有具体的实现 。抽象方法的声明格式为:abstract void fun();抽象方法 必须用 abstract关键字进行修饰 。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为 抽象转载 2017-02-23 09:46:50 · 392 阅读 · 0 评论 -
35 个 Java 代码性能优化总结
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考转载 2017-02-23 09:38:26 · 248 阅读 · 0 评论 -
ConcurrentHashMap的红黑树实现分析
知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得红黑树红黑树是一种特殊的二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn),每个节点都有一个标识位表示颜色,红色或黑色,有如下5种特性:1、每个节点要么红色,要么是黑色;2、根节点一定是黑色的;3、每个空叶子节点必须是黑色的;4、如果一个节点是红色的,那么它的子节点必须是黑色的;转载 2017-02-23 09:05:24 · 4194 阅读 · 0 评论 -
大话设计模式读书笔记之策略模式
1.找出应用中可能需要变化之处,把他们独立起来,不要和那些不需要变化的代码混在一起。(把会变化的部分取出并"封装"起来,好让其他部分不会受到影响)换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,这部分代码需要被抽出来,和其他稳定的代码有所区分。2.针对接口编程,而不是针对实现编程。针对接口编程真正的意思是针对超类型编程。关键就在于多态。利用多态,程序可以针对超类型编程,执行时会根据原创 2016-07-17 08:02:01 · 405 阅读 · 0 评论 -
设计模式之禅
1.知道OO基础,并不足以让你设计出良好的OO系统。2.良好的OO设计必须具备可复用、可扩充、可维护三个特性。3.模式可以让我们建造出具有良好OO设计质量的系统。4.模式被认为是历经验证的OO设计经验。5.模式不是代码,而是针对设计问题的通用解决方案。你可以把他们应用到特定的应用中。6.模式不是被发明,而是被发现。7.大多数的模式和原则,都着眼于软件变化的主题。8.大多原创 2016-07-30 10:33:22 · 460 阅读 · 0 评论 -
HashMap的工作原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入转载 2017-02-13 09:00:53 · 232 阅读 · 0 评论 -
50道Java线程面试题
下面是Java线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点转载 2017-02-13 08:34:40 · 267 阅读 · 0 评论 -
java分布式简单实现
案例:文章推荐论坛进入文章页面后,显示一个推荐列表:看过这篇文章的人还看过哪些文章,包含列为文章article、点击数count。可能有很好很简单的解决办法,但是到最后再讲。传统的方法是:建一张表,字段有article和user。每点击一次,增加一条记录。一个大论坛几天之内记录数就能达到千万条。而没有必要建索引,其他优化的办法,我还想不到,这样的查询别提多慢了。传统数据库解决不了,转载 2017-03-01 16:52:36 · 23923 阅读 · 0 评论 -
优秀Java程序员的编程风格
今天突发奇想,对编码习惯和编程风格很感兴趣,于是乎,找了一下关于编程风格(Java篇)的资料,希望对爱好编码或者开始学习编码的同学有帮助!来自《The Elements of Java Style》-《Java编程风格》一书,值得一读的书籍,会让你在细节上节省很多时间,合作之间更加愉快!好处不多说了,但是有几个原则如下:1.保持原有风格2.坚持最小惊奇原则3转载 2017-02-15 20:40:47 · 251 阅读 · 0 评论 -
Java异常的深入研究与分析
前言本文是异常内容的集大成者,力求全面,深入的异常知识研究与分析。本文由金丝燕网独家撰写,参考众多网上资源,经过内容辨别取舍,文字格式校验等步骤编辑而成,以飨读者。对于本文的内容,建议小白需要多多思考力求掌握,对于老手只需意会温故知新。对于本文的内容,属于基础知识研究范畴,切勿以为读完此文就能将异常知识掌握到家。切记:操千曲而后晓声,观千剑而后识器,所以我觉得没有大量的源码阅读经验,你很难转载 2017-02-15 21:12:23 · 280 阅读 · 0 评论 -
Java死锁实例代码详解
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。public class DeadLockDemo { static Book book1 = new Book(); static Book book2 = new Book...原创 2018-04-08 18:53:42 · 1389 阅读 · 1 评论 -
无序(未排序)数组二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。但是对于无序数组,我们可以先排序在二分,但还有一种技巧就是结合快排的思想,即每次选择一个关键字,先将比他大的数放在其右边,比他小的数放在其左边,然后比较他和要查找的数的关系,并选择下次迭代的区间。public class BinarySearc...原创 2018-04-08 18:28:39 · 7215 阅读 · 3 评论 -
Java对象浅析
Java是一门面向对象的编程语言,在Java程序运行的过程中无时无刻都有对象被创建出来。虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那就先执行相应的类加载过程。在类加载检查过后,虚拟机就为新生对象分配内存。对象所需内存大小在类加载完成后便可完全确定,为对象分配内存等同于把一块确定...原创 2018-03-17 15:40:00 · 291 阅读 · 0 评论 -
Java内存解读简易版
运行时的数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。每个线程都需要一个独立的程序计数器,这块区域是线程私有的内存。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟...原创 2018-03-17 10:46:22 · 362 阅读 · 0 评论 -
Java知识点总结
Java知识点总结JVM概述JVM是什么JREJDKJVM是什么关系JVM的生命周期JVM运行原理JVM体系结构JVM相关程序计数器虚拟机栈本地方法栈堆方法区总结直接内存堆与栈的对比内存溢出和内存泄漏内存分配过程对象访问类的加载机制ClassLoader类的加载过程加载链接初始化JVM垃圾回收机制范围要回收哪些区域前提如何判断对象已死引用计数算原创 2017-05-12 16:34:51 · 909 阅读 · 0 评论 -
HttpClient post 请求实例
所需jar包:commons-codec-1.3.jarcommons-httpclient-3.0.jarcommons-logging-1.1.1.jar[java] view plain copy /** * */ package httpClient; import java.转载 2017-03-07 14:14:47 · 705 阅读 · 0 评论 -
Java中的自动装箱与拆箱
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。如果你在Java1.5下进行过编程的话,你一定不会陌生这一点,你不能直接地向集合(Collections)中放入原始类型值,因为集合只接收对象。通常这种情况下你的做法是,将这些原始类型的值转换成对转载 2017-02-27 17:13:20 · 300 阅读 · 0 评论 -
单例模式
1. 描述保证一个类只有一个对象实例,并提供一个访问它的全局访问点。2.使用场景当你想要控制实例数目,节省系统资源的时候,比如产生序列号,计数器。3.优点在内存里只有一个实例,减少了内存的开销4.例子4.1 懒汉式,线程不安全这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。原创 2017-03-09 16:31:50 · 434 阅读 · 0 评论 -
工厂模式,工厂方法模式,抽象工厂模式 详解
1. 工厂模式1.1 定义简单工厂模式是由一个工厂对象根据收到的消息决定要创建哪一个类的对象实例。1.2 使用场景工厂类负责创建的对象比较少,客户只需要传入工厂类参数,对于如何创建对象(逻辑)不关心。简单工厂模式很容易违反高内聚低耦合的原则,因此一般只在很简单的情况下使用。1.3 例子public interface Shape { public void dra原创 2017-03-09 10:02:25 · 18467 阅读 · 3 评论 -
写好Java代码的30条经验总结
成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的。下面就让我们来看看代码编写的30条建议吧。(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:ThisIsAClassNamethisIsMethodOrFieldName若在定义中出现了常数初始化字符,则大写s转载 2017-02-15 21:30:42 · 237 阅读 · 0 评论 -
Java 程序员不容错过的开发趋势
当涉及到代码时,有很多热门话题,并且与时俱进总是潮流所向。如果你想知道如何分离糟粕和精华,那么我们已经准备就绪,只欠各位阅读下文的东风。在接下来的内容中,我们将查看2016年的热点,以及今年会更热的热点。当然说的是Java方面的。好的,那就启航吧。Java 9,你真好,你让我神魂颠倒首先从Java 6中的一个bug说起,这个bug在Java转载 2017-02-15 21:28:04 · 405 阅读 · 0 评论 -
新JEP将简化Java类型变异
新的JEP Candidate旨在简化处理Java中复杂的类型变异的概念。这个新的JEP Candidate可能会在Java 10中推出,提供了在定义的泛型类型中指定目标对象默认变异的方法,而不是在泛型类型实例化时通过通配符指定。这个新方案并不会代替通配符,而是减少对通配符的需求。类型变异这个概念对于很多开发人员来说仍然比较模糊,在Java中通过不太普及的通配符来解决这个问题并转载 2017-02-15 21:17:58 · 860 阅读 · 0 评论 -
Java面试题集
相关概念面向对象的三个特征封装,继承,多态.这个应该是人人皆知.多态的好处允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点:可替换性:多态对已存在代码具有可替换性.可扩充性:增加新的子类不影响已经存在的类结构.接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或者重写转载 2017-02-21 11:24:41 · 502 阅读 · 0 评论 -
Java面试题全集(四)
110、使用标签库有什么好处?如何自定义JSP标签? 答:使用标签库的好处包括以下几个方面: - 分离JSP页面的内容和逻辑,简化了Web开发; - 开发者可以创建自定义标签来封装业务逻辑和显示逻辑; - 标签具有很好的可移植性、可维护性和可重用性; - 避免了对Scriptlet(小脚本)的使用(很多公司的项目开发都不允许在JSP中书写小脚本)自定义JSP标签包括以下转载 2017-03-01 09:20:56 · 917 阅读 · 0 评论 -
Java NIO
在本篇博客中,笔者可能会因为代码长度的关系,不去做关闭资源等操作,读者要自己注意0.前言NIO是java1.4新引入的Java I/O类库,其目的在与提高速度,尤其是在文件IO与网络IO当中。NIO与IO的不同之处就在于NIO是面向缓冲区的,IO是面向流的。NIO是java中比较难懂的部分,虽然目前我在Android当中并没有使用过(经历浅),但是大名鼎鼎的OkHttp可以用NIO转载 2016-08-09 09:23:18 · 251 阅读 · 0 评论 -
进程和线程
今天我们来讲解Java中的第二大块——多线程。要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在的。什么是进程?通过任务管理器我们就看到了进程的存在。而通过观察,我们发现只有运行的程序才会出现进程。进程:就是正在运行的程序 进程是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源。转载 2016-08-09 09:19:23 · 255 阅读 · 0 评论 -
Java实现怎样hashcode
下面这段话摘自Effective Java一书:在程序执行期间,只要equals方法的比较操作用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法必须始终如一地返回同一个整数。如果两个对象根据equals方法比较是相等的,那么调用两个对象的hashCode方法必须返回相同的整数结果。如果两个对象根据equals方法比较是不等的,则hashCode方法不一定得返回不同的整数原创 2016-08-30 16:59:27 · 2107 阅读 · 0 评论 -
Java软件工程师就业思维图(2016年版)
Java软件工程师就业思维图(2016年版)想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格JAVA软件工程师所要具备的。一、专业技能1、熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Sock转载 2016-08-19 13:23:39 · 652 阅读 · 0 评论 -
Java 远程通讯技术及原理分析
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了。1转载 2016-08-27 14:16:06 · 499 阅读 · 0 评论 -
Java 快速排序
package com.algorithms;import java.util.Arrays;import java.util.Random;public class QuickSort { private static int count = 0; public static void quickSort(Integer[] arr, int l, int r) {原创 2016-08-02 17:48:21 · 634 阅读 · 0 评论 -
Java 实例
Java 环境设置实例Java 实例 – 如何编译一个Java 文件? 书写源代码------>编译------->运行---->结束。javac Hello.javaJava 实例 – Java 如何运行一个编译过的类文件? java HelloJava 实例 – 如何执行指定class文件目录(classpath)? java -classpath C:\原创 2016-08-16 14:46:23 · 328 阅读 · 0 评论 -
Java 专业词汇汇总
1.POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造 的简称。2.PO(Persistant Object)持久对象,在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常 对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简原创 2016-07-17 09:36:02 · 1434 阅读 · 1 评论 -
实例详解Spring MVC入门使用
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller).通过分层使开发的软件结构更清晰,从而达到开发效率的提高,可维护性和扩展性得到提高.spring提供的MVC框架是在J2EE Web开发中对MVC模式的一个实现,本文通过实例讲解一下Spring MVC 的使用.转载 2016-07-17 08:57:36 · 941 阅读 · 0 评论 -
Java8里请不要再使用循环语句
正如我之前所写的,Java 8中的新功能特性改变了游戏规则。对Java开发者来说这是一个全新的世界,并且是时候去适应它了。在这篇文章里,我们将会去了解传统循环的一些替代方案。在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做。这正是循环的不足之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环转载 2016-07-25 10:00:33 · 1621 阅读 · 0 评论 -
Java 8 Null 处理
如何预防 Java 中著名的 NullPointerException 异常?这是每个 Java 初学者迟早会问到的关键问题之一。而且中级和高级程序员也在时时刻刻规避这个错误。其是迄今为止 Java 以及很多其他编程语言中最流行的一种错误。Null 引用的发明者 Tony Hoare 在 2009 年道歉,并称这种错误为他的十亿美元错误。我将其称之为自己的十亿美元错误。它的发明是在转载 2016-07-23 11:27:01 · 408 阅读 · 0 评论 -
Java 8 数据流教程
这个示例驱动的教程是Java8数据流(Stream)的深入总结。当我第一次看到StreamAPI时,我非常疑惑,因为它听起来和Java IO的InputStream 和 OutputStream一样。但是Java8的数据流是完全不同的东西。数据流是单体(Monad),并且在Java8函数式编程中起到重要作用。在函数式编程中,单体是一个结构,表示定义为步骤序列的计算。单体结构的类型定义了它对转载 2016-07-23 11:34:20 · 1314 阅读 · 0 评论