Skip to content

Commit 60a4a49

Browse files
committed
Updates chapter1.md
Auto commit by GitBook Editor
1 parent 3a99c86 commit 60a4a49

File tree

3 files changed

+147
-2
lines changed

3 files changed

+147
-2
lines changed

SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
* [前言](README.md)
44
* [Web 篇](chapter1.md)
5+
* [PHP 篇](php-pian.md)
56

chapter1.md

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,76 @@
1-
# First Chapter
1+
> Web 篇的文章,PHPer 大神们可以直接略过。
22
3-
GitBook allows you to organize your book into chapters, each chapter is stored in a separate file like this one.
3+
对于大公司,很少会有全栈工程师这个岗位,全栈是个花哨的词,对于现在比较热门的技术,不论是 Vue 还是 Laravel,只要智商不差,看着文档,都能写出一个 CURD 来,但是这就叫全栈了吗?
4+
5+
比如 Vue 中的 MVVM,其中 VM 视图的原理是什么?Laravel 为什么要这么设计?
6+
7+
会用这种技术栈,其实只是学到的只是皮毛,可以会用,但是必须要有自己精通擅长的一面,一定要做到人无我有,人有我优。
8+
9+
---
10+
11+
### 面试题
12+
13+
1. 谈谈对 Web 语义化的理解
14+
15+
> 语义化的含义就是用正确的标签做正确的事情,语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析,利于 SEO,也有利于代码阅读、便于维护。
16+
17+
2. 简述 HTTP 协议的工作流程「重要」
18+
19+
> 1. 地址解析;
20+
> 在浏览器中输入 URL,浏览器会从中分解出协议名、主机名、端口、对象路径等部分
21+
> 2. 封装 HTTP 请求数据包
22+
> 3. 浏览器获取主机 IP 地址,建立 TCP 链接(TCP 的三次握手)
23+
> 4. TCP 链接建立后发送 HTTP 请求
24+
> 请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和可内容。
25+
> 5. 服务器接到请求后,给予相应的响应信息
26+
> 其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容
27+
> 6. 服务器断开 TCP 连接
28+
29+
3. 为什么使用 HTTPS?实现原理是什么?
30+
31+
> HTTPS(超文本传输安全协议)是一种通过计算机网络进行安全通信的传输协议,提供对网站服务器的身份认证,保护数据传输的完整性、安全性。
32+
>
33+
> 实现过程如下:
34+
> 1. 客户端通过 TCP 和服务器建立连接之后,第一次握手的时候请求证书,服务器向客户端返回证书
35+
> 2. 客户端在收到服务端证书后,确认证书是否有效,生成对称秘钥并使用服务器的公共秘钥进行加密,然后发送给服务器。
36+
> 3. 服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。
37+
38+
![image](http://www.ruanyifeng.com/blogimg/asset/201402/bg2014020502.png)
39+
40+
4. 写出一个使用 flex 布局,在 div 垂直居中的 css 代码
41+
42+
```
43+
div {
44+
display: flex;
45+
justify-content: center;
46+
align-items: center;
47+
}
48+
```
49+
50+
5. 为什么把 JavaScript 文件放在 Html 底部
51+
52+
> 1. 因为浏览器渲染 HTML 文件是从上往下渲染的,JavaScript 放在 Html 头部,会阻碍浏览器的渲染速度,增加用户的等待时间
53+
> 2. 浏览器加载 JavaScript 脚本之后会自动执行,如果放在头部,此时的 Dom 树还没有加载完,很容易出 Bug
54+
55+
6. 谈谈对 JavaScript 闭包的理解
56+
57+
> 闭包是 JavaScript 函数的一种,声明即运行,可以在函数内部调用外部变量。
58+
59+
7. 如何处理 Ajax 跨域问题
60+
61+
> 1. 代理
62+
> 2. JsonP
63+
> 3. iframe 等等……
64+
65+
前端的知识比较多,一些比较基础的问题,就不再整理了,比如给 Http 常见状态码,Html5 多了那些标签,CSS 如何清除浮动等等。
66+
67+
如果大家有兴趣,可以阅读这些前端的常见面试题和资料。
68+
69+
### 扩展阅读
70+
71+
- [收集的前端面试题和答案](https://github.com/qiu-deqing/FE-interview)
72+
- [前端开发面试题](https://github.com/markyun/My-blog/tree/master/Front-end-Developer-Questions/Questions-and-Answers)
73+
- [史上最全的web前端面试题汇总及答案1](https://www.jianshu.com/p/2f7eb1ad7174)
74+
- [前端工程师手册](https://leohxj.gitbooks.io/front-end-database/index.html)
75+
- [HTTP协议:工作原理](http://blog.csdn.net/anndy_/article/details/77198883)
76+
- [SSL/TLS协议运行机制的概述](http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html)

php-pian.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
PHP 篇收集了一些常见的基础、和进阶面试题,基础的面试题不再作答。
2+
3+
### 基础篇
4+
5+
- Get 和 POST 的区别
6+
- Cookie 和 Session 的区别和关系
7+
- 单引号和双引号的区别
8+
- isset 和 empty 的区别
9+
- echo、print_r、print、var_dump 之间的区别
10+
- 什么是 MVC?
11+
- 传值和传引用的区别?
12+
13+
### 进阶篇
14+
15+
- 简述 S.O.L.I.D 设计原则
16+
17+
18+
- | - | -
19+
---|--- | ---
20+
SRP | 单一职责原则 | 一个类有且只有一个更改的原因
21+
OCP | 开闭原则 | 能够不更改类而扩展类的行为
22+
LSP | 里氏替换原则 | 派生类可以替换基类使用
23+
ISP | 接口隔离原则 | 使用客户端特定的细粒度接口
24+
DIP | 依赖反转原则 | 依赖抽象而不是具体实现
25+
26+
- PHP7 和 PHP5 的区别,具体多了哪些新特性?
27+
28+
> 1. 性能提升了两倍
29+
> 2. 增加了结合比较运算符 (<=>)
30+
> 3. 增加了标量类型声明、返回类型声明
31+
> 4. `try...catch` 增加多条件判断,更多 Error 错误可以进行异常处理
32+
> 5. 增加了匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义
33+
34+
- 为什么 PHP7 比 PHP5 性能提升了?
35+
36+
> 1. 变量存储字节减小,减少内存占用,提升变量操作速度
37+
> 2. 改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
38+
> 3. 改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
39+
40+
- 简述一下 PHP 垃圾回收机制(GC)
41+
42+
> PHP 5.3 版本之前都是采用引用计数的方式管理内存,PHP 所有的变量存在一个叫 `zval` 的变量容器中,当变量被引用的时候,引用计数会+1,变量引用计数变为0时,PHP 将在内存中销毁这个变量。
43+
>
44+
> 但是引用计数中的循环引用,引用计数不会消减为 0,就会导致内存泄露。
45+
>
46+
> 在 5.3 版本之后,做了这些优化:
47+
>
48+
> 1. 并不是每次引用计数减少时都进入回收周期,只有根缓冲区满额后在开始垃圾回收;
49+
> 2. 可以解决循环引用问题;
50+
> 3. 可以总将内存泄露保持在一个阈值以下。
51+
52+
了解更多可以查看 PHP 手册,[垃圾回收机制](http://docs.php.net/manual/zh/features.gc.performance-considerations.php)
53+
54+
- 如何解决 PHP 内存溢出问题
55+
56+
> 1. 增大 PHP 脚本的内存分配
57+
> 2. 变量引用之后及时销毁
58+
> 3. 将数据分批处理
59+
60+
- Redis、Memecached 这两者有什么区别?
61+
62+
> 1. Redis 支持更加丰富的数据存储类型,String、Hash、List、Set 和 Sorted Set。Memcached 仅支持简单的 key-value 结构。
63+
> 2. Memcached key-value存储比 Redis 采用 hash 结构来做 key-value 存储的内存利用率更高。
64+
> 3. Redis 提供了事务的功能,可以保证一系列命令的原子性
65+
> 4. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中
66+
> 5. Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。
67+
68+
- Redis 如何实现持久化?
69+
70+
> 1. RDB 持久化,将 Redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态。
71+
> 2. AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写状态来记录数据库的。相当于备份数据库接收到的命令,所有被写入 AOF 的命令都是以 Redis 的协议格式来保存的。

0 commit comments

Comments
 (0)