Go-Interview-QA icon indicating copy to clipboard operation
Go-Interview-QA copied to clipboard

Go语言面试问答

Go语言面试问答

PHP-Interview-QA 项目启发!

结合实际Go面试,汇总自己遇到的问题,以及网上其他人遇到的问题,尝试提供简洁准确的答案

包含网络、数据结构与算法、Go、Web、MySQL、Redis、Linux、安全、设计模式、架构、面试等部分

面试流程

面试流程

问题列表

网络篇

  • 计算机网络体系结构
  • UDP 的主要特点
  • TCP 的主要特点
  • 简述三报文握手建立 TCP 连接
  • 建立 TCP 连接为什么最后还要发送确认
  • 简述 TCP 连接的释放
  • TIME-WAIT 是什么,为什么必须等待 2MLS
  • TCP 粘包问题
  • UDP、TCP 区别,适用场景
  • 建立 socket 需要哪些步骤
  • DNS 主要作用是什么
  • HTTP 报文组成
  • HTTP 状态码
  • 常见的 HTTP 方法
  • GET 与 POST 请求方式区别
  • HTTP 优缺点
  • HTTPS 通信原理
  • HTTP 2.0
  • WebSocket
  • IPv6 与 IPv4 有什么变化
  • 什么是心跳机制
  • 什么是长连接

数据结构与算法篇

  • 衡量、比较算法优劣的指标
  • 链表有哪些
  • 线性结构
  • 散列查找
  • 排序
  • 其他

Go 篇

Web 篇

  • SEO 有哪些需要注意的
  • img 标签的 title 和 alt 有什么区别
  • CSS 选择器的分类
  • CSS sprite 是什么,有什么优缺点
  • display: none 与 visibility: hidden 的区别
  • display: block 和 display: inline 的区别
  • CSS 文件、style 标签、行内 style 属性优先级
  • link 与 @import 的区别
  • 盒子模型
  • 容器包含若干浮动元素时如何清理(包含)浮动
  • 如何水平居中一个元素
  • 如何竖直居中一个元素
  • flex 与 CSS 盒子模型有什么区别
  • Position 属性
  • PNG,GIF,JPG 的区别及如何选
  • 为什么把 JavaScript 文件放在 Html 底部
  • JavaScript 数据类型
  • JavaScript 操作 DOM 的方法有哪些
  • JavaScript 字符串方法有哪些
  • JavaScript 字符串截取方法有哪些?有什么区别
  • setTimeout 和 setInterval 的区别
  • 使用 new 操作符实例化一个对象的具体步骤
  • 如何实现 ajax 请求
  • 同源策略是什么
  • 如何解决跨域问题
  • 引起内存泄漏的操作有哪些
  • 闭包理解及应用
  • 对 JavaScript 原型的理解
  • 对 JavaScript 模块化的理解
  • 如何判断网页中图片加载成功或者失败
  • 如何实现懒加载
  • JSONP 原理
  • Cookie 读写
  • 从浏览器地址栏输入 URL 到显示页面的步骤
  • Vue.js 双向绑定原理
  • 如何进行网站性能优化
  • 渐进增强

MySQL 篇

  • 体系结构
  • 基础操作
  • 数据库设计范式
  • 数据库设计原则
  • CHAR 和 VARCHAR 数据类型区别
  • LEFT JOIN 、RIGHT JOIN、INNER JOIN
  • UNION、UNION ALL
  • 常用 MySQL 函数
  • 事务
  • 常见存储引擎
  • 常见索引
  • 聚族索引与非聚族索引的区别
  • BTree 与 BTree-/BTree+ 索引原理
  • 分表数量级
  • EXPLAIN 输出格式
  • my.cnf 配置
  • 慢查询

Redis 篇

  • Redis 介绍
  • Redis 特点
  • Redis 支持哪些数据结构
  • Redis 与 Memcache 区别
  • 发布订阅
  • 持久化策略
  • Redis 事务
  • 如何实现分布式锁
  • Redis 过期策略及内存淘汰机制
  • 为什么 Redis 是单线程的
  • 如何利用 CPU 多核心
  • 集合命令的实现方法
  • 有序集合命令的实现方法
  • redis.conf 配置
  • 慢查询

Linux 篇

  • Linux 目录结构
  • Linux 基础
  • 命令与文件查找
  • 数据流重定向
  • sed
  • awk
  • 计划任务
  • Vim
  • 负载查看
  • Linux 内存管理
  • 进程、线程、协程区别
  • 进程间通信与信号机制

安全篇

  • 跨站脚本攻击(XSS)
  • 跨站点请求伪造(CSRF)
  • SQL 注入
  • 应用层拒绝服务攻击
  • PHP 安全
  • 伪随机数和真随机数

设计模式篇

  • 什么是设计模式
  • 如何理解框架
  • 主要设计模式
  • 怎样选择设计模式
  • 单例模式
  • 抽象工厂模式
  • 工厂方法模式
  • 适配器模式
  • 观察者模式
  • 策略模式
  • OOP 思想
  • 抽象类和接口
  • 控制反转
  • 依赖注入

架构篇

  • OAuth 2.0
  • 单点登录
  • REST
  • API 版本兼容
  • JWT
  • 画出 PHP 业务架构图
  • LVS
  • Ngnix
  • 服务化
  • 微服务
  • 服务注册发现
  • 数据库读写分离
  • 数据库拆分
  • 分布式事务
  • ID 生成器
  • 一致性哈希
  • Redis 集群
  • 消息队列
  • 穿透、雪崩
  • 限流(木桶、令牌桶)
  • 服务降级
  • 语言对比

为何要写这个

从事软件开发,已经接近五个年头了,去年面试中,发现自己依然处于尴尬的位置。简单重复,缺乏挑战的工作,已经没有多大吸引力了,优秀的平台,面试缺屡次碰壁。人上年纪之后,思维敏感度、记忆力都明显有所下滑。

程序开发不要被限制在语言层面,这是大家都懂的道理。但是作为一个 PHP 开发者,很多时候都是缠绕在业务的沟壑,理想和现实总是相差甚大。去年由于部门重组,本来将近十余人负责的项目,之后只剩两三人负责,各种坑只能靠人肉解决,深感无力。

工作可能只是你的一部分,你必须有自己的能力定位。以前总觉得学什么,做什么都无所谓,需要学习的技术,花点时间快速学习就行,有新的技术出来,赶紧紧跟了解下。但这些年下来,发现自己却没有一样能够拿的出手的,甚至连一个像样的作品也没有。其实 PHP 的技术栈还是比较广的,在对整个技术栈有一定的掌握之后,可能还需要深挖几个自己喜欢的领域,否则在现今的就业市场里面,没有任何的竞争力。所以可以看到很多招聘者都在感慨,中高级工程师都去哪里了。

面试或者面试他人,无法逃避,那就选择面对。撰写《PHP 面试问答》,构建一个面试体系,而不必慌张的临时准备,时时刻刻都充分准备好,对自己负责,也对别人负责。

结合实际 PHP 面试,系统的汇总面试中的各种各样的问题,尝试提供简洁准确的答案。如果你在 PHP 面试中遇到问题,欢迎提 Issues 交流。包含网络、数据结构与算法、Go、Web、MySQL、Redis、Linux、安全、设计模式、架构、自我介绍、离职原因、职业规划、准备问题等部分。

最后,祝愿大家在日后的求职中,都能拿到满意的 offer~~

参考

术语对照表:顾名思义,帮助联想知识点

参考资料:站在巨人的肩膀上,你将能看的更远

声明

本资料仅供参考,水平有限,难免存在纰漏错误之处

欢迎转载,转载请标明来源出处,谢谢~~

作者:凌枫 Email:[email protected]

链接:https://github.com/colinlet/PHP-Interview-QA