生活点滴 - 20141105

主题

从今天开始,恶补Java基础知识!


晚上看《第一现场》得知,公明肉菜市场肉档子罢市的事件终于得以解决,其方式是双方协商!看吧,这才是应用民主的好去处。

所谓“小治以民,重于德;大治以法,重于教(心)”。即小地方、社会是可以施行民主制的,基于双方的道德,良心予以治理;大到国家,则需要的是法制,基于教育予以治理。

其次,民主为秩序而生,为自私而亡;法制为民生而存,为宽容怜悯而毙!


晚上看了美国拍摄的《招魂》,吓人啊!,前期各种突然响声,这种手法还是比较经典的。之后,当两位驱魔师或者说超自然感应师建议那家人信教时,我就崩溃了,敢情有这样进行宗教宣传的?另外值得吐槽的是,帮助别人还需要像政治一样,看看其是不是归它们管,还要教皇他们的管制团体批准才可以解救。

钢琴、乌鸦、经典老式房子,车灯。难道这么猛烈的恶魔,天使不搭救;放到中国来说,早已罗汉附体搭救世人了。

最后,驱魔结束的方式果然还是爱的力量大于一切啊(永恒的神力^_^)。

好久没看恐怖片,吓一吓让人知道敬畏。与中国不同的是,欧美似乎鬼怪、恶魔是独立分权的,没有神、佛管束的。


趣事:最近感到很奇怪,莫非蚊子被饿坏了,接连几天每次都能在厕所打死3 ~ 8只,而且蚊子似乎失去感知能力,死亡慢慢逼近,它们居然一动不动,以至于我都不需要集中注意力,看见了,手移动过去便是,怪哉!从常识来看,即便集中注意力,蚊子也是一种难以对付的生物。

以下是一些好料推荐:

  1. 文章:经济学人 - 冰岛关闭色情行业,时间:2013.04.20;有时思考这类无是无非现象能净化你的心灵,但愿清者自清;
  2. 文章:经济学人 - The Great War 第一次世界大战,一战实在没什么宏大之处,也无新意可言。为了打一战,成千上万的人被征兵充当炮灰,而军装革履的大将军们远离前线。索姆河战役,英军一天阵亡6万,素有一战“绞肉机”之称。
  3. 布告:“科学60秒”听力可以在微信收听了,微信号:huanqiukexue。每周二、四清晨推送精选的“科学60秒”音频,并附中英对照脚本。

拜读Bruce大作 —— 《Java编程思想》(第一遍)

Java编程思想


所有优秀的作者,包括那些编写软件的程序员,都清楚其著作的某些部分直至重新创作的时候才变得完美,有时甚至要反复重写多次

第一章 对象导论

对象是一个通过对问题域(即上下文)中的元素进行建模,是一个其封装了以数据成员或属性表示的内部状态和以成员方法与接口表示的行为的抽象概念

  1. 对象始于抽象 -> 抽象始于问题建模【问题域即上下文】;
  2. 每个对象都有一个接口,接口体现服务,每个对象都提供服务,将对象看作“服务的提供者”有助于提高对象的内聚性;
  3. 使用面向对象的好处:便于对问题进行表示和交流;可应用设计良好的继承机制;拥有比如多态(可替代性(substitutability):某一特定类型的所有对象都可以接收同样的消息)等高级开发技巧;
  • 继承关系探讨,“是一个” 与 “像是一个”,【书:有时必须在导出类型中添加新的接口元素,这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法。这种情况我们可以描述为is-like-a关系。】
  • 多态的可互换对象,【书:为了执行动态绑定,Java使用一小段特殊代码来替代绝对地址调用;它忽略类型的具体细节,仅仅和基类交互。这段代码和具体类型信息是分离的…把将导出类看做是它的基类的过程称为向上转型(upcasting)…这里要表达的是,如果你是一个Shape,我知道你可以 erase() 和 draw() 你自己,那么去做吧…】
  • 单根继承结构的好处:1.简化参数传递,保证所有对象都具有某些功能,执行基本操作;2.使得垃圾回收器的实现变得容易多;3.为异常处理等系统级操作带来灵活性;
  • 异常处理:异常是一种对象;有助于编写出更健壮程序的机制;

第二章 一切都是对象

一切都是引用,引用操纵对象;
对象存储到什么地方:new 对象存储在堆(寄存器、堆栈、堆、常量存储区、非RAM存储区[流对象和持久化对象-即磁盘等]);
基本类型存储到什么地方:变量直接存储“值”,并置于堆栈中,更加高效;
java中的数组,【书:当创建一个数组对象时,实际上就是创建一个引用数组。并且每个引用都会被初始化为一个特定值,该值拥有自己的关键字null】;

  • 永远不需要销毁对象?!
  • static 关键字:static 方法可以创建或使用与其类型相同的被命名对象;因此常常拿来做“牧羊人”的角色,负责看护与其隶属统一类型的实例群;

more >>

Java 面试题 - Stack and Queue

ArrayDeque

  • Resizable-array implementation of the Deque interface.
  • 此类很可能在用作堆栈时快于 Stack,在用作队列时快于 LinkedList。大多数 ArrayDeque 操作以摊销的固定时间运行。

JAVA中Stack和Heap的区别

  • 每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。
  • 所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。
  • Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间。
  • 要使用heap中申请的变量或对象只能定义变量指针,并要求在运行过程中通过new来动态分配内存空间,而且必须显示地free你申请过的内存,不过Java的垃圾回收机解决了这个问题,它会帮你释放这部分内存。
  • 另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。int a=3; int b=3; 创建 a 变量后,由于在栈中已经有3这个字面值,于是 b 直接指向3的地址。在编译器内部,遇到 a=4;时,它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。
  • 像String str = “abc”;这种场合下,其字符串值是保存了一个指向存在栈中数据的引用;

面试题补充

1、 Describe how you could use a single array to implement three stacks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int stackSize = 300;
int[] buffer = new int [stackSize * 3];
int[] stackPointer = {0, 0, 0}; // stack pointers to track top elem
void push(int stackNum, int value) {
/* Find the index of the top element in the array + 1, and
* increment the stack pointer */
int index = stackNum * stackSize + stackPointer[stackNum] + 1;
stackPointer[stackNum]++;
buffer[index] = value;
}
int pop(int stackNum) {
int index = stackNum * stackSize + stackPointer[stackNum];
stackPointer[stackNum]--;
int value = buffer[index];
buffer[index]=0;
return value;
}
int peek(int stackNum) {
int index = stackNum * stackSize + stackPointer[stackNum];
return buffer[index];
}
boolean isEmpty(int stackNum) {
return stackPointer[stackNum] == stackNum*stackSize;
}

more >>

Java 面试题 - Arrays and Strings

Java容器类库图


HashMap和Hashtable

  • HashMap不是线程安全的,由于非线程安全,效率上可能高于Hashtable;
  • Hastmap是Java 1.2引进的Map interface的一个实现;其中键和值都是对象,可以包含重复值。HashMap允许null key和null value,而hashtable不允许;
  • 为一个HashMap提供外同步。其中一个方法就是利用Collections类的静态的synchronizedMap(),它创建一个线程安全的Map对象,并返回一个封装的对象。这个对象的方法可以让你同步访问潜在的HashMap;
  • HashMap去掉了HashTable的contains方法,但加上了containsValue()和containsKey()方法;
  • HashTable是线程安全的一个Collection,继承自陈旧的Dictionary类;

more >>

生活点滴 - 141104

应聘回来坐车的路上,我睡着了,醒后看见车窗外一片繁华,内心一片平静;我没有任何思考,也有意无意地在观察内心外的世界,我任凭那些光,那些声,那些“感”肆意地进入我的身心,从我的眼睛,从我的双耳,从我的皮肤。

尔后,苏醒过来,如同生机盎然而又无人探访的山谷,一股成长,勃发的力量正在这里慢慢发生,正在慢慢展示它的力量。

应聘之前,其实我已经预感到会失败了,口拙已然使成功的机率大幅下降,知识的碎片化及残缺则正式宣告失败的提前到达。

感叹显然无力!或许呐喊有共鸣!

忆往昔,峥嵘岁月稠!
我劝天公重抖擞,不拘一格降人才!
我以为如今的时局早已变化,从过去的以一人主导产品开发,多个“全能”的技术人员团队,渐渐转变为以人人参与引导产品开发,实行技术互补,快速学习的团队。
我以为从古至今总有些道理不会变化,过去,兴趣是进步的最大驱动力,也是变革的最大驱动力。如今也同样不会变。
盼望着,变革来得更快,更猛烈;
盼望着,志同道合的伙伴…快到碗里来,^_^

前进!我坚信前途一片光明!

为用户而着想,为用户而便利,为用户而诞生机会!


说回早上的一些念想,早上打开 Android 的今日头条时,为读到一些陈旧反复的资讯而感到一丝悲哀。实在无力吐槽!为什么资讯不能划分更明确:事实!教育!猜想!八卦!

事实中夹杂着猜想,教育里头处处八卦!这是正儿八经的有过思考么,慢慢地用户也就麻痹了。。。

一个字:悲!一句话:用户大多时间都是被唬弄的,愚弄的!

以下是一些好料推荐:

  1. 电影:《海云台》、韩国电影,笑一笑,烦恼少!
  2. 菩萨蛮[辛弃疾]: 郁孤台下清江水,中间多少行人泪!西北望长安,可怜无数山!青山遮不住,毕竟东流去。江晚正愁余,山深闻鹧鸪。(郁孤台啊!郁孤台,望长安,无数山!东流去,愁余闻鹧鸪。)
  3. 《中华全球史》1.19中华最伟大的发明并不是四大发明: 易经再怎么强调不为过,取其精华,去其糟粕。

生活点滴 - 141103

早上起床时,探出窗口,发现没有阳光,空气里也感到有些瑟瑟寒风。有过一丝念头,想要放弃去起点咖啡,当我最后鼓起勇气决定还是要去的时候,我感到前途一片光明。

去后才发现,成语“相形见绌”用来形容我再合适不过了,当我还是决定在那里完整的过完一天,权当挑战自己。

创业还是要组建一个团队的,一个人是不行的,两个人可以,但还是少,三个人起步刚刚好!

一个人无法交流,无法讨论;交流,讨论是灵感的激发,是一切可能的源头!

上午收到随手记的QQ“笔试”,最后还算圆满完成了笔试,不过,很遗憾,程序还是写得不够好!但愿能收到下次面试吧,好想给父母一个宽慰。

晚上8点才回到家,坐车回来前,我足足走了一个小时的路。

躺下床的那一片刻,脑中蹦出一念头,对《股票作手回忆录》作挖掘股票买卖背后涨跌的秘密。

休息!

以下是一些好料推荐:

  1. 深圳起点咖啡;

生活点滴 - 141102

日程:

  1. 上午九点左右出发去起点咖啡,悲催~,今天不开张。
  2. 之后去拜访大姐一家,两个小家伙如今懂事多了,也开始正式有了真正的互动,另外,菁菁居然学会了从一个板凳调到另一个板凳的做法,她才两岁多,就很“大胆了”,让人惊讶!
  3. 回到家后,继续学习复习 Android voice development。
  4. 边吃晚饭,边看电影《大卫戈尔的一生》,今天我打算聊聊它。


可敬、可惜、可恶的主人公!

可敬在于戈尔为实现自己的信念付出了自己的生命,并且没有直接伤害到别人;
可惜在于戈尔智商高,情商却低,并且如同预言一般:智者千虑,必有一失,在失去孩子的探视权后,戈尔迷失了。
可恶在于戈尔虽然无直接伤害别人,却有可能伤害了别人的精神世界(施以洗脑的人往往神智清醒,而被洗脑的人则失去了理智,为反对而反对,为赞成而赞成…)。

more >>

Android 语音开发(无交互)

ANDROID SDK TTS Package Summary


Starting the TTS engine

1
2
3
4
5
6
TextToSpeech tts = new TextToSpeech(this, new OnInitListener() {
public void onInit(int status){
if (status == TextToSpeech.SUCCESS)
speak("Hello world", TextToSpeech.QUEUE_ADD, null);
}
}
  • QUEUE_ADD: The new entry placed at the end of the playback queue.
  • QUEUE_FLUSH: All entries in the playback queue are dropped and replaced by the new entry.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private void initTTS() {
disableSpeakButton(); //Disable speak button during the initialization of the text to speech engine
//Check if a the engine is installed, when the check is finished, the onActivityResult method is executed
Intent checkIntent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_DATA_CHECK);
}
/**
* Callback from check for text to speech engine installed
* If positive, then creates a new <code>TextToSpeech</code> instance which will be called when user clicks on the 'Speak' button
* If negative, creates an intent to install a <code>TextToSpeech</code> engine
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TTS_DATA_CHECK) {
// Check that the resultCode is CHECK_VOICE_DATA_PASS, it was the TTS which result is being processed and not any other activity
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
tts = new TextToSpeech(this, new OnInitListener() { // Create a TextToSpeech instance
public void onInit(int status) {
if ( (status == TextToSpeech.SUCCESS) && (tts.isLanguageAvailable(Locale.US) >= 0) ) {
tts.setLanguage(Locale.US);
}
enableSpeakButton();
}
});
} else { // Install missing data
PackageManager pm = getPackageManager();
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
ResolveInfo resolveInfo = pm.resolveActivity( installIntent, PackageManager.MATCH_DEFAULT_ONLY );
if( resolveInfo == null ) {
Toast.makeText(TTSWithIntent.this,
"There is no TTS installed, please download it from Google Play",
Toast.LENGTH_LONG).show();
} else {
startActivity( installIntent );
}
}
}
}

more >>

生活点滴 - 141101

早上,半醒状态下,我一边开始调制黑芝麻糊做早餐,一边听着神思者的【Love】曲子。不过一会,没等我发觉,外面围栏的保安敲打着围栏,叫我把车开走,因为把别人的车给挡住了。这个时候,得交代一下上下文,或者说故事背景,这个词汇可不仅仅属于IT业,这可是常识!

事情是这样的:

家住一楼,偏偏小区很小,不到3平方米的阳台和小区的停车场中间隔着一围栏,大概是上个世纪90年代建造的,但“保养”得还算可以,另外小区的小资,中产家庭的数量开始慢慢增多,于是,停车场需求上去了,如今,就连中间车辆进出的道停满车辆也不足为奇了。

还是让我把镜头重新回到保安敲打围栏的时候开始吧,就以保安二号人物称呼他吧。

我捉摸着,为什么看到我的时候,不叫我,哪怕说“D102”(门牌号)也是可以的,可是他偏不,因为他的年龄于我的父亲差不了几岁,长辈先开口,尤其还隔着那层诡异的身份象征,怕是更开不了这个口吧。这让我想其以前发生的另一件事:之前有次深夜回到家后,好不容易发掘到小区还剩下最后一个车位,在停车的时候,保安二号出现了,可是他没有像对待其他车主那样帮助我对车进行“走位”。而是默默地在那看着,直到我先开口,他才费劲地应答一声。我感到自己有点不受尊重,但很快地我就没在意了。

如今,保安二号仍旧如此粗暴,我“新仇旧恨”般地感到有些愤怒。

但很快地,我发现,我冷静下来了,甚至有些同情他,他大概心理很纠结吧。

more >>

Stockeye 项目重新设计指引

将原先在软件中不可分割的包按功能、使用方式的思路重新设计,
可做成以第三方库为基准的组件有:股票的报价、股票的预警、股票的资产状况;股票的资讯;股票的图表库(基础K线图);股票的聊天库;
可高度组件化、不可分割的组件有:股票的数据库设计及实现;股票的定制查询库;

库的设计

1、关于股票报价、股票的预警、股票的资产状况

  • 核心对象举例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
StockPriceObjList stockPriceObjList = StockPriceObjList.getInstance();
stockPriceObjList.init();
stockPriceObjList.addStock();
stockPriceObjList.addStockArray();
StockPriceObj obj = stockPriceObjList.get(0);
class StockPriceObj {
String sName;
String sCode;
boolean hasSettedAlert
int alertPrice;
long alertVolume;
int curPrice;
long curVolume;
}

more >>