Compare commits

...

5 Commits

Author SHA1 Message Date
Omooo ec5640eee9 Update README.md 4 years ago
Omooo 203f8fdcb9 Update 校招面试.md 4 years ago
Omooo afc12b1d4b update interview 4 years ago
Omooo 1fcf476654 Update 口水话.md 4 years ago
Omooo 059167893d Update Learn Git.md 4 years ago
  1. 16
      README.md
  2. 2
      blogs/DesignMode/口水话.md
  3. 72
      blogs/Git/Learn Git.md
  4. 132
      blogs/Interview/校招面试.md

@ -282,9 +282,21 @@ Android Notes
[异或,原来这么有用](https://github.com/Omooo/Android-Notes/blob/master/blogs/Algorithm/%E5%BC%82%E6%88%96%E5%BA%94%E7%94%A8.md) [异或,原来这么有用](https://github.com/Omooo/Android-Notes/blob/master/blogs/Algorithm/%E5%BC%82%E6%88%96%E5%BA%94%E7%94%A8.md)
[一篇文章搞定 HashMap](https://github.com/Omooo/Android-Notes/blob/master/blogs/Algorithm/HashMap.md) [一篇文章搞定 HashMap](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/HashMap.md)
[八大排序]() [LinkedList](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/LinkedList.md)
[ArrayList 和 Vector 源码分析](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/ArrayList%20%E4%B8%8E%20Vector%20%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90.md)
[CconcurrentHashMap](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/ConcurrentHashMap.md)
[CopyOnWriteArrayList](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/CopyOnWriteArrayList.md)
[HashSet 和 TreeSet](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/HashSet%20%E5%92%8C%20TreeSet.md)
[TreeMap 和 LinkedHashMap](https://github.com/Omooo/Android-Notes/blob/master/blogs/%E9%9B%86%E5%90%88/TreeMap%20%E5%92%8C%20LinkedHashMap.md)
[八大排序](https://github.com/Omooo/Android-Notes/blob/master/blogs/Algorithm/%E5%85%AB%E5%A4%A7%E6%8E%92%E5%BA%8F.md)
#### 计算机网络 #### 计算机网络

@ -96,6 +96,8 @@
生产者消费者模型如消息队列,一般都可以看成是观察者模式。在 Android 中,最常见的观察者模式应用就是广播了。 生产者消费者模型如消息队列,一般都可以看成是观察者模式。在 Android 中,最常见的观察者模式应用就是广播了。
在 Java 中的 util 包下也有 Observable 和 Observer,不过这个 Observable 是一个类而不是一个接口,其次它的所有方法比如 addObserver、deleteObserver、setChanged、notifyObservers 等都是加锁的,notifyObservers 由于加锁可能存在两个问题,新添加的观察者没有收到通知和注销的观察者依旧收到了通知。
#### 责任链模式 #### 责任链模式
责任链模式是指将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在 GoF 的定义中,一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了。Android 中事件分发机制的用的就是这种形式。当然,也存在请求不会被终止传递的场景,而是所有处理器都会处理一遍,OkHttp 的拦截器链使用的就是这种形式。 责任链模式是指将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在 GoF 的定义中,一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了。Android 中事件分发机制的用的就是这种形式。当然,也存在请求不会被终止传递的场景,而是所有处理器都会处理一遍,OkHttp 的拦截器链使用的就是这种形式。

@ -16,6 +16,32 @@ git log --oneline
git log -n5 --oneline git log -n5 --oneline
``` ```
```java
// 比较暂存区和 HEAD 之间的区别
git diff --cached
// 比较工作区和暂存区之间的区别
git diff
```
```java
git reset 有三个参数
--soft 这个只是把 HEAD 指向的 commit 恢复到你指定的 commit,暂存区 工作区不变
--hard 这个是 把 HEAD, 暂存区, 工作区 都修改为 你指定的 commit 的时候的文件状态
--mixed 这个是不加时候的默认参数,把 HEAD,暂存区 修改为 你指定的 commit 的时候的文件状态,工作区保持不变
```
```java
// git checkout 不仅可以切分支,还可以使工作区的内容保持和暂存区一致
// 恢复 readme.md 文件和暂存区一致
git checkout -- readme.md
// 小结:
// 已暂存区为中心
// 暂存区与HEAD比较:git diff --cached
// 暂存区与工作区比较: git diff
// 暂存区恢复成HEAD : git reset HEAD
// 暂存区覆盖工作区修改:git checkout
```
#### 情景模式 #### 情景模式
@ -58,5 +84,51 @@ git commit --amend
同理,这也可以用于多次修改一个提交。比如我们再往远程 push 时,我们希望只产生一个提交,这时候在本地开发时,可以多次 commit --amend 而不是多次 commit,这样就永远只会有一个提交了。 同理,这也可以用于多次修改一个提交。比如我们再往远程 push 时,我们希望只产生一个提交,这时候在本地开发时,可以多次 commit --amend 而不是多次 commit,这样就永远只会有一个提交了。
情景三:合并多个提交为一个提交 情景三:合并多个提交为一个提交
在我们自己的开发分支上可能有多个提交,一般在 QA 测试完之后,我们需要把本地分钟的提交合并到 master,一般不推荐直接 merge,而是切到 master,把我们自己的 commit pick 到 master 上。这时候就需要将我们的开发分支的多个提交压成一个提交,比如将最近的的三个提交压成一个提交:
```java
git rebase -i HEAD~3
```
然后就会有以下输出:
```java
pick 0f8d0e5 first commit
pick 5beec24 second commit
pick ab08235 third commit
# Rebase da9da1b..a28b190 onto 0f8d0e5 (6 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
```
这时候输入 I 进入编辑模式,改成以下:
```
pick 0f8d0e5 first commit
s 5beec24 second commit
s ab08235 third commit
# Rebase da9da1b..a28b190 onto 0f8d0e5 (6 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
```
也就是把 second 和 third commit 合并到 first commit 上。下面还有一些参数可以使用,比如说 r 就是保留提交,但是需要编辑 commit message。最后 esc :wq 保存就行了。

@ -0,0 +1,132 @@
---
校招面试
---
技术面试
Java
1. 了解 StringBuilder 和 StringBuffer 的区别嘛?
2. 说说抽象类和接口的区别,运用场景是什么?
3. 说说你对继承和多态的理解,为什么 Java 是单继承呢,多继承有啥问题?
4. 如何理解面向对象?面向过程了解嘛?
5. 说说 ArrayList 和 LinkedList 的区别?是否有线程安全问题?ConcurrentModificationException 遇到过嘛?
6. 说说 HashMap 定位 key 索引的过程?HashMap 为什么容量是 2 的 n 次方的设计,为啥不是一个质数设计呢比如 HashTable?
7. 说说 Java 的异常机制,finally 的作用?final 和 finally 的区别?OOM 和 StackOverFlow 是如何发生的?
8. IO 和 NIO 的区别?
9. 说说你对反射的理解?有使用过嘛?反射为什么会损耗性能?获取 Class 有哪几种方式?
10. 说说你对泛型的理解?如何理解 Java 所谓的假泛型?泛型能够解决什么问题呢?extends 和 super 的区别?
11. 说说线程池的理解?它的出现解决了哪些问题?ThreadPoolExecutor 几个参数的意思?
12. 说说你对 synchronized 的理解?说说锁升级的过程?synchronized 锁普通方法和静态方法有啥区别?
13. 说说你对 volatie 的理解?
14. Object 有哪些方法?wait/notify 能够解决什么问题?
15. 说说 sleep、wait、join、yield 的区别?
16. 静态内部类和成员内部类的区别?
17. 线程有哪几种状态,如何切换的?
JVM
1. 说说 JVM 的内存区域划分?哪些是线程私有的?方法的参数以及局部变量放在哪个区域?
2. 说一下类加载机制?
3. 内存模型了解嘛?
4. GC 回收算法有了解嘛?
Network
1. 说说 TCP/IP 四层分层结构,每一层有哪些网络协议?
2. 说说 Get 和 Post 的区别?Restful API 了解嘛?
3. Session 和 Cookie 的区别?
4. 说说你对 Http 的理解?Http header 里面通常有哪些信息?常见的 Http 状态码有哪些?Http 如何传输大文件?
5. Http 有哪些问题?Https 解决了哪些问题?加密算法了解哪些?如何防止中间人攻击?简单说下 RSA?
6. 说下 TCP 和 UDP 的区别?TCP 是如何实现可靠传输的?
7. 说下 TCP 的三次握手?FYN 洪水攻击了解嘛?如何防范?三次握手改成两次可以不?
8. TCP 的四次挥手,为什么最后需要两个 MSL?
9. DNS 有啥作用?ARP 协议呢?
操作系统
1. 进程和线程的区别?
2. 进程间通信方式有哪几种?在 Android 都有使用了哪些?
3. 死锁的几种条件?
4. 虚拟内存了解嘛?内存的分段和分页的区别?
设计模式
1. 说说你知道的设计原则?
2. 手写单例模式,应用场景在哪?
3. 说说你对观察者模式的理解?使用过 Java 中的 Observe/Observable 嘛?有啥弊端?
4. 项目中有使用到设计模式吗?
Git
1. 使用过哪些命令?
2. merge 和 rebase 的区别?
3. reset --hard 和 --soft 的区别?
项目
1. 检测出来的权限,如何知道是在哪个模块的呢?或者说,如何知道每个模块有哪些权限呢?
2. 说说你使用的静态分析?Lint 有了解嘛?项目中爆红的 API 有警告是如何做到的?
3. 说说序列化?如何重写序列化流程呢(ArrayList)?序列化会走构造方法嘛?序列化后的对象和之前的对象是同一个对象嘛?Android 的序列化机制了解嘛?
4. 项目中有遇到哪些难点,是如何解决的呢?
5. GitHub 看过哪些项目?
算法
1. 手写二分查找
2. 判断合法的 ip 地址
非技术面试
1. 自己的优势在哪?说一下对自己的评价
2. 为什么没有面 xx 呢?
3. 平时有哪些学习途径?
4. 如何看待面试造火箭,工作拧螺丝?
Loading…
Cancel
Save