冰洁的技术博客


三十道android开放题(初稿)

为姗姗来迟的安卓面试题表示抱歉。
大家可以先思考一下这些问题,答案会过一阵在后文放出。

一、基础题:

1、Activity生命周期和启动模式,以及使用场景

2、Service的生命周期,如何启用/停用Service

3、可能导致OOM内存溢出的情况有哪些,怎么解决

4、Android中的动画有哪几类,它们的特点和区别是什么

5、注册广播几种方式

6、如何自定义View

7、程序crash的所有可能原因

8、android动画

9、Android操作系统分层

二、中级题:

1、Android事件处理机制

2、内存泄露的案例

3、图片加载库的使用及比较,内在逻辑分析

4、网络库的使用和比较

5、android线程间通信

6、android进程间通信。Binder源码与Looper关系等

7、设计模式在android中的应用,手写几个典型模式

8、annotation 以及java反射机制

9、Java虚拟机

10、 Java几种线程池

三、高级题:

1、热修复技术,原理及其应用

2、react native

3、几种架构模式

4、新建一个工程,需要加入哪些库和模块,该怎么设计

有关测试: 1、DDMS + MAT; 2、monkey test和logcat命令的常用过滤参数 3、android作优化有哪些可以考虑的方向?

四、开放题:

1、当我在浏览器中输入一个url,世界发生了什么。

2、http和https的区别

3、几种加密方式区别,对称与非对称。

4、你还了解什么其他的语言?和Java对比一下。


Read on →

【飞得更高】扫清Android面试障碍--面试前的准备


有的时候我们在职场上会碰到各种各样的坑…… 不管是创业公司倒闭啦,新同事合不来啦,氛围太差受不了啦。如果说女人的安全感来自于独立,那么程序员的安全感就是手中有技术,心中有源码。想飞得更高,有哪些是你平时可以做的呢?

本篇接上一篇 扫清面试障碍。上篇主要抛砖引玉,提到了许多技术和非技术相关的面试技巧等。本篇讲述面试前的准备,这不仅是技术实力的积累,还有相当一部分软实力的积累。即使是暂时没有跳槽想法的技术人,也应当生于忧患之中。行业的发展非常迅速,逆水行舟不进则退。危机意识很重要,厚积薄发才能更上一层楼。

友情刺激大家: 《高二Android大牛是这样炼成的》

面试前的准备可分为长期准备,和短期准备。首先声明,文中提到的书籍以及公众号,博客等,都是我自己觉得特别优秀的,绝没收任何广告费。。。


Read on →

扫清Android面试障碍

  怎样快速突破初级瓶颈,变身高级开发?怎样在短时间内提高自我身价,月薪提高50%?你是否是个代码高手,面试中却发挥不出来,想进阶却摸不着头脑。博主在互联网行业摸爬滚打,百面成钢。特来总结与分享自己面试的心路历程和经验。

  本系列将分为四大部分切入,包括第一部分面试前的准备:从长期来看要做点什么来提高自己的身价,短期内怎样迅速进入面试状态,以及如何准备简历才能吸引HR的眼球。第二部分是安卓初级中级高级面试题,大概会有几十个问题,基本覆盖了小白到大牛进阶的所有会被问到的问题。第三部分是除了安卓经验,你还会被问到哪些问题。第四部分是关于 offer的选择,以及一起探讨未来的职业规划。从这四部分看来,已经涵盖了一个程序员的方方面面。我一直觉得面试也是一种考试,只要是考试就有套路,有套路就能被总结,能被总结就能被练习,就好比高考模拟卷或者培训班,能教你的也就是反复练习。   


Read on →

深入浅出MVP

讲清MVP

:   将业务逻辑、数据处理从界面中抽离出来。增加了Presenter处理业务逻辑,总的控制 Model数据层与 View视图层的通信。

目的:  使每个类尽可能简单,避免了大量“胖”类的存在。

用到了: 单一职责的思想、面向对象的设计原则。(抽象,封装,继承,多态)

好处:  将各个组件进行解耦,带来了良好的可维护性,可扩展性,可测试性,稳定性;使每个模块能够独立地进行演化。

举例

首页刷新与路由逻辑


Read on →

Android 内存泄漏实战

我们知道,一些不好的代码习惯会造成 android 内存泄漏,从而影响应用性能。然而,这是怎么发生的呢?本文不会老生常谈地告诉你应该怎么做;或是人为地制造泄漏代码,并在控制台打印出来等等。而是另辟蹊径,以一个曾经实际碰到的真实场景,从回收机制上深入图解为何会产生这种泄漏。力求让人“弄个明白”。

=== 本文还未完成,先占坑 ====


Read on →

自己动手写个api annotation库

自己动手写个api annotation库

  1. 目前封装的okhttp api库
  2. retrofit 示例与缺点
  3. 期望的代码
  4. annotation分类与实现
  5. 原理解析


Read on →

一篇文章带你深入 REST

##一篇文章带你深入 REST

###什么是软件架构,和软件结构的区别

软件架构是软件系统在运行时的抽象,而软件结构则是静态源代码的属性。

核心:抽象原则

####元素

处理、数据、连接元素,元素属性与关系的定义形式。

=== 本文还未完成,先占坑 ====


Read on →

开发完iOS应用,接下去你该做的事

iOS专项总结

  一个应用经过多次迭代后告一段落,接下去我们在技术上还可以做些什么呢?答案是提高代码的整体质量。关于这方面,除了我们常喊的 重构,测试也非常重要。

  博主近期给我们的 iOS客户端代码来了一次专项测试。主要从常规的 辅助测试 入手,来了次代码大清理,找到代码中的问题,并一一改掉它们。惊喜的是,这对于提高本人的代码水平有很大的帮助。其实,这套代码的质量本身已经很高了,也非常整洁。而这主要得益于严格的代码规范和pull request机制。

  关于测试,App常关注的往往是一些功能性的,包括单元测试,用monkey在界面上点击看页面表现是否正确等等。 我以前还搭过一个 aspectJ + robotium。(这是Java上的) 然而,测试更应该覆盖代码质量,性能检测等等。
  下面给出一副我理解测试的结构图:

  点击图片可放大缩小。


Read on →

react优化编译器-JSX语法进阶


  博主在学习react native的时候接触了JSX。JSX 是一个看起来很像 XML 的 JavaScript 语法扩展。React 可以用来做简单的 JSX 句法转换。

  在我看来,前端语言纷繁复杂,Html、css、js。有没有一种统一的语法将它们整合起来,包含在一个共同的作用域中,写起来既像标签语言,又有 namespace 的概念;并且当我们在学习的时候,只需学习统一的格式,类定义等等就能写好native应用。可以说,JSX 就是这样的一种语法。

  如果你对 react native还不了解,想先有一个总体上的认识,可以下载我的ppt 文档 《React Native全接触》 pdf版本链接。点击直接在浏览器中查看,你可能需要一点时间打开此文档。

  以下学习自facebook 的 github issue里。大部分翻译自 RN官方的问题中。   


Read on →

react-native android配置中的坑

Nov 25, 2015

简单记录下配置react-native android碰到的坑。

  1. 网上的中文版配置都有坑。
  2. 一定要仔细看命令行告诉你的话。
  3. ANDROID_HOME 要加在本机的环境变量中。有这几个文件都可能是,都写一遍:
    • .zshr
    • .bashrc
    • .bash_profile
      注意这些都在Macintosh底下
  4. 一定要去官网:React Native Doc


Read on →

android-iOS区别记(上)——从语言的特性说开去

这篇文章写起来挺艰难的。因为网上很少有人提到过这种对于android和 iOS的横向比较。因缘际会之下博主同时接触了这两种语言这两个平台。也把我的一些体会分享给大家。

语言的特性

1. 划分

  首先,OC是编译型语言,Java是混合型语言;OC是动态语言,Java是静态语言。它们又都是面向对象的静态类型语言。前者的区别造成了它们在代码形式风格上的诸多不同;后者又使它们在写法上诸多类似。 这里补充一点:动态类型语言和动态语言是两个概念。动态类型语言指的是运行期间才去做数据类型检查的语言,类似一些脚本语言,重点是数据类型。而动态语言指的是运行期间可以改变代码结构的语言,比如Object-C、C#、JavaScript、PHP;反之则如Java、C、C++。所以在这一点上,Java和OC显露出了分歧。


Read on →

OC中aspect切面编程

打点纪

每一个技术变化都要从PM的一个需求讲起。对于一个ios应用来说,当第一版的功能完成得差不多以后,我们就必不可少地要为应用中用户的各种行为记录log或track。市面上有不少的应用统计第三方库,类似:umeng,GA,mixpannel & etc.. 当用户在信息页点击拨打电话按钮时,记录一下拨打事件。我们也许会这样实现:

// InfoViewController.m

- (void)onCallButtonPressed:(UIButton *)button
{
    [self call];
    [Track event:eventCall];
} 

这个需求就这样轻松搞定了。可是PM又说:我要的不止是点击拨打按钮,我还需要点击购买按钮,发送短信按钮,私聊按钮,发布按钮,设置按钮,求购按钮……

一开始,你或许会尝试在PM所说的每一个buttonPress方法中加上[Track event:kSomeEventYouDefined];这行代码。这时候一部分优秀的程序员已经开始抓狂了,因为到处散落着相似的代码。另一部分或许会有些不安,但还是勉强接受了这种写法。

可是最近有一天碰到这样一件事。PM一拍脑袋说:我们这个设计已经落伍了,这个版本我们要给所有的UI换上新衣服。另外,以前记的许多log都不需要了,并且增加了新的log。

苦逼的程序员这下崩溃了。他发现不仅要在新的UI中加入track,还需要找到并删除旧的track。然而旧的track散落在程序的各个角落,他不得不ctrl+F一个个搜到再看下是否有用。这种情况下,漏删与少加很可能发生

为什么会产生这样的情况,还是最初的设计出了问题。如果一开始我们能找到一种合适的架构,使得这些log在同一处被记上,就不会发生这样的情况。此时我们引入 Aspect Oriented Programming (AOP)。


Read on →

OC中的runtime与Java反射机制对比

iOS中的运行时编程,类似Java的反射。

Java是一门静态语言,类和方法都有严格的public, private之分。而反射机制却可以实现动态性,获取类的私有方法等。

runtime VS reflection
1. 相同点

都可以实现的功能:获取类信息、属性设置获取、类的动态加载、方法的动态调用等。

ios中相关方法使用:

类的动态加载:NSClassFromString(@“className”)

方法的动态调用:NSSelectorFromString(@“doSomethingMethod”)


Read on →

欢迎来到Jekyll的世界!

这篇文章将会出现在_posts目录底下。它遵循markdown的语法,并可以嵌入任意的Html标签。上一篇文章已经详细介绍了markdown的语法,这篇文章将着重讲解构建个人博客的又一利器:jekyll

jekyll是一个简单的免费的Blog生成工具,类似WordPress。但是和WordPress又有很大的不同,原因是jekyll只是一个生成静态网页的工具,不需要数据库支持。但是可以配合第三方服务,例如Disqus。最关键的是jekyll可以免费部署在Github上,而且可以绑定自己的域名。

jekyll常用的命令只有两条,剩下的都是其变种。

jekyll serve

在mac终端的网站根目录底下运行这行,将启动jekyll默认的localhost:4000端口。于是你可以在浏览器中查看本地的网页。如果你不想一直开着这个终端,你可以使用jekyll serve --detach在后台运行。

jekyll build

这会对你的更改重新生成一遍,包括你对_config.yml文件的更改。


Read on →

markdown常用语法记录

1.字体和颜色:

 <font color=red>红字</font>

 我是黑体字

 我是微软雅黑

 我是华文彩云    


Read on →

云计算技能图谱

以下内容主要是转载给同学看,方便同学选择方向的。


Read on →

大数据技能图谱

以下内容主要是转载给同学看,方便同学选择方向的。


Read on →