Skip to content

Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?
2016-02-23
23 February
On February 23, 2016
In Design Patterns(设计模式), Knowledge Base(心得笔库), Language Tips(语言初试), Special Tricks(奇技妙招)

Java的final关键字

在《Java关键字分类解析》里介绍了所有Java关键字和保留字的基本用途,到《Java修饰符及其作用对象》又介绍了所有Java修饰符的应用。通过修饰符的表格看到final是唯一一个可以在类(Class)、方法Method、变量(Variable)上都能应用的,但前文也提到final在这些作用对象上的效果是不太一样的,本文就详细展开介绍一下final的具体效果。

final class

当一个类被定义成final class,表示该类的不能被其他类继承,即不能用在extends之后。否则在编译期间就会得到错误。
[codesyntax lang=”java” lines=”normal”]

package com.iderzheng.finalkeyword;

public final class FinalClass {
}

// Error: cannot inherit from final
class PackageClass extends FinalClass {
}

[/codesyntax]
Java支持把class定义成final,似乎违背了面向对象编程的基本原则,但在另一方面,封闭的类也保证了该类的所有方法都是固定不变的,不会有子类的覆盖方法需要去动态加载。这给编译器做优化时提供了更多的可能,最好的例子是String,它就是final类,Java编译器就可以把字符串常量(那些包含在双引号中的内容)直接变成String对象,同时对运算符+的操作直接优化成新的常量,因为final修饰保证了不会有子类对拼接操作返回不同的值。

对于所有不同的类定义—顶层类(全局或包可见)、嵌套类(内部类或静态嵌套类)都可以用final来修饰。但是一般来说final多用来修饰在被定义成全局(public)的类上,因为对于非全局类,访问修饰符已经将他们限制了它们的也可见性,想要继承这些类已经很困难,就不用再加一层final限制。

另外要提到的是匿名类(Anonymous Class)虽然说同样不能被继承,但它们并没有被编译器限制成final。
[codesyntax lang=”java” lines=”normal”]

import java.lang.reflect.Modifier;

public class Main {

    public static void main(String[] args) {
        Runnable anonymous = new Runnable() {
            @Override
            public void run() {
            }
        };

        System.out.println(Modifier.isFinal(anonymous.getClass().getModifiers()));
    }
}

// Output:
// false

[/codesyntax]
Read More →

2016-01-24
24 January
On January 24, 2016
In Programming Life(程序人生)

言传而身教,求知并实践

在我第一份实习工作里,我跟着老板学习并进入了软件开发行业;从我第一份全职工作那,我看到了工程师的不同职业路。在现在的公司里,我也获得了很多身边同事们的指导和帮助,看到了更多在行业和领域中的佼佼者。学习他们写的代码,观察他们设计的架构,与他们交流,甚至只是看着他们工作,都让我发现新的领域,加深流程理解,提速知识学习。他们让我了解到了工程师在不同阶段所作出的贡献大不相同。更可贵的是他们总是愿意抽出他们宝贵的时间给我指导,帮助我变成像他们那样杰出的工程师。

现在的公司员工数比以往的公司要多几十几百倍,所以很难像以前那样找到几个经典人物来表述,也因为公司庞大所以有着更明确的职称(Title),所以此篇文章里我将对“位”分别描述,回顾并感谢每位同事带给我的提携和指导。

(文章比较长,主要讲述在我身边工作的Senior Engineer,Manager和Staff Engineer让我感受到的执行力(Execution)、领导力(Leadership)、主动性(Initiative)这些能力特性,也让朝着他们的方向不断的去学习获取这些能力。)

  • Senior Engineer – Execution
  • Engineer Manager – Leadership
  • Staff Engineer – Initiative
  • Title ≠ Ability – Study

Read More →

2016-01-20
20 January
On January 20, 2016
In Article Collection(聚宝收藏), IT Products(数码产品)

一些实用的在线课程的网站

现在的学习已经不仅仅局限于课堂之上,也不光来自于工作之中,借着在线教育网站(Massive open online course, MOOC)的崛起,越来越多的人通过在线学习了补充自身的知识,提高各个方面的能力。之前分享过《一些视频教程网站推荐》,这里再分享一些非常有用的提供在线课程的网站,可以在上下班路上或者平时休息时播放观看。

Udacity

Udacity

Udacity主要是编程开发技术类的在线课程,而且这些课程的由诸如Google、Facebook这些大公司提供,所以质量也很高。这些视频大部分需要付费才能观看,但也有很多免费又值得学习的内容。我个人在上边获得了很多关于Android开发方面的能力提升。

对于付费用户,网站还会在完成某些课程内容后提供“Nanodegree”的荣誉来证明对某项知识已被掌握。

Udemy

Udemy

Udemy上的视频教程包罗万象,对于不满足于一个领域的知识的人,可以在上边了解其他领域的基础知识,比如房产投资,股票交易。

同样的,网站的大部分课程的需要付费,而且价格还不低,但是一些免费课程也非常的受欢迎。另外很多课程每节视频的长度都较短,所以很容易快速完成一节课程的学习。
Read More →

2015-12-28
28 December
On December 28, 2015
In Algorithm Analysis(算法分析), Knowledge Base(心得笔库), Programming Life(程序人生)

聊聊刷题

在之前的《谈谈面试》中我讲述了我在面试上的经历和看法,而对于软件行业的面试很多都要求被面试者解决一些编程上的问题。这类面试有很多名字:算法题(Algorithm Question)、编程题(Programming Problem)、考代码(Coding Interview)等等,但基本形式都是:给出一道问题的描述和目的,要求写出程序能够接受相应的参数然后完成目标需求最终得到结果。

大部分常见的这类面试问题都被大家总结在了网上,可以直接搜索找到,或者在一些论坛的特定板块(比如未名空间的待字闺中,一亩三分地的面经)里见到讨论,甚至形成了在线测试网站(比如LeetCode、LintCode)直接验证程序的正确性。

由于面试题目的公开性,造就了软件行业特殊的面试准备过程:刷题。很多朋友也会问我:“出去面试还刷题吗?”准确地讲,我刷过算法题目,也经常后悔没有早在还在学校里时就开始刷题,那样就能更早地进入心仪的公司。但现在出去面试前基本都还是忙着正常的工作,不会专门去练习题目。

刷题的目是理解算法和数据结构

好比读书的时候每次老师教授了新的知识后都会布置习题,完成那些作业可能会让我们在考试中碰到原题而拿到高分,但正真的作用是帮助我们理解和消化所学的知识。从简单的理解:“程序=算法+数据结构”,要写好程序就必须去熟悉算法和数据结构,刷题就应该是完成这样的作用。如果题目做不出来,就说明连最基本写程序的能力都没有,自然很难得到公司的青睐。

我常常幻想如果我高考没有失常,能进入更好的学校学习计算机知识,甚至参加ACM小组,得到老师在算法上更好的点拨指导,也因为要参加计算机竞赛,我也会练习更多的题目,现在就不需要刷题了。但现实是在我就读的大学里,算法只是一门选修课,我也没有参加过任何计算机竞赛。但联想高中数学竞赛的培训过程,老师肯定会分类进行知识传授和练习。所以刷题也一样要分类进行强化训练。

LeetCode虽然是最火的题库,但是在我刷题的时候它只是简单的罗列一百多道题目(可参看我的不完全题解列表),所以当时我更倾向去做UVa上的题目。那上边有上千道题目,肯定是不可能做完的,但是有比较好的分类专区,可以专门的加强某一特定算法和数据结构的基础知识。

一开始我连最简单的二分查找(Binary Search)算法都写不好,但是在反复练习之后,我也能总结出二分法的实现,并汇总一些变形题目到博客里。刚毕业那会找工作,好多次面试都挂在了二叉树(Binary Tree)上,后来做遍各类遍历算法,总结了不同的实现方式,就不再担心关于树的操作。动态规划(Dynamic Programming)在我看来是面试时会碰到最难的问题,后来我发现这类问题的关键在于找到类似于数学中的“递归公式”,这样就可以找到递归的实现,之后利用空间来存放中间值来减少时间复杂度。
Read More →

2015-12-11
11 December
On December 11, 2015
In IT Products(数码产品), Programming Life(程序人生)

我不是传说-关于《炉石传说》游历

2014年一月,《炉石传说(Hearthstone)》进入beta测试。我向来对暴雪的游戏非常喜欢,时而不时的会拿出《暗黑3》和《魔兽争霸3》来玩。不过我并没用玩过《魔兽世界》,主要是当年沉迷《传奇》这款网游造成的阴影面积过大,所以我对需要充点卡的游戏,我都是拒绝的。但是出于对《游戏王》的喜爱,而且自己当时所处的游戏公司里又有很多人在玩,我也毅然加入了《炉石传说》之中。
Read More →

2015-11-26
26 November
On November 26, 2015
In English Posts(英文写作), Mobile Development(移动开发)

2015 Android Dev Summit Schedule and Videos

ads
Here is the full schedule of Android Dev Summit. If you missed the live stream, you can find the YouTube Play List here. You can find the video link for each session from the title in the following schedule table as well.
The table also contains the speakers of each session, and their Twitter accounts are attached to their names. If you like to know more about Android Development, you can follow them and @AndroidDev.

Day 1

9:05am – 9:45am

Keynote

Dave Burke & Stephanie Saad Cuthbertson

9:45am – 10:30am

Android Application Architecture

Yigit Boyar & Adam Powell

10:30am – 11:00am Coffee Break
11:00am – 11:45am

Respecting User Attention: Notification Best Practices

Chris Wren

Secrets To App & Game Success On Google Play

Brian Quimby & Andreas Preuer

11:45am – 12:30pm

Keep It Secret, Keep It Safe

Chad Brubaker

Android Textual Layout

Raph Levien

12:30pm – 1:30pm Lunch
1:30pm – 2:15pm

RecyclerView Animations And Behind The Scenes

Chet Haase & Yigit Boyar

2:15pm – 3:00pm

Support Library: Guts And Glory

Chris Banes & Adam Powell

3:00pm – 3:30pm Office Hours
3:30pm – 4:15pm

“Mother, May I?” Asking For Permissions

Svet Ganov & Jeff Sharkey

4:15pm – 5:00pm

Framework Fireside Chat

Hosted By Dan Galpin

Read More →

2015-11-25
25 November
On November 25, 2015
In Mobile Development(移动开发)

2015 Android Dev Summit第二天

今天的演讲主要是关于Android开发工具,其中又以Android Studio 2.0作为重点介绍项目。
android-studio
(上图是唯一一张不是来自会场的照片)

9:00演讲正式开始,基本是昨天开场介绍Android Studio 2.0和新的Emulator的加长版,但同时也对Instant Run的原理做了简单的介绍。不管怎样Android Studio 2.0都是很值得期待的,而且Google已经抛弃Eclipse for Android很久了,所以赶紧转到Android Studio吧。
IMG_20151124_090044

之后跟昨天一样也是两个演讲同时进行,一个关于新出的Data Binding。我则去了另一个关于User Identity方面,不过这个演讲只是介绍了怎么用Google Service提供的Google Account来作为登录账号。更多的API的介绍和使用还得自行网上搜索。然后听了关于Android Build System的演讲,不过没有什么Demo的过程。
Read More →

2015-11-24
24 November
On November 24, 2015
In Mobile Development(移动开发)

2015 Android Dev Summit第一天

今年的Google I/O没有抽到票,不能到现场参加。不过11月举行的Android Dev Summit的票是先到先得的方式,所以早早的提交了注册。今天终于有机会当面跟Android系统的设计开发者们进行交流,还能见到来自各个公司的Android工程师,跟他们讨论Android开发中碰到的问题。
ads

演讲一开始就给大家一个惊喜:Android Studio 2.0
android-studio
Read More →

2015-11-23
23 November
On November 23, 2015
In Knowledge Base(心得笔库), Programming Life(程序人生)

谈谈面试

一般人投入面试都是在需要换新的工作的时候才去,但我即使有着一份稳定的工作也会常常跑去面试一些感觉不错的公司。当你没有工作的时候,比如刚刚从学校里出来寻求一份生存的根本,和处在所谓的骑驴找马的状态去面试的心情是不太一样的。而即使找到了一匹好马,偶然出去面试一些公司也是非常有意义的。

首先不要浪费了每年免费的面试机会。很多公司对于没有成功的面试者都会关一年的“小黑屋”,这个意思是在这段期间内再申请公司内的职位将不被理会。很多人都想去大公司,但是又怕会面不上,所以我经常听到说“我先拿小公司练练手,再多刷刷题再去面大公司”。这没什么错,但是又怎么能保证练完手刷了题就能面上了。所以我个人更倾向当机立断地将简历投向这些心中的“梦想公司”(对于写简历和投简历又是另一门学问,可自行网上搜索)。如果有幸拿到了那些公司的面试,反而会更有压力,让自己变得更加积极地去准备面试。而且一般大公司的面试流程都很可以拖成几个月相信足够去针对性地了解这家公司常见的题目和面试形式。即使说因为种种原因没有成功,这样的一次亲身经历也有利于提高下次的表现。所以我总是会这样看待一家公司的面试“今年又有免费面试的机会了不能浪费了,今年不行明年还能再来”,而不是“面试的机会很宝贵不能浪费了,等准备好了再去”。另外,这些大公司对你的简历是真的会留底的,recruiter在找人的时候有可能真的会再翻出简历然后打电话给你。我现在就职的Twitter就是这样,最早联系上的时候一轮电面就再没有消息(残忍的默拒),半年后接到电话说Mobile组有空职,我当然兴致勃勃地又去面了然后加入了Android组。其他几家大公司,我也有类似的经历,先后失败了2、3次,现在都得到了到这些公司任职机会。
Read More →

2015-10-31
31 October
On October 31, 2015
In Design Patterns(设计模式), Knowledge Base(心得笔库), Language Tips(语言初试)

Java修饰符及其作用对象

在《Java关键字分类解析》一文里已经对Java的所有关键字进行了分类归组,并对部分关键字做了一些简单的介绍分析。不过对于修饰符这部分值得更详细的探讨,所以本文就来讲述下这些修饰符在Java中的功能及应用。

Java的关键字里总共有11种修饰符,但实际上还有一种访问修饰符(Access Modifier),那就是“没有修饰”的修饰符,也就是不加任何修饰符在作用对象上。这种修饰符没有固定名称,以下都是出现过的的名字:“默认(default)”、“无修饰(No Modifier)”、“包私有(Package-Private)”、“包可见(Package)”。本文将以(package)来表示该隐形的修饰符,然后针对一共12种修饰符来作阐述。

对于所有Java的概念,可以应用修饰符的对象有三种:类(Class)、方法(Method)、变量(Variable)。进一步考虑,Java可以在类的定义里定义另一个类,所以对于类定义的位置又分出:顶层类(Top-level Class),即直接定义在文件包下的类;和嵌套类(Nested Class)。对于变量,根据其是定义在类中还是方法中,可分别定义为:类字段(Class Field)和局部变量(Local Variable)。

再进一步分类的话,嵌套类还可以分成静态嵌套类(Static Nested Class)和内部类(Inner Class),不过这只是static修饰符起的效果,所以不进一步区分。同样的对于方法也不区分静态方法和对象方法,对字段也不分静态字段(Static Field)和实例变量(Instance Variable)。对于局部变量,其实还可以细分出方法参数(Method Parameter),但它的效果基本跟方法内直接定义的变量效果一致,所以不做区分。这里也不对接口(interface)进行讨论,因为它基本相当于是完全抽象类(abstract class)。

这样就得到了5种基本的修饰符作用对象,但不是所有的修饰符都可以作用在每一种对象上,所以把12种修饰符在Java中实际可作用的对象总结成下表:

Modifier Class Method Variable
Top-Level Class Nested Class Class Field Local Variable
private NO YES YES YES NO
protected NO YES YES YES NO
public YES YES YES YES NO
(package) YES YES YES YES –
abstract YES YES YES NO NO
final YES YES YES YES YES
native NO NO YES NO NO
static NO YES YES YES NO
strictfp YES YES YES NO NO
synchronized NO NO YES NO NO
transient NO NO NO YES NO
volatile NO NO NO YES NO

Read More →

Posts pagination

Previous 1 … 4 5 6 … 11 Next
Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.