Sparky


  • 首页

  • 归档

未命名

发表于 2019-05-06

知识点

Android

  1. MVC和MVP模式, 设计模式(单例模式,工厂模式,观察者模式,代理模式,适配器模式,模板模式)
  2. NDK开发,aidl。(通过jni实现java和c之间的调用和回调数据通信)
  3. 第三方sdk(高德地图,第三方登录和分享,个推/FCM推送)
  4. Android混淆和多渠道打包,包括应用市场上线流程,bug修复和优化
  5. 自定义recyclerview和listview,分页加载,异步加载
  6. 屏幕适配方案(图片适配,像素适配和layout适配)
  7. Android主流开发框架(greendao, eventbus, retrofit, pulltorefresh, glide)
  8. Handler机制和Binder机制,aidl
  9. Android常用的布局控件(线性布局,绝对布局,帧布局,相对布局,表格布局)以及Material Design布局(Constrainlayout,Cordinatorlayout,DrawerLayout,NavigationBar,Toolbar,Snakebar,FloatActionBar,NeastScrollView),以及一些主流的第三方ui控件(Butterknife,pulltorefresh,MaterialCalendar,CircleImageView,CardView)
  10. Android数据(图片,文字,文件)缓存,内存优化,并且能够对图片的优化做相应的处理,熟悉ASimpleCache,LruCache和DiskLruCache。
  11. 掌握oom,anr异常处理,以及全局Crash处理和Bugly等异常上报
  12. 视频处理(FFmpeg)和视频播放(IJKplayer,自定义视频播放器)
  13. google全家桶(goole map, gcm/fcm, zxing, google billing)
  14. 二维码开发,扫描二维码,解析和生成二维码
  15. 熟悉组件之间的数据传递和进程之间的通信(AIDL)
  16. wifi开发,监听wifi状态,wifi信息状态
  17. [了解]热修复技术
  18. [了解]第三方源码
  19. 事件传递机制,并能处理滑动冲突,使用手势识别器
  20. 良好的开发习惯和代码风格。
    Java

  21. 扎实的java基础,熟悉java序列化机制和实现Android下的IPC

  22. 集合,IO流,并发(多线程同步,线程池)

其它

  1. Linux(linux操作系统,常用的linux命令)
  2. kotlin和python(kotlin和python语法)
  3. Git和SVN版本控制

未命名

发表于 2019-05-06

正则表达式

基本正则表达式

扩展正则表达式

普通字符

元字符

  • * 该符号之前的字符出现0次或多次
  • . 匹配任意字符
  • [] 字符集合
  • ^ 匹配行首
  • $ 匹配行尾
  • \ 转义
  • \<> 精确匹配
  • {n,m} 之前的字符出现n,m次

扩展元字符

  • ? ?之前的符号出现0次或1次
    • +之前的字符出现1次或多次
  • ()
  • |

通配

  • *
  • .
  • ^

未命名

发表于 2019-05-06

阅读器取词标注

未命名

发表于 2019-05-06

阅读Android源码

由浅入深,同时横向和纵向阅读

基础

Handler-Message-Lopper

Activity-Service

Fragment

View

MotionEvent

LayoutInflator

SurfaceView-TextureView

AsyncTask

Volley

android.util.*

进阶

Context

ClassLoader

Binder

WMS-AMS-PMS-NMS-IMS

第三方开源项目

EventBus

RxJava

Guava

再讲一下老罗给出的Android学习路线那两年炼就的Android内功修养-(罗升阳),他给出三纵三横的路线,

  1. 准备 (横向)

    • 阅读相关的书籍了解linux内核和Android应用基础知识
    • 搭建Android源码环境
    • C/C++基础,Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
  2. dalvik虚拟机 (横向)

    Android系统的应用程序及部分应用程序框架是使用Java语言开发的,它们运行在Dalvik虚拟机之上,还有另外一部分应用唾弃框架在使用C/C++语言开发的。使用Java语言开发的应用程序框架老罗称之为Java Runtime Framework,而使用C/C++语言开发的应用程序框架老罗称之为C/C++ Runtime Framework,它们被Dalvik虚拟机一分为二。通过前面的学习,其实我们都已经了解Android系统的Java Runtime Framework和C/C++ Runtime Framework,因此,我们最后将注意力集中在Dalvik虚拟机上.
    Dalvik虚拟机简要介绍和学习计划

  3. 专用驱动 (横向),这些专用驱动就是指Logger,Binder和Ashmem,他们是整个Android系统的基石。

    • Logger,Android日志系统驱动程序Logger源代码分析
    • Binder, Android进程间通信(IPC)机制Binder简要介绍和学习计划
    • Ashmem, Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划
  4. HAL (纵向)
    硬件抽象层最适合用作Android系统的学习入口,它从下到上涉及到了Android系统的各个层次。
    • Android硬件抽象层(HAL)概要介绍和学习计划
    • 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
  5. Application Component (纵向)

    应用程序组件是Android系统的核心,为开发者提供了贴心服务,应用程序组件有四种,围绕应用程序组件,又有应用程序进程、消息循环和安装三个相关模块。

    • Activity
    • Service
    • BroadcastReceiver
    • ContentProvider
    • 进程
    • 消息循环
    • 安装
  6. ui (纵向)

    6.1 ui框架

    4.2ui渲染图

    上图可以看出关于Android的UI架构的三条主线:

    • 每一个window的surface是怎么渲染的
    • surfaceflinger是怎样合成每一个window的surface
    • windowmanagerservice是怎样管理window的

      6.2 分析路线

      6.2.1 首先以开机动画作为切入点,了解linux内核中的驱动。

      FB驱动抽象了显卡,上面的用户控件程序就是通过它显示UI的

      HAL层的Gralloc模块对FB驱动进行了封装,以方便SurfaceFlinger对他进行访问
      Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析

      SurfaceFlinger负责合成各个应用程序窗口的ui,也就是将各个窗口的ui合成,并通过FB显示在屏幕上
      Android应用程序与SurfaceFlinger服务的关系概述和学习计划

      6.2.2 分析SurfaceBlinger

      Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

      6.2.3 SurfaceFlinger的操作对象是应用程序窗口,因此我们要掌握应用程序窗口的组成

      Android应用程序窗口(Activity)实现框架简要介绍和学习计划

      6.2.4 应用程序窗口是windowmanagerservice管理的,并且也是wms负责提供窗口信息给surfaceflinger的,因此需要分析wms

      Android窗口管理服务WindowManagerService的简要介绍和学习计划

      6.2.5 以上Android系统的ui框架就清晰了,但是前面所研究的应用程序的窗口还是太抽象了,再去具体研究一下某些系统ui控件是怎么实现的。例如:

      Android控件TextView的实现原理分析

      Android视图SurfaceView的实现原理分析

      6.2.6 最后分析一下资源管理框架,他有效分离了代码和ui

      Android资源管理框架(Asset Manager)简要介绍和学习计划

      Android应用程序资源的编译和打包过程分析

未命名

发表于 2019-05-06

性能测试

未命名

发表于 2019-05-06

内存优化

内存泄露和内存溢出

内存泄露就是对某一内存空间的使用完成后没有关闭。
出现的

主要原因:
某些长存对象持有一些应该被回收的对象,而导致垃圾回收器无法回收这些应该被回收的对象。

出现的场景:

  1. 数据库的cursor没有关闭
  2. bitmap对象使用完没有recycle
  3. adapter中没有复用contentview
  4. activity中对象的生命周期大于activity的生命周期

优化内存的方法:

  1. 减少不必要的全局变量尽量避免static成员变量引用资源耗费过高的实例比如Context。
  2. Cursor回收
  3. receiver回收
  4. stream/file回收
  5. 避免创建不必要的对象。(不要在自定义view的ondraw方法中大量创建对象)
  6. 避免内部getter/setter方法。

未命名

发表于 2019-05-06

面试中的问题域

  1. 语言基础(基础概念语法,常用类)
  2. 界面相关(说出一个控件的实现思路或者让面试者模拟系统控件实现)
  3. 网络相关(GET/POST,multipart form,HTTP,TCP/IP,Socket编程,三次握手)
  4. 逻辑框架设计相关

求职心态

  1. 天真无知(放低姿态) – 出现问题
  2. 开始走弯路(不调整心态,三天打鱼两天晒网,拖延症)– 找到问题
  3. 继续走弯路(钻牛角尖很要命,肚内无货,项目经验太真实)– 分析问题
  4. 还是走弯路但开始自我救赎(开始拿起高级编程的书,敲项目代码) – 处理问题
  5. 自卑(自己做的应用被调侃太基础,找开源项目,期望薪资越来越低) –调整处理问题
  6. 绝望(被要求敏捷开发,心态上觉得工作和待遇不匹配)–处理的过程中遇到坑
  7. 绝处逢生(放低薪资标准,全深圳投简历,白天各种网站海投,一天至少两家面试)–继续处理及解决问题

泻药

  1. 工作年限(如果你想证明你有x年的价值,就要在简历中体现出来比如开源项目code)
  2. 复习(复习很重要,因为记性差而忘掉)
  3. 项目(真or假,技术是最重要的)
  4. 内推(如果要找尽量内推)
  5. 公司背景(技术氛围浓厚,对技术有要求,对代码质量有要求)
  6. 待遇不能低于行情
  7. 保持学习的态度

未命名

发表于 2019-05-06

MVC和MVP的区别
MVP与MVC的区别(图解)
MVC

MVP

* 1. 结构

MVC中Model和view层是有交互的,比如自定义view中是直接使用model层的数据,在MVP中model层和view层不直接进行交互,需要调用presenter完成

* 2. 内容

MVC: view对应自定义view和xml布局
controller对应activity和fragment

MVP: view层对应activity和fragment
presenter层对应控制逻辑,是view和model之间的桥梁

* 3. 实现方式

MVC中大多数代码都存在与activity和fragment中,文件结构简单,但是容易一个类很多代码。
MVP中把交互逻辑抽到了presenter层,所以要新建很多类。

MVP优势:

  1. 模型和视图完全分开(1.修改视图而不改变模型,可以更高效的使用model)
  2. presenter复用
  3. 如果把逻辑都放在presenter中就能脱离用户接口实现单元测试

未命名

发表于 2019-05-06

进程间通信

  1. AIDL
  2. Broadcast
  3. Messenge

未命名

发表于 2019-05-06

hexo+github+freenom+dnspod免费搭建个人网站教程

前言

本篇是一个关于搭建个人网站的总结,通过在hexo管理github page,然后在freenom上注册免费域名,并通过dnspod进行域名解析。

关于hexo管理github.io可能不是很详细,因为是很早之前做的了,这里主要是总结一下,主要是讲进行域名绑定的步骤。

步骤

工具

  1. 安装Node.js

    https://nodejs.org/dist/v4.2.3/node-v4.2.3-x86.msi

    https://nodejs.org/dist/v4.2.3/node-v4.2.3-x64.msi

    安装后在命令行输入node -v和npm -v.如果成功输出版本号则说明安装成功。

  2. 安装Git

    https://github.com/git-for-windows/git/releases/download/v2.11.0.windows.3/Git-2.11.0.3-32-bit.exe

    https://github.com/git-for-windows/git/releases/download/v2.11.0.windows.3/Git-2.11.0.3-64-bit.exe

    安装后在命令行输入git –version,如果成功输出版本号则说明安装成功。

  3. 安装hexo
    因为hexo需要node.js和nmp,所以请确第一步成功。

    在命令行输入./npm install hexo-cli -g

    安装完成后再命令行输入hexo -v,如果成功输出版本号则说明安装成功

github page配置

  1. 注册登录github,添加一个仓库。
    例如dounia.github.io,然后在地址栏输入dounia.github.io即可访问,但是刚开始是404,因为你还没有给你的页面配置任何的内容。

    接下来就是利用hexo将hexo模板配置到github

hexo初始化配置

创建一个文件夹用来管理github page,例如dounia.github.io

然后进入该目录打开git bash

然后执行命令 npm install hexo -g

然后执行命令 hexo init,如果看到最后显示INFO Start blogging with Hexo!说明初始化成功了

加下来的两个命令用来试验是否Hexo模板初始化成功hexo g && hexo s,
然后在浏览器输入localhost:4000,如果进入了hexo的模板页,说明衣裳的步骤都成功了。

hexo diy

下边是使用hexo模板美化我们的github page

主题
  1. 下载主题。
    github上有很多开元的hexo主题,可以通过搜索hexo theme搜索。
    然后通过git命令克隆到我们的themes目录下, 例如git clone https://github.com/iissnan/hexo-theme-next themes/next

  2. 配置主题。
    主题下载下来之后要使用的话需要在hexo根目录也就是dounia.github.io/目录下 打开_config.yml,找到theme: landscape将landscape替换为next,next就是themes文件夹下你刚才下载的主题所在的文件夹。重新执行hexo -s,在浏览器输入localhost:4000测试是否成功。

内容

修改内容可以参考官方文档https://hexo.io/zh-cn/docs/configuration.html

例如:

title: 网站标题
subtitle: 副标题
description: 个人签名
author: 姓名
language: zh-Hans
timezone:

注意:这里你可能有注意到在这个_config.yml文件中有一个deploy标签,下边就会用到了,是用来管来github的。

配置远程仓库

修改dounia.github.io/_config.yml文件的deploy标签,关联到我们的仓库。

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo: git@github.com:douyn/dounia.github.io.git
  branch: master

推送到远程仓库

  1. 安装部署工具。
    npm install hexo-deployer-git –save

  2. 初始化git仓库

    git init 
    git remote add origin git@github.com:douyn/dounia.github.io.git
    
  3. hexo clean && hexo g && hexo d

    1. 使用freenom注册域名。
    2. 在根目录下添加CNAME文件,里边内容为你的域名
    3. 在github项目setting的github page标签下Custom domain中,填写你的域名。
    4. dnspod域名解析中添加域名解析。而且要添加两条记录。
        |主机记录|记录类型|线路类型|记录值|权重|MMX优先值|TTL|
        |--|--|--|--|--|--|--|
        |www|CNAME|默认|dounia.github.io.|-|-|600|
        |@|A|默认|185.199.111.153|-|-|600|

        其中185.199.111.153为你的github page的ip,可以通过ping dounia.github.io得到

5. 在freenom网站services->My Domains,选择Manage Domain,选择Management Tools->Nameservers,填入F1G1NS1.DNSPOD.NET和F1G1NS2.DNSPOD.NET。

等待dns生效后即可访问

参考

https://blog.csdn.net/wapchief/article/details/54602515

https://freeknight.cf/2018/04/21/World/

1…78910
Sparky

Sparky

我是谁?我在做什么?我为什么要这么做?我想做什么?我要怎么做?

99 日志
© 2019 Sparky
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4