
Java
文章平均质量分 78
Firehotest
这个作者很懒,什么都没留下…
展开
-
Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
本文摘录自:http://blog.youkuaiyun.com/ns_code/article/details/17487337Java 5中引入了新的锁机制——java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantReadWriteLoc转载 2017-03-05 05:20:03 · 1819 阅读 · 0 评论 -
23rd Feb: 数组(搜索专题)和二叉树(Path Sum专题)
162. Find Peak ElementA peak element is an element that is greater than its neighbors.Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.The array原创 2017-02-25 00:03:15 · 501 阅读 · 0 评论 -
25th Feb: LeetCode 4 Median of Two Sorted Arrays
4. Median of Two Sorted Arrayshere are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(原创 2017-02-26 08:34:41 · 344 阅读 · 0 评论 -
Java Notes: String and StringBuilder
两者最大的区别是:immutable和mutable. 调用String的方法返回的永远是一个新的String。调用该方法的对象是不会改变的。但是StringBuilder的对象调用方法可以改变StringBuilder本身。利用StringBuilder搭建好String后,可以利用new String(StringBuilder strb)来创建一个最终的String.原创 2017-03-04 06:57:44 · 399 阅读 · 0 评论 -
Java Notes: Loops and Arrays & Methods and Class
Java的数组在内存中是怎么样的?例如:int[] grades = new int][]{70,50,66,43,99,85,73,};grades是一个具有“自动存储(automatic storage)”的变量。所谓“自动存储”,意思是这个对象的存储位置取决于其声明所在的上下文。如果这个语句出现在函数内部,那么它就在栈上创建对象。如果这个语句不是在函数内部,而是作为一原创 2017-02-04 06:39:35 · 340 阅读 · 0 评论 -
Java Notes: Some Tricky Problems in Java
1/ About the modulus:对于求余运算需要注意,当被除数是一个负数的时候,余数永远都是负的。所以你判断是否为奇数的条件不能是:x % 2 == 1,而是 x % 2 != 0。2/ 如何提取出一个数的个、十...位(从低到高)public Class Example { public static void main(String[]原创 2017-02-04 06:17:33 · 360 阅读 · 0 评论 -
Notes: Initialization and CleanUp(初始化与清理)
初始化与清理的问题是设计编程“安全”性的两大问题。Java通过构造器(Constructor)来初始化对象引用,和自动垃圾回收机制(garbage collection)替程序员分忧这两部分的问题。------------------------------------------------------------------------------C程序的初始化与清理问原创 2016-07-27 16:49:13 · 734 阅读 · 0 评论 -
Notes: Java的方法重载机制和良好的编程习惯
方法重载的机制是通过方法名相同,但形参不同的方式。所有方法都要求拥有独一无二的参数类型列表。其实参数的顺序也可以区分方法,但是良好的编程习惯告诉我们不能那么做,否则代码很难读懂和维护。1) 重载中的基本类型(primitive)向上转型机制:基本类型能从一个“较小”的类型自动提升至一个“较大”的类型。首先我们得了解,基本类型从小到大的顺序:byte原创 2016-07-28 01:00:46 · 382 阅读 · 0 评论 -
Notes: Exceptions in Java(Java中的异常处理)
Java的异常机制是Java作为一门高级语言比C和其他早期语言先进的地方。通过在方法声明异常和在方法抛出异常的方法,可以大大增强程序的鲁棒性。具体体现在:C和其它早期语言反映运行时出现错误通常通过让方法(函数)返回某个特殊值(最常用的是-1)。而且常常具有多种错误处理模式,而这些模式是基于约定俗成的基础上。所以,如果出现错误的时候,由调用方法的客户端程序员负责写问题的处理方法。这样做的原创 2016-08-03 17:17:36 · 754 阅读 · 0 评论 -
Java Notes: BlockingQueue and 生产者消费者模式
本文转载:http://www.infoq.com/cn/articles/java-blocking-queue阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程转载 2017-03-05 05:26:42 · 373 阅读 · 0 评论 -
Notes: Primitives Storage and Operator
There is something special about the storage realization of Java's number. Java uses the complement of positive number to store the negative number. For example, we use Integer class (int) to il转载 2016-09-07 01:36:38 · 481 阅读 · 0 评论 -
Operation System: 多线程笔记
这篇文章主要记录一些关于多线程的比较零散的内容。一、关于数据的可见性 & 内存屏障根据内存模型,数据被某一个核所利用之后,会存在其cache甚至寄存器当中。当这段程序更新这个数据之后,未必马上写入内存。此时,如果另一个线程(在另一个核上运行的内核态线程)读取这个数据,可能读到的还是旧的值。这时候,这个数据就是对另外的一个线程是不可见的。那么,vola原创 2017-11-10 03:06:19 · 486 阅读 · 0 评论 -
Java Notes: Java的多线程创建的两种方法以及Race Condition的解释
理解Java多线程的关键是理解好job-worker模式。job指的是具体一项工作的内容,譬如,搅拌水泥这件事情。可以找很多个worker来做。在Java当中,job就是runnable类,而thread类则是worker。线程的创建:所以,比较提倡的创建多线程的方法是:(1) 首先是创建一个job的内容(Runnable类)public MyRunna原创 2016-10-17 05:57:06 · 1409 阅读 · 0 评论 -
Java Notes: Synchronized的类锁和对象锁以及谈谈线性安全类
首先,我们需要明确一点认识:任何对象都存在一把锁。如果对象是一个人,那么锁就像ta保管的钥匙,有且只有唯一一根。这就是对象锁。如果一段代码被synchronized(object)包围了,证明一个线程如果想要执行这段代码,它要首先拿到object的钥匙。如果这把钥匙被其它的线程拿走了,那你就只能等其它的线程把这把钥匙换回来。如果object1和object2属于同一类的不同原创 2017-11-06 03:57:43 · 493 阅读 · 0 评论 -
5th Feb: 刷题笔记
************************************************************************************************************************** 感谢ZL同学的监督,是我坚持每天完成计划的动力原创 2017-02-06 14:25:49 · 505 阅读 · 0 评论 -
Notes: Garbage Collection in Java(Java的自动垃圾回收机制)
Java与C++的规定不同的地方:1)C++不允许在类成员定义的时候初始化;Java可以2)C++允许创建局部对象(存在栈上的对象),函数调用结束后回收;Java只能创建堆的对象,以为Java只能用new()来创建。3) C++需要自己去free之前new()出来的对象,否则就算指向它的指针被回收/ 销毁了,它还会一直在那里。但Java,JVM有自动的回收机制。你可以用System.g原创 2016-07-29 23:36:07 · 580 阅读 · 0 评论 -
Java Notes: Java的Iterable与Iterator,ComparableComparator
Iterator和Iterable:讲到Iterator和Iterable,不得不先提提设计模式里面的迭代器模式。回顾文章:http://blog.youkuaiyun.com/firehotest/article/details/51993922我们可以看到,迭代器模式的动机在于:使得我们可以用统一的接口去遍历数据结构,而不需要知道数据结构本身的构造。这体现了面向对象设计的封装性原创 2016-11-03 11:13:41 · 635 阅读 · 0 评论 -
Notes:关于String类和Object类的笔记
根据Java设计,所有的自定义类或者类库的类都是继承Object类的。所以,所有类的具有Object类的public方法。根据API文档,有如下:原创 2016-09-04 00:08:19 · 581 阅读 · 0 评论 -
Notes: Java的访问权限、组合/继承和多态
本文章对应《Thinking in Java》的6、7、8章内容。Chapter 6: Java访问权限限制的动机:方便库程序员修改工具类的具体实现而不用知会客户端程序员修改客户端代码。作为一个库程序员,你应该尽可能地把客户端程序员不需要知道的变量和方法以及辅助类都设为private,这样你就可以随心所欲地优化代码,只要你的暴露给客户端程序员的public方法声明是不变的。原创 2016-09-05 04:09:50 · 1433 阅读 · 1 评论 -
Notes:从Java编译器的角度看类加载过程
本文参考链接:http://blog.youkuaiyun.com/ns_code/article/details/18009455传统的编译器过程:词义、词法分析(识别token, 如int等标识,分析源代码) ---> 生成符号表(变量名、函数名等,在这一份编译器会为没有自定义构造函数的类添加默认构造函数) ---> 语义分析(检查变量是否先声明后赋值、类型是否匹配,异常是否得到转载 2016-07-30 00:17:47 · 589 阅读 · 0 评论 -
22nd Feb: 刷题笔记 Binary Tree & Binary Search Tree 专题
今天早上起来收到了BB的拒信。没想到题都答对了,却还是挂掉面试。痛定思痛,下次电面需要注意以下的几点:1/ 说话要咬字发音清楚,不卑不亢,不要太过于紧张,给人一种你很傻的感觉;2/ 你可以思考,思考的时候最好先说:Let me think for a moment. 3/ 复杂度分析的时候,如果不明显的题目,思考最差的情况的复杂度其它的就是运气的问题了,去TM的烙印原创 2017-02-23 04:58:44 · 622 阅读 · 0 评论 -
Java Notes:枚举 (Enumeration)的意义和使用
用枚举的意义在于什么?确保调用方法的时候,如果方法的参数只是某些常数,编译器仅仅进行普通的类型检查是不够的。需要让编译器确定这些常数是不是可以接受的范围内的。利用在博文:http://blog.youkuaiyun.com/firehotest/article/details/56008900中曾提到,Font的初始化方式如下:java.awt.Font bigFont = new F原创 2017-02-21 03:52:53 · 851 阅读 · 1 评论 -
Java Notes: 从内存看Java,异常处理
以以下程序作为例子:public class CustomerTest { public static void main(String[] args) { Customer[] list = new Customer[5]; Customer c = new Customer("Jeb", "Bush"); list[0] =原创 2016-10-07 10:04:29 · 522 阅读 · 0 评论 -
Java Programming Generals
关于内部类:内部类其实可以理解成一种特殊的数据成员。同样有private/ public之分。一般而言,都声明为private。static的内部类不能访问包含类的普通数据成员。关于定义数据结构:一般而言,定义数据结构,需要使用泛型。泛型在使用泛型的类定义构造函数时,不需要写。但是在外面使用该类名时,必须带上泛型的标志和声明。关于栈(stack)和队原创 2016-11-13 07:29:05 · 349 阅读 · 0 评论 -
Data Structure & Java: 堆、堆排序与PriorityQueue
堆的实质:堆其实是一棵特殊的完全二叉树。每一个结点的值都大于或者等于左右孩子结点的值(大顶堆),或者每一个结点的值都小于等于左右孩子结点的值(小顶堆)。对于完全二叉树,因为除了最后一层,其它的层都是满的。所以,一般对于平衡二叉树可以利用顺序存储结构(数组)。所以,对应完全二叉树的顺序存储结构:数组的i(index = i)结点的父结点下标就为(i – 1) / 2。它的原创 2016-11-17 03:43:44 · 487 阅读 · 0 评论 -
Notes: How to iterate a map in Java
There are four ways to iterate a map in Java. 1) Use the .entrySet() functionMap map = new HashMap(); for (Map.Entry entry : map.entrySet()) { System.out.println("Key = " + e转载 2016-09-07 01:45:15 · 377 阅读 · 0 评论 -
Google 编码风格之命名规范(备忘)
参考链接:http://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/naming/通用规则:所有函数、变量、类与文件命名尽量不要使用缩写,以方便理解。除了不容易引起歧义的,如DNS等。特殊规则:1) 类的命名单词首字母使用大写且不能包含下划线;函数命名同样是每个单词首字母大写且不转载 2016-07-22 14:02:10 · 9592 阅读 · 0 评论 -
Java: Threads pool
Why threads pool?Because by using thread pool, we can eliminate the overhead of creating and killing threads. Thread pool is used for get prepared to thread reuse. Here is some useful cont转载 2016-03-29 11:01:31 · 374 阅读 · 0 评论 -
Programming in Java: Multi-threads and interface vs abstract class
1) What is the difference of sleep() and wait()?from: http://www.cnblogs.com/plmnko/archive/2010/10/15/1851854.html1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用原创 2016-03-17 13:51:47 · 434 阅读 · 0 评论 -
Packaging in Java: Access right Control and OSGi
访问权限: Java的权限控制,public就是所有人都能去读取改变你的东西;默认不加的话就只有同一个社区(包)内的人可以去读取,改变你的东西;protected则是自己的孩子可以去读取和修改的(如果自己的孩子不在自己的社区内,还是不能修改默认的东西);private就是自己的。(继承同样受这样的限制)Here is another framework which dedicate原创 2016-03-16 21:41:32 · 522 阅读 · 0 评论 -
Java Notes: Java的抽象类和接口
基础语法:Java中的抽象类是在class之前,权限之后加个abstract。之所以说抽象,是因为其允许某个方法只声明签名和返回类型。而不必定义函数体。这种方法也称为抽象方法,需要在方法的权限后,加一个abstract。下面是语法例子:public/(defalut) abstract class Vehicle{ private seats; public abs原创 2016-10-02 10:13:16 · 440 阅读 · 0 评论 -
Java Notes: Containers
Containers aim to keep objects as groups. There are three main kinds of containers that we use in Java.1) Array; 2) Collection; 3) MapArray is a common tool. The main defect of array is it原创 2016-07-23 18:04:15 · 606 阅读 · 0 评论 -
Java Notes: GUI Development (Swing)
Java当中有两个GUI库,AWT和Swing。AWT是用非Java代码编写的库,所以对于不同的JVM有unconsistent的效果。但Swing作为一个Java编写的,不存在这个问题。但是Swing当中的事件控制,依然使用的AWT的库。AWT的引用:java.awt.Swing: javax.swing.Java的Swing和Servlet一样,都是使用Cook B原创 2017-02-21 03:19:15 · 516 阅读 · 0 评论 -
Java Notes: Java的this和static
this 关键字:Java调用非静态的成员方法的机制中需要将当前调用方法的对象传入方法,以识别是谁调用该方法。例如:public class Banana{ public void func(int i){ } public static void main(String[] args){ Banana a = new Banana(); Banana b = new原创 2016-07-29 16:06:47 · 350 阅读 · 0 评论 -
18th Feb: Bloomberg字符串题延伸
Problems are related to Reverse Words in a String: 186. Reverse Words in a String IIGiven an input string, reverse the string word by word. A word is defined as a sequence of non-space cha原创 2017-02-20 08:00:12 · 514 阅读 · 0 评论 -
18th Feb: 字符串处理(Bloomberg篇)
字符串处理类:1) First Unique Character in a StringGiven a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.Examples:s = "lee原创 2017-02-19 04:38:12 · 474 阅读 · 0 评论 -
Java Notes: 关于时间、日期表达的类
从Linux开始,计算机系统都习惯以距离1970年1月1日的秒数(Linux用)或者微秒数(Milleseconds,Java用)来表示当前时间。所以,在Java当中最原始的时间表达方法是:利用long这种数据类型来存储。获取当前时间:long now = System.currentTimeMillis();当然,为了更好地打印大的数字,我们可以使用格式设置类原创 2017-02-19 07:09:26 · 637 阅读 · 0 评论 -
14th Feb: Why BB? Valentine's Gift
数学题:1)Sqrt(x)Implement int sqrt(int x).Compute and return the square root of x.这道题是一道采用二分思想的题。由于题目返回的是int,所以我们需要做的是寻找一个int 的平方最接近x。这时候需要使用二分法,确定两个数,相差1。如果后一个数的平方小于x,就是后一个数。否则原创 2017-02-17 02:32:04 · 386 阅读 · 0 评论 -
7th Feb: 刷题笔记
1/ Maximum Depth of Binary TreeGiven a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node原创 2017-02-09 10:48:46 · 514 阅读 · 0 评论 -
刷题代码库及一些犯过错误
本文章仅作代码记录之用。1、前序遍历二叉树Pre-order Traversal Binary Tree方法1:递归(Recursive)public class Solution { /** * @param root: The root of binary tree. * @return: Preorder in Ar原创 2016-09-26 00:04:43 · 957 阅读 · 0 评论