JAVA
文章平均质量分 75
StackOverFlower
18年硕士毕业,就职于字节跳动,直播中台研发,负责榜单、红包等服务。
展开
-
String直接赋值和new一个对象的理解
我们直接来看两句代码 String str1 = new String("abc"); String str2 = "abc"; System.out.println(str1 == str2); //输出false首先,既然有new这个关键字,那么一定要在堆内存中开辟空间,存放数据。所以 str1 指向的是堆内存中原创 2017-05-05 18:50:57 · 5576 阅读 · 0 评论 -
Java final关键字和String常量 不可变的理解
final首先来说说final。对于基本数据类型的变量,一旦用final修饰,就表示这个变量不能被再次赋值。对于对象形的变量,指的是这个引用不可变。而这个引用指向的堆内存区域中的值是可以变的。例如: final List list = new ArrayList(); list.add(1); list.add(2);上面定义了List类型的集合对象,我们知道上面代码的第原创 2017-05-05 18:31:27 · 2062 阅读 · 2 评论 -
集合类Collections.sort()的源码分析
微博面试的时候一个美女工程师问我这个问题,无奈没看过。她说这个实现非常的经典,推荐我看看。所以趁着周末,赶紧看看。如下图所示,看到它其实是最终还是用的数组的Arras.sort()方法。这个方法里面涉及到两个重要的方法,一个是数组的sort()方法,另外一个就是listIterator方法。 public static > void sort(List list) {原创 2017-05-14 00:40:47 · 734 阅读 · 0 评论 -
集合迭代器 listIterator()
直接来看代码:1、遍历注意获取listIterator迭代器之后,必须调用next()方法,才算进入到list的第一个元素。代码中 iter,next(),就是为了让迭代器只向list的第一个元素。所以,可以理解成,直接获取迭代器后,迭代器的对象指向的是一个head节点,它的下一个才是开始遍历的元素。import java.util.LinkedList;import java.ut原创 2017-05-14 14:51:30 · 2393 阅读 · 0 评论 -
经典排序算法 - 计数排序Counting sort
经典排序算法 - 计数排序Counting sort注意与基数排序区分,这是两个不同的排序计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长大体分两部分,第一部分是拉选票和投票,第二部分是根据你的票数入桶看下具体的过程,一共需要三个数组,分别是待排数组,票箱数组,和桶数组var unsorted = new int[转载 2017-05-14 11:27:49 · 822 阅读 · 2 评论 -
Java关键字final的理解
ava中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。final关键字的含义?final在Java中是一个保留的关键字,可以原创 2017-04-22 20:26:07 · 254 阅读 · 0 评论 -
分布式消息队列RocketMQ源码分析之3 -- Consumer负载均衡机制 -- Rebalance
同Kafka一样,RocketMQ也需要探讨一个问题:如何把一个topic的多个queue分摊给不同的consumer,也就是负载均衡问题。在讨论这个问题之前,我们先看一下Client的整体架构。Producer与Consumer类体系从下图可以看出以下几点: (1)Producer与Consumer的共同逻辑,封装在MQClientInstance,MQClientA转载 2017-04-21 21:44:06 · 570 阅读 · 0 评论 -
Java并发之CountDownLatch的使用和源码解析
CountDownLatch构造方法它在初始化时候,可以通过构造函数新建一个类似于计数器的功能。 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(coun原创 2017-05-03 13:13:03 · 398 阅读 · 0 评论 -
Java中的接口和抽象类的区别联系
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final (这里需要说一点,既然一个变量被final修饰了,那么这个变量就是一个常量!!!!!变量必须初始化成常量!!!!!)下面比较一下两者的语法区别:1.抽象类可以有构造方法,原创 2017-05-05 19:29:37 · 321 阅读 · 0 评论 -
从输入 URL 到页面加载完成的过程中都发生了什么事情?
为了便于理解,我将整个过程分为了六个问题来展开。第一个问题:从输入 URL 到浏览器接收的过程中发生了什么事情?从触屏到 CPU首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互。触摸屏一种传感器,目前大多是基于电容(Capacitive)来实现的,以前都是直接覆盖在显示屏上的,不过最近出现了 3 种嵌入到显示屏中的技术转载 2017-04-25 13:11:00 · 2317 阅读 · 0 评论 -
从浏览器输入URL到网页加载完成,发生了什么?
这个我打算分为两部门来说。第一部分是从键盘输入到屏幕显示URL;第二部分是按下回车后,到页面加载的过程。第一部分在(),本文将着重讨论第二部分。一、DNS解析DNS解析的过程是一个先在本地机器上找,然后去网络上找的过程。首先,会先去浏览器缓存中查找,没有就去本机的hosts文件找。如果都没找到相应域名的ip,那么就去网络上找。网络中查找的第一步就是先去本地的路由器找,本地路由器原创 2017-04-25 13:11:16 · 752 阅读 · 0 评论 -
Java集合类Set的add方法妙用
关于这个Set方法的妙用,主要在于Set集合的add方法。我们知道Set集合是可以去重的,就是没有相同的元素。在执行add方法时候,如果这个元素已经在set中存在,那么就返回false,否则返回true。所以,我们可以根据返回值,来确定当前添加的元素是否已经在set中存在。这个是在leetcode做一道数独问题时候,碰到的,感觉很不错。原题:https://leetcode.com原创 2017-08-24 00:40:30 · 10438 阅读 · 0 评论 -
Java 中的Date(获取一天的开始和结束时间)
这两天写定时任务,需要每小时去执行和每天8点执行。如何从现在的时间,获取昨天的时间。现将代码整理如下 @Override @Scheduled(cron = CRON_EXPRESSION) public void execute() { LOG.info(String.format("定时查询还款总额任务开始,时间:%s!",new Date()原创 2017-07-25 14:57:41 · 27127 阅读 · 2 评论 -
【JDk源码解析之一】ArrayList源码解析
1.ArrayList的继承关系如图所示:2.宏观上说,ArrayList是基于动态数组实现的,数组具有按索引查找的特性,所以访问很快,适合经常查询的数据。3.具体源码解析。 为什么说ArrayList是动态数组,这个可以看它的构造函数。如下图所示,有两个构造方法,存放元素的elementData是一个数组,同时被初始化。ArrayList的放的元素就是放 在这个原创 2017-04-15 02:12:21 · 5104 阅读 · 3 评论 -
Spring之bean加载源码阅读工程搭建
一、spring.xml<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/conte原创 2017-06-26 20:14:28 · 473 阅读 · 0 评论 -
SpringAOP的实现原理
AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与原创 2017-06-24 15:58:21 · 2091 阅读 · 0 评论 -
springMVC使用@ControllerAdvice实现异常处理
@ControllerAdvice注解的类,会被作用于@RequesMapping注解的方法上。先来看看它的基本实现@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface ControllerAdvice {被Component注解,说明原创 2017-06-24 15:12:28 · 4395 阅读 · 0 评论 -
java---interrupt、interrupted和isInterrupted的区别
1、interrupt() interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出interruptedException的方法)就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态”,就会抛出中断异常。原创 2017-07-11 16:04:52 · 463 阅读 · 0 评论 -
Java:Object类详解
Java 问答:终极父类Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的。例如,新手可能不会理解Object类。这篇文章分成三个部分讲跟Object类及其方法有关的问题。上帝类问:什么是Object类?答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类。当然,数组也继承了Object类转载 2017-05-16 22:45:57 · 491 阅读 · 0 评论 -
Java利用BlockingQueue实现生产者和消费者模式
生产者import java.util.concurrent.BlockingQueue;public class Producer implements Runnable { private BlockingQueue queue; public Producer(BlockingQueue q){ this.queue=q; }原创 2017-04-26 00:07:16 · 581 阅读 · 1 评论 -
一共有n个人,给定m对好友关系,好友的好友也算一个朋友圈,问n个人中一共有几个朋友
题目:假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋友圈,结果原创 2017-04-25 21:46:21 · 2336 阅读 · 0 评论 -
各种排序算法比较
各种排序算法比较 各种常用排序算法类别排序方法时间复杂度空间复杂度稳定性复杂性特点最好平均最坏辅助存储 简单 插入排序直接插入O(N)原创 2017-05-08 12:17:51 · 347 阅读 · 0 评论 -
Java线程池
java线程池。在jdk5之后为我们提供了线程池,只需要使用API,不用去考虑线程池里特殊的处理机制。jdk5线程池分好多种,固定尺寸的线程池、可变尺寸连接池等。常用的是ThreadPoolExecutor,它的构造方法如下:public ThreadPoolExecutor(int corePoolSize, int max原创 2017-04-30 21:50:45 · 1384 阅读 · 0 评论 -
Java反射机制
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。【翻译于 官方文档】本篇将从以下几个方面讲述反射的知识:calss的使用方法的反射构造函数的反射成员变量的反射一、什么是class类在面向对象的世界里,万物皆对象。原创 2017-04-16 13:01:10 · 662 阅读 · 1 评论 -
实习小记2
1.Json、ajax请求 前端的js,发送json请求 function loginCheck(){ $.ajaxSettings.async = false; var loginStatus = true; if(validateForm_loginForm()){ $.getJSON("login原创 2016-07-07 13:57:29 · 265 阅读 · 0 评论 -
实习笔记4
1. var file = document.getElementById("attachmentId"); // 添加,必须上传文件 if (file.value == ""){ alertMsg("请选择您需要上传的文件!","0"); return f原创 2016-07-18 10:12:55 · 222 阅读 · 0 评论 -
java的comparable接口和comparator接口
java的comparable接口和comparator接口原创 2016-04-22 10:18:26 · 296 阅读 · 0 评论 -
24点问题的java实现
24点问题的java实现转载 2016-04-21 21:25:07 · 871 阅读 · 0 评论 -
什么是java本地方法(Native Method)
java本地方法介绍转载 2016-04-21 09:01:07 · 1056 阅读 · 0 评论 -
HibernateTemplate的使用方法
HibernateTemplate的使用方法转载 2016-04-27 08:58:39 · 683 阅读 · 0 评论 -
java学习笔记(2)
Java中String和char,int和Integer的相互转换原创 2016-03-31 09:28:22 · 343 阅读 · 0 评论 -
java中各种代码块的加载顺序
静态代码块 构造函数原创 2016-03-30 17:01:56 · 661 阅读 · 0 评论 -
常用排序算法的实现和分析
冒泡排序,快速排序,希尔排序,归并排序,堆排序。原创 2016-03-31 17:03:39 · 305 阅读 · 0 评论 -
在Java中如何遍历Map对象
在Java中如何遍历Map对象转载 2016-03-31 11:13:32 · 256 阅读 · 0 评论 -
项目中的一些函数总结
1. String.lastIndexOf();System.out.println("abcdec".lastIndexOf("c")); 输出52. subString();substring(参数)是java中截取字符串的一个方法有两种传参方式一种是public String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字原创 2016-04-22 08:48:20 · 437 阅读 · 0 评论 -
深入理解Java多态性
在复习Java多态性的时候,无意中看到了这个文章,瞬间感觉有种世界观都被颠覆的感觉。所以特意转来做个分享。(一)相关类class A ...{ public String show(D obj)...{ return ("A and D"); } public String sh转载 2017-01-06 14:32:24 · 238 阅读 · 1 评论 -
数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
原文链接:http://blog.csdn.net/fansongy/article/details/6798278/一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。性质:1、非空二叉树的第n层上至多有2^(n-1)个元素。2、深度为h的二叉树至多有2^h-1个结点。满二叉树:所有终端都在同一层次,且非终端转载 2017-01-10 22:02:02 · 459 阅读 · 0 评论 -
List Map Set的比较
List特点:元素有放入顺序,元素可重复Map特点:元素按键值对存储,无放入顺序Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)List接口有三个实现类:LinkedList,ArrayList,VectorLinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身原创 2017-04-15 22:57:47 · 271 阅读 · 0 评论 -
【JDk源码解析之三】HashMap源码解析
1.HashMap的实现了Map接口,继承于AbstractMap2.我们常说HashMap是数组加链表的实现形式,那么就具体来看看。HashMap的主要属性定义如下图。先说数组+链表,数组只的就是table[]数组,这个数组是Entry类型的,而Entry类类型于我们常用的Node节点,Entry有(k,v,next)属性。默认初始化容量为13.具体方法分析3.1 构原创 2017-04-15 19:27:30 · 418 阅读 · 0 评论 -
【JDk源码解析之四】Vector源码解析
1.Vector也是集合类,继承和实现方式如下,它也是实现了list接口。很多博客说Vector和ArrayList基本都是一样的,只不过Vector是线程安全的。但是具体是什么样的,还需要简单看看源码。当然其实还是有区别的,只是区别不大。2.Vector的属性定义具体的三个属性 解释看图中注释。Vector没有采取ArrayList临界值扩容的办法,而是每次不够的时候,直接根据c原创 2017-04-16 00:32:42 · 374 阅读 · 0 评论