- 博客(83)
- 收藏
- 关注
原创 剑指Offer-24. 反转链表
题目描述反转链表思路和leetcode的206. Reverse Linked List一样迭代:记录当前结点的下一个结点反转指针继续下一个结点返回反转后的头结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { ...
2018-04-11 09:28:29
205
原创 剑指Offer-9. 用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路stack1用来存元素,stack2存从stack1中弹出的元素,这样再从stack2取时,顺序就相当于队列的先进先出。import java.util.Stack;public class Solution { Stack<Integer> stack1...
2018-04-11 09:27:57
144
原创 剑指Offer-9. 斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39思路如果用递归做,思路很简单,但是效率太低,时间复杂度是以n的指数的方式递增的。递归是从上往下,可以考虑从下往上,从f(0)+f(1)开始计算,可以达到O(n)public class Solution { public int Fibonacci(int ...
2018-04-11 09:27:23
190
原创 剑指Offer-8. 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路显然出这个题的目的肯定不是让我们用遍历数组找到最小值这种O(n)的方法。我们需要找到旋转数...
2018-04-11 09:26:53
166
原创 剑指Offer-6. 从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。思路用栈(不会改变原链表的结构) 将结点放入栈从栈中取出,放到链表中返回链表/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* ...
2018-04-11 09:26:20
164
原创 剑指Offer-5. 替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路用StringBuilder重建一个替换后的字符串public class Solution { public String replaceSpace(StringBuffer str) { ...
2018-04-11 09:25:24
159
原创 剑指Offer-4. 二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:总是选取数组的右上角的元素,如果该元素比target大,就删掉这一列(因为列是递增顺序排列的);如果该元素比target小,就删掉这一行;否则,就找到target。这样逐步缩小查找范围,直到找到targe...
2018-04-11 09:24:46
147
原创 剑指Offer-3. 数组中重复的数字
题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是第一个重复的数字 2。思路将值为i的元素放到下标为i的数组位置上,如果有重复的元素,必将产生冲突,那么产...
2018-04-11 09:23:24
157
原创 程序的健壮性(以大数相乘为例)
以大数相乘为例,思考怎样写出一个健壮的程序大数相乘思路就是采用模拟手乘的方法,没有难度,本文重点不在于怎么写出大数相乘的算法。我是想通过写这么一个方法,告诉自己写程序时要保证程序的健壮性,包括代码的可维护性、易读性、对输入的合法性的判断、对边界的考虑等等。首先要考虑输入的合法性:正负数、空字符串、用户也可能输入“002321”这样的数字,或者输入非法字符以及包含字母的字符串。...
2018-04-09 17:20:08
828
原创 JCIP阅读笔记之线程安全性
本文是作者在阅读JCIP过程中的部分笔记和思考,纯手敲,如有误处,请指正,非常感谢~可能会有人对书中代码示例中的注解有疑问,这里说一下,JCIP中示例代码的注解都是自定义的,并非官方JDK的注解,因此如果想要在自己的代码中使用,需要添加依赖。移步:jcip.net一、什么是线程安全性?当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么这个类就是线程安全的。示例:一个无...
2018-04-06 21:43:39
1047
1
原创 Java 创建二叉树
在leetcode做了那么多道树的题,却发现自己连创建二叉树都写不出来,绝望.jpg,点开leetcode的debug界面,看到人家写的创建二叉树的代码,简洁又优雅,学习 public static TreeNode stringToTreeNode(String input) { // 处理"[","]" input = input.trim();...
2018-04-04 10:27:39
2013
原创 关于垃圾回收
1. GC发生在什么时候?GC主要分为young/minor gc和full gc。 young gc触发的时机是:在新生代的Eden区满了之后,会发生young gc,同时在young gc时会有一部分存活的对象晋升到old gen中,所以在young gc后,old gen占用量会提升一些。full gc触发的时机涉及到空间分配担保。在进行young gc前,虚拟机会先检查old g...
2018-03-30 12:40:22
268
原创 Java Collections Framework学习笔记之HashSet
HashSet其实是借助HashMap实现的 public HashSet() { map = new HashMap<>(); }所以HashSet和HashMap肯定有很多关联的地方,不同之处就在于HashSet是只能存储相同类型的对象,而HashMap可以存储键值对。HashMap是不保证顺序的,而HashSet内部是用HashMap...
2018-03-30 11:20:28
162
原创 华为2018实习生机试题目
更了一下第三题题解,之前考虑的不全面100分题目 emmm 有点抽象,扯到什么无线通信最大径啥的,不过抽象出来就是这个意思:找一组数字中(共21个),四个连续的数字的和最大,然后输出这四个数字的第一个数字的序号。如果有和是相同的,就输出那个序号小的。最直接的思路就是: 用map存数字和对应下标,然后逐个求出四个数字的和,再比较大小200分标准键盘和自然键盘,小...
2018-03-28 22:00:23
5175
原创 Java中的反射机制
一、什么是反射?对于程序员来说,应该很少需要直接使用反射工具;之所以在语言中提供它们,是为了支持其他Java特性,比如对象序列化、Java Beans以及RMI。还有就是在很多框架中,也是应用到了反射机制。在初学时,只知道这是个生成驱动实例的语句,而这其实就是应用了反射 // Load the driver Class.forName( "su...
2018-03-15 21:51:47
177
原创 java.lang.Object源码阅读笔记
一、官方文档的描述1. getClass()public final native Class<?> getClass(); Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a superclass. All objects...
2018-03-14 08:40:03
169
原创 对CAS的一点个人理解
在Java中,JDK 1.5之后可以使用CAS(Compare-and-Swap)操作。CAS的思想就是:先将旧期待值与主内存中值作比较,如果相同,那么就接受新的值,否则就不进行任何操作,这种处理过程是一个原子操作。CAS帮助我们实现非阻塞同步策略,这是一种乐观并发策略,乐观就是指它总是假设其他线程不会打扰自己,所以会先进行操作,如果有冲突,再采取一定措施,比如一直重试直到成功为止。这种策略的...
2018-03-10 12:45:42
367
原创 volatile关键字分析
之前,我对volatile的理解是很浅显的,实际操作时就出错了。今天来深入了解一下volatile这个关键字。一、volatile的两个语义volatile关键字有两个语义: 保证可见性禁止指令重排序优化可见性:指的就是在多线程环境中,如果一个线程修改了某个变量的值,新值对于其他线程来说是可以立即得知的。我们知道,Java内存模型是通过在变量修改后将新值同步回主内存,在遍历读取前从...
2018-03-03 18:46:17
277
1
原创 Apache Shiro简介
想做一个关于权限管理的系统,了解到Apache Shiro比较适合,那么开始着手学习吧!一、Apache Shiro简介Apache Shiro是一个简单易用又强大的Java开源安全管理框架。四大基石:Authentication: 验证用户身份,通常称为用户“登录”Authorization: 权限控制Cryptography: 加密Session Management: ...
2018-03-02 16:40:43
416
原创 Java Collections Framework学习笔记之HashMap
Java Collections Framework学习笔记之HashMap一、HashMap简介我们看一下官方文档中对HashMap的描述 * Hash table based implementation of the &lt;tt&gt;Map&lt;/tt&gt; interface. This * implementation provides all of th...
2018-02-20 22:01:12
360
原创 Java中四种遍历集合的方法
Java中四种遍历集合的方法迭代是集合中进行的基本操作之一。基本上,迭代是从一个到另一个集合比如,你想在一个班级中遍历所有的学生打印出他们的名字或找到在最近的考试中的最高分是谁。或者你想遍历一组数字计算和或平均值。这样的操作在编程中是十分常见的。Java提供了四种在集合上遍历的方法,包括循环,迭代和forEach(从Java 8开始)before going to each kin...
2018-02-19 10:44:35
27673
1
原创 Java Collections Framework学习笔记之Collection接口
Java Collections Framework学习笔记之Collection接口文章中使用的图均源: http://www.codejava.net我们来一步步学习Collection的源码从图中可以看出Collection接口继承了Iteratable接口,在介绍Collection之前,我们需要先了解一下Iteratable接口,而实现Iteratable接口的集合必须提...
2018-02-18 19:10:36
448
原创 Java Collections Framework学习笔记之List接口
Java Collections Framework学习笔记之List文章中使用的图均源: http://www.codejava.net下图是List API的整体层次图 我们先看一下文档中对List的描述:/** * An ordered collection (also known as a <i>sequence</i>). The use...
2018-02-18 19:10:06
240
原创 LinkedList和ArrayList的区别
一、前置技能:线性表要想了解ArrayList和LinkedList,首先要知道线性表的概念。线性表是最常用且最简单的一种数据结构,简单说,一个线性表是n个数据元素的有限序列。线性表有两种存储结构:顺序存储结构和链式存储结构 顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻。 优点:可以随机存取缺点:插入/删除需要移动大量元素链式存储结构的特点是不要求逻辑上相邻的...
2018-02-18 19:09:33
266
原创 Java ConcurrentModificationException异常剖析
为什么会出现ConcurrentModificationException异常?之前在“Java Collections Framework学习笔记之Collection接口”中在介绍Iterator时有提到过ConcurrentModificationException这个异常。我们被提醒:在直接使用Iterator(不是通过增强for循环间接使用)时,要记住一个基本法则:如果对正在被迭代的...
2018-02-18 19:08:56
282
原创 使用Sublime Text 3作为Markdown编辑器
最近做笔记的时候一直用的有道云笔记的Markdown,确实安全也挺漂亮的,但是讲真,有点慢了,有时候打字快了就跟不上,所以考虑用个本地的Markdown编辑器,因为有时候写程序也用Sublime Text,所以就干脆下个插件,也用其当作Markdown编辑器吧。首先下载Package Control来帮助安装插件 Installation-Package Control下载完成后,点击 ...
2018-02-16 17:27:00
1547
原创 常量池初探
一、有以下三大常量池:Class文件中的常量池 每个.java文件编译成.class文件后,都会产生当前类独有的常量池,即我们介绍的第一大常量池。 这个常量池主要存放两类常量 字面量(Literal) 包括文本字符串、final类型的常量符号引用(Symbolic References) 包括三类 类和接口的全限定名字段的名称和描述符方法的名称和描述符运行时常量池...
2018-02-13 13:39:45
183
原创 详解Java中的equals()和==
1. 先来讲一讲equals()很多类中都有自己的equals()方法,但他们其实都是覆写的java.lang.Object类中的equals()方法。 因为Java中所有的类都是继承于java.lang.Object这个类的,而equals()方法是定义在java.lang.Object这个类中的,定义描述如下: public boolean equals(Object ob...
2018-02-12 17:32:24
396
原创 java.lang.String源码阅读笔记
一、String类简介The {@code String} class represents character strings. All string literals in Java programs, such as {@code “abc”}, are implemented as instances of this class. String表示字符串,Java中所有...
2018-02-11 22:38:14
350
原创 Java基本数据类型
一、8种基本数据类型简介Java语言共提供了8种原始的数据类型(byte, short, int, long, float, double, char, boolean) 这些数据类型不是对象,他们一旦被声明后就会立刻在栈上分配内存空间其他类型均为引用类型,指向对象实体,在声明时不会被分配内存空间,只是存储了一个内存地址。不同数据类型对比我们直接从基本数据类型的封装类中的...
2018-02-11 11:51:38
264
原创 虚拟机类加载的时机
虚拟机类加载的时机一个类编译完成之后,下一步就需要开始使用类,如果要使用一个类,肯定离不开JVM。在程序执行过程中JVM通过加载,连接,初始化这3个步骤完成。其中连接包括验证、准备、解析三个阶段。1. 类的生命周期共七个阶段: 加载、验证、准备、解析、初始化、使用、卸载其中,验证、准备、解析3个阶段统称为连接确定顺序的五个阶段: 加载:通过类加载器完成(除了数组类,数组类...
2018-02-10 21:23:08
160
原创 Object类中的equals()与hashCode()
一、官方文档的描述1. getClass()public final native Class<?> getClass(); Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a superclass. All objects...
2018-02-07 22:31:17
292
原创 BFS & DFS(Java实现)
BFS 广度优先搜索 (Broadth First Search)类似于树按层次遍历的过程要求顺次访问为了顺次访问路径长度为2、3、…的顶点,需要使用队列记录已访问的顶点时间复杂度:O(n + e) e为无向图中边的数或有向图中弧的数 /** * Broadth First Search * @param graph 用于存放图中每个结点的邻接表
2018-02-05 17:57:43
6008
原创 java.lang.Thread源码阅读笔记
1. 线程简介 A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. 一个thread是程序中一个线程的执行。JVM允许应用在并...
2018-02-04 19:47:33
670
原创 简述Java内存模型
一、物理机对并发的处理方案在介绍Java内存模型前,我们需要先了解一下物理机对并发的处理方案由于计算机处理器和存储设备的运算速度有几个数量级的差别,处理器快速的计算完成后,总是需要等待I/O操作的完成,在等待期间处理器无法进行其他操作,因此十分浪费资源处理器菌:( ▼-▼ )你好慢噢 I/O设备酱:〒_〒我也没有办法酱所以现代计算机系统都加入了一层读写速度尽可能接近处理器运
2018-02-02 21:41:41
496
原创 单例模式
总结了一些单例模式的写法,当然,各种写法有利有弊,推荐方式三、四、五单例模式保证类的对象在内存中只有一个方式一: 饿汉法 但是这样容易占用较多资源/** * 第一次引用该类的时候就创建对象实例 * 不管实际使用时是否需要创建 * 但是这样容易占用较多资源 */public class Singleton { private Singleton...
2018-01-29 20:15:11
212
原创 防止表单重复提交
平时,如果网速较慢,用户提交表单后,如果服务器一段时间没有反应,用户很可能会再次点击提交,导致重复提交表单,因此开发中我们必须考虑到这一问题方法一:在javascript中防止表单重复提交 script type="text/javascript"> var isCommited = false; function dosubmit() {
2018-01-29 20:12:04
189
原创 HTTP Status code
常见状态码1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码 代码 说明 100 000(继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (
2018-01-25 17:35:28
368
原创 IDEA配置Tomcat常见问题(JMX连接服务器通信错误)
第二次碰见这个问题了,mark一下 配置tomcat时经常忘记配vm options,这里不配置的话会报错,我这边是这样 错误信息:JMX连接服务器通信错误:service:jmx:rmi 配置如下: VM options里面填上idea64.exe.vmoptions文件里的内容即可 这个文件在idea安装目录下bin中...
2018-01-24 22:20:54
7286
2
原创 HBase(1.2.6)+Eclipse+maven (单机模式)
一、先启动HBase,然后打开HBase shell二、在Eclipse上配置HBase1. 新建一个maven项目2. 导入hbase相关的jar3. 在该项目下创建一个新文件夹conf,里面放入hbase的相关配置文件hbase-site.xml(hbase-site.xml的配置参见上一篇文章)4. 右键项目 Buid Path->Configure build path在Libraries
2017-10-30 22:59:44
1451
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅