0%

By LongLuo

在PC上,绝大部分软件都是Windows应用且闭源的,Linux系统只占了很小的份额,只有专业人士才会使用。随着移动互联网的到来,在智能手机系统中,Android由于开源免费的特性,已经占据了主要份额。当然iOS App由于闭源,且Apple软硬件一体,管控严格,体验更好,比如安全、动画流程、不卡顿等。

对于开发人员来说,最佳的学习方式莫过于开源项目了,我们可以学习到App的功能是如何实现的,提高我们自身的开发能力。我收集了一些最好的开源Android App项目,这些Apps可以作为很好的示例,帮助程序员们提高其Android开发技能。

下面就开始学习吧!

UI界面

FluentUI Android

微软开发的UI框架,用于在Android上Office App中实现统一的用户界面,从中可以学习如何构建UI部件及界面。

Source Code

QMUI Android

QMUI Android是腾讯开发的一个项目,设计目的是用于辅助快速搭建一个具备基本设计还原效果的Android项目,同时利用自身提供的丰富控件及兼容处理,让开发者能专注于业务需求而无需耗费精力在基础代码的设计上。不管是新项目的创建,或是已有项目的维护,均可使开发效率和项目质量得到大幅度提升。

官网:http://qmuiteam.com/android

Source Code

相机

Open Camera

一个全功能开源Android相机App,包括自动稳定、远程拍照等,如果想开发一款相机App,请学习这个项目!

Source Code

多媒体播放器

TimberX Music Player

一个全功能Android音乐播放器,遵循Material Design风格的用户界面,同时应用了最新的工具,包括Kotlin、组件、数据绑定等。

支持跨平台,可在手机、Android Wear、Android Auto、Chromecast和其他投射设备甚至谷歌助手上运行,如果你想编写一个音乐播放器以及适配各种设备,那这个App是最好不过的了!

官网:https://namand.in/

Source Code

Sound Recorder

一个Material Design风格的简易开源录音机App,可以学习到如何在Android中集成录音和操作功能。

Source Code

LeafPic

一个全功能相册App,如果想了解如何实现一个相册,请从这个开始!

Source Code

AntennaPod

一个播客App,你可以学习到如何开发一个播客App。

官网:https://www.antennapod.org/

Source Code

阅读全文 »

By LongLuo

By LongLuo

牛顿有句耳熟能详的名言:“如果我比别人看得远些,那是因为站在巨人肩上的缘故。” 对于每个程序员来说,都希望自己成为一名高手,升职加薪,迎娶白富美,出任CEO,走上人生巅峰。《劝学》里也说“君子生非异也,善假于物也”,告诫我们君子的本性和其他人没有什么不同,只不过是善于利用和借助客观工具, 善于借助外部系统的能量。大神也是从小白过来的,每个小白只要掌握正确的方法,坚持努力,也可以成为大神。

开源项目就是那个巨人,我们可以通过学习开源项目的源码,了解其设计思想,将其应用于我们自己的项目中,吃透其代码,不知不觉中我们的能力也会有大幅度提高。

个人收集了一些很好的Android开源项目,认真学习并掌握,可以大大提升我们的能力。

Android

Google Android开发者官方网站

不用说,Android开发官方权威网站,网站提供的示例和文档值得认真学习和阅读。

https://developer.android.google.cn/

Android Samples

Android官方提供的各种示例和实践,值得认真学习。

https://github.com/android

Android Source Code

在线阅读Android系统源码,提供Android源码的交叉索引,可以快速的搜索符合特定条件的Android源代码,后台是基于OpenGrok引擎,OpenGrok是一个快速,便于使用的源码搜索引擎与对照引擎,它能够帮助我们快速的搜索、定位、对照代码树。

http://androidxref.com/

Github Android Topics

Github 的Android Topics,可以查询到一些Android知名开源项目:

https://github.com/topics/android

Android开源项目汇总

Trinea收集的Android开源项目,内容非常丰富,大家可以各取所需,不过绝大部分偏重于App开发。

https://github.com/Trinea/android-open-project

阅读全文 »

By LongLuo

LeetCode多线程

LeetCode Concurrency Programming

ID 题目 难度 解法
1114 按序打印 简单 Problem1114_printInOrder.java
1115 交替打印FooBar 中等 Problem1115_printFoobarAlternately.java
1116 打印零与奇偶数 中等 Problem1116_printZeroEvenOdd.java
1117 H2O生成 中等 Problem1117_buildingH2O.java
1195 交替打印字符串 中等 Problem1195_fizzBuzzMultithreaded.java
1226 哲学家进餐 中等 Problem1226_diningPhilosophersPhilosophers.java

By LongLuo

Leetcode232. 用栈实现队列

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
class MyQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;

public MyQueue() {
stack1 = new Stack<>();
stack2 = new Stack<>();
}

public void push(int x) {
if (stack1.empty()) {
stack1.push(x);
return;
}

while (!stack1.empty()) {
stack2.push(stack1.pop());
}
stack2.push(x);
while (!stack2.empty()) {
stack1.push(stack2.pop());
}
}

public int pop() {
return stack1.pop();
}

public int peek() {
return stack1.peek();
}

public boolean empty() {
return stack1.empty() && stack2.empty();
}
}

用数组实现队列:

By LongLuo

面试时,经常会遇到一道题,说说HTTPS

HTTP的缺点:

通信使用明文(不加密),内容可能会被窃听

不验证通信方的身份,因此有可能遭遇伪装

无法证明报文的完整性,所以有可能已遭篡改

来说说当初设计HTTPS是为了满足哪些需求?

很多介绍HTTPS的文章一上来就给你讲实现细节。其中谈到“WHY型问题”的重要性。如果一上来就丢给你一大堆协议细节,你充其量只能知道WHAT和HOW,无法理解WHY。俺在前一个章节讲了“背景知识”,在这个章节讲了“需求”,这就有助于你理解:当初【为什么】要设计成这样?——这就是 WHY 型的问题。

兼容性

因为是先有HTTP再有 HTTPS。所以,HTTPS 的设计者肯定要考虑到对原有HTTP的兼容性。

这里所说的兼容性包括很多方面。比如已有的 Web 应用要尽可能无缝地迁移到 HTTPS;比如对浏览器厂商而言,改动要尽可能小;…

基于“兼容性”方面的考虑,很容易得出如下几个结论:

  1. HTTPS还是要基于TCP来传输(如果改为UDP作传输层,无论是Web服务端还是浏览器客户端,都要大改——动静太大,伤筋动骨)

  2. 单独使用一个新的协议,把HTTP协议包裹起来(所谓的“HTTP over SSL”,实际上是在原有的HTTP数据外面加了一层SSL的封装。HTTP协议原有的GET、POST之类的机制,基本上原封不动)

打个比方:如果原来的HTTP是塑料水管,容易被戳破;那么如今新设计的HTTPS就像是在原有的塑料水管之外,再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。

可扩展性

前面说了,HTTPS 相当于是“HTTP over SSL”。

如果SSL这个协议在“可扩展性”方面的设计足够牛逼,那么它除了能跟HTTP搭配,还能够跟其它的应用层协议搭配。岂不美哉?

现在看来,当初设计SSL的人确实比较牛。如今的SSL/TLS可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet)搭配,来强化这些应用层协议的安全性。

接着刚才打的比方:如果把SSL/TLS视作一根用来加固的金属管,它不仅可以用来加固输水的管道,还可以用来加固输煤气的管道。

保密性(防泄密)

HTTPS需要做到足够好的保密性。

说到保密性,首先要能够对抗“嗅探”(圈内行话叫Sniffer)。所谓的“嗅探”,通俗而言就是监视你的网络传输流量。如果你使用【明文】的HTTP上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。

嗅探是最低级的攻击手法。除了嗅探,HTTPS还需要能对抗其它一些稍微高级的攻击手法——比如“重放攻击”(后面讲协议原理的时候,会再聊)。

完整性(防篡改)

除了“保密性”,还有一个同样重要的目标是“确保完整性”。关于“完整性”这个概念,在之前的博文《扫盲文件完整性校验——关于散列值和数字签名》中大致提过。健忘的同学再去温习一下。

在发明 HTTPS 之前,由于HTTP是明文的,不但容易被嗅探,还容易被篡改。

举个例子:
比如咱们天朝的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某网站(本来是没有广告的),竟然会跳出很多中国电信的广告。为啥会这样捏?因为你的网络流量需要经过ISP的线路才能到达公网。如果你使用的是明文的HTTP,ISP很容易就可以在你访问的页面中植入广告。

所以,当初设计HTTPS的时候,还有一个需求是“确保HTTP协议的内容【不】被篡改”。

真实性(防假冒)

在谈到HTTPS的需求时,“真实性”经常被忽略。其实“真实性”的重要程度【不亚于】前面的“保密性”和“完整性”。

举个例子:

你因为使用网银,需要访问该网银的Web站点。那么,你如何确保你访问的网站确实是你想访问的网站?

有些天真的同学会说:通过看网址里面的域名,来确保。为啥说这样的同学是“天真的”?因为DNS系统本身是不可靠的(尤其是在设计SSL的那个年代,连DNSSEC都还没发明)。由于DNS的不可靠(存在“域名欺骗”和“域名劫持”),你看到的网址里面的域名【未必】是真实滴!

(不了解“域名欺骗”和“域名劫持”的同学,可以参见俺之前写的《扫盲DNS原理,兼谈“域名劫持”和“域名欺骗/域名污染”》)

所以,HTTPS协议必须有某种机制来确保“真实性”的需求(至于如何确保,后面会细聊)。

性能

再来说最后一个需求——性能。

引入HTTPS之后,不能导致性能变得太差。否则的话,谁还愿意用?

为了确保性能,SSL的设计者至少要考虑如下几点:

  1. 如何选择加密算法(对称加密 or 非对称加密)?
  2. 如何兼顾HTTP采用的【短连接】TCP 方式?

(再次提醒:SSL是在1995年之前开始设计滴。那是Web的远古时代——HTTP协议版本还只是1.0;默认使用【短连接】的TCP方式;默认【不】启用Keep-Alive)

小结

以上就是设计 SSL 协议时,必须兼顾的各种需求。后面聊协议的实现时,俺会拿SSL协议的特点跟前面的需求作对照。看看这些需求是如何被逐一满足滴。

By LongLuo

2021.05.09这一天是母亲节,想起曾读过留下很深印象的几篇关于母亲的文章,这些文章都在我读中学时在课外读物上读过的,但目前为此都还留下了深刻的印象。记得当时读完心里感觉酸酸的,眼泪在眼眶里打转,又是羞愧又是庆幸自己还有机会去报答爸妈的恩情。

今天花了点时间把它们都找出来,常读常新!

阅读全文 »

By Long Luo

五一假期期间累计花了10几个小时阅读完了阎学通在2013年写的著作《历史的惯性:未来十年的中国与世界》,看完大受启发,尤其是标题,让我有豁然开朗的感觉。

中国有句古话叫“三岁看大”,当然这是说性格决定命运,因为性格很难改,所以从一个人小时候表露出来的性格就能推断出其人生的大致轨迹。

杜牧的《阿房宫赋》中“秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也。”,德国哲学家黑格尔也曾说,人类唯一能从历史中吸取的教训就是,人类从来都不会从历史中吸取教训。纵观世界人类发展史,发现无论朝代更迭、经济发展等活动都在不断的重复过去。

“历史总会惊人的相似,但又不会简单的重复”,如何解释历史的这种相似性,又如何解释某些相似的前提最后却导致了不同的结果呢?

答案就是惯性。政治领导人们都会尝试用最大的理性思考和处理问题,但与此同时又会习惯性的陷入某种惯性之中。就像一个贪吃的胖子,虽然他现在体重只有160斤,但是根据大量相似的经验预测,他未来的体重将会达到200斤左右,这种结果可能性很大,因为这个胖子会习惯性地过量摄入食物,并且很难克制这种贪吃的欲望,但是也不排除这个胖子意识到了贪吃的坏处,成功地把体重保持在了160斤的恒定水平,对未来的判断往往就处在这样的不确定性之中。

预测一个人如此,预测一个国家也是如此,只不过按照质量越大惯性越大的原理,一个国家历史越悠久,体积越庞大,传统的力量和制度越成熟,这个国家未来的发展路径就越容易陷入到历史的惯性之中

下面是书中一些精华摘录:

阅读全文 »

By LongLuo

目前大致读过的一些DK书籍

Big Ideas Simply Explained

The Art Book (Big Ideas Simply Explained)

The Bible Book (Big Ideas Simply Explained)

The Law Book (Big Ideas Simply Explained)

The Medicine Book (Big Ideas Simply Explained)

The Movie Book (Big Ideas Simply Explained)

DK English

English for Everyone - Business English - Level 1 Course Book

English for Everyone - Business English - Practice Book Level 2

English for Everyone - English Idioms by Thomas Booth, Jenny Wilson

English for Everyone - Level 1 Beginner - Course Book by Rachel Harding, Tim Bowen, Susan Barduhn

English for Everyone - Level 3 Intermediate - Practice Book

English for Everyone English Vocabulary Builder

English for Everyone Junior 5 Words a Day

DK Witness

DK Witness Travel Guide

Journey An Illustrated History of Travel by DK, Simthsonian

Austria (DK Eyewitness Travel)

Brazil (DK Eyewitness Travel)

Canada (DK Eyewitness Travel)

China (DK Eyewitness Travel)

Dordogne Southwest France (DK Eyewitness Travel)

Europe (DK Eyewitness Travel)

Family Guide Italy (DK Eyewitness Travel)

Florence & Tuscany (DK Eyewitness Travel)

France (DK Eyewitness Travel) by DK.epub
France (DK Eyewitness Travel)

Germany (DK Eyewitness Travel)

India (DK Eyewitness Travel)

Istanbul (DK Eyewitness Travel)

Las Vegas (DK Eyewitness Travel)

London (DK Eyewitness Travel)

Mexico (DK Eyewitness Travel)

Moscow (DK Eyewitness Travel)

New England (DK Eyewitness Travel)

Paris (DK Eyewitness Travel)

Poland (DK Eyewitness Travel)

Portugal (DK Eyewitness Travel)

Prague (DK Eyewitness Travel)

Rome (DK Eyewitness Travel)

San Francisco and the Bay Area (DK Eyewitness Travel)

Spain (DK Eyewitness Travel)

St. Petersburg (DK Eyewitness Travel)

Stockholm (DK Eyewitness Travel)

Switzerland (DK Eyewitness Travel)

Top 10 Amsterdam (DK Eyewitness Travel)

Top 10 Berlin (DK Eyewitness Travel)

Top 10 Boston (DK Eyewitness Travel)

Top 10 Budapest (DK Eyewitness Travel)

Top 10 Copenhagen (DK Eyewitness Travel)

Top 10 Honolulu & Oahu (DK Eyewitness Travel)

Top 10 Los Angeles (DK Eyewitness Travel)

Top 10 Rome (DK Eyewitness Travel)

Top 10 San Antonio and Austin (DK Eyewitness Travel)

Top 10 Tokyo (DK Eyewitness Travel)

USA (DK Eyewitness Travel)

Ultimate Food Journeys (DK Eyewitness Travel)

Vienna (DK Eyewitness Travel)

Vietnam (DK Eyewitness Travel)

Washington DC (DK Eyewitness Travel)