面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计) 操作系统 网络  数学  软件开发 测试  工具 系统设计

面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计)
操作系统
网络 
数学 
软件开发
测试 
工具
系统设计

解释堆和栈的区别。

分配在堆的内存与分配在堆栈的内存有什么不同

  • 分配在堆的内存要手动去释放

线程与进程的区别

多线程中栈与堆是公有的还是私有的

  • 在多线程环境下,每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。
  • 其他的资源(比如堆、地址空间、全局变量)是由同一个进程内的多个线程共享

mutex

  • mutex - C++ Reference
    • http://www.cplusplus.com/reference/mutex/mutex/?kw=mutex

condition variable

  • condition_variable - C++ Reference
    • http://www.cplusplus.com/reference/condition_variable/condition_variable/

semophore

deadlock

  • 在引入锁的同时,我们遇到了一个新的问题:死锁(Deadlock)。死锁是指两个或多个线程/进程之间相互阻塞,以至于任何一个都不能继续运行,因此也不能解锁其他线程/进程。例如,线程A占有lock A,并且尝试获取lock B;而线程2占有lock B,尝试获取lock A。此时,两者相互阻塞,都无法继续运行。
  • 总结产生死锁的四个条件(只有当四个条件同时满足时才会产生死锁):
    • Mutual Exclusion – Only one process may use a resource at a time
    • Hold-and-Wait – Process holds resource while waiting for another
    • No Preemption – Can’t take a resource away from a process
    • Circular Wait – The waiting processes form a cycle
  • 如何处理死锁问题:
    • 忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
    • 检测死锁并且恢复。
    • 仔细地对资源进行动态分配,以避免死锁。
    • 通过破除死锁四个必要条件之一,来防止死锁产生。

记一次面试:进程之间究竟有哪些通信方式?

4 个场景详解大厂面试中的死锁问题


网络 

网络协议_百度百科

  • https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/328636?fr=aladdin

网络协议常见面试题集锦

TCP/IP

是否了解应用层通信,通信协议HTTP

你一定要知道,关于https的五大误区

UDP/IP

socket

  • socket(计算机专业术语)_百度百科
    • https://baike.baidu.com/item/socket/281150?fr=aladdin

TCP/IP、Http、Socket的区别_百度经验

  • http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html

面试环节:在浏览器输入 URL 回车之后发生了什么?

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?

面试官问我:三次握手与四次挥手是怎么完成的?

面试 | 你真的了解 HTTP 头部么?

Cookie、Session、Token那点事儿

一文彻底搞懂cookie和session


数学 

估算2^24

  • 2^10 = 1024 ~ 10^3
  • 2^24 ~ 2^4 * 10^3 * 10^3 ~ 16 * 10^6

移动1位数字使等式成立3013=10

  • 0^3013=1

估算悉尼有多少辆Taxi


软件开发

C# v.s. C++

Scripting language v.s. Compiling language

动态/静态链接库区别

  • 动态链接库:在运行时加载
  • 静态链接库:在编译时直接联到可执行文件中
  • 动态链接库和静态链接库的区别
    • http://blog.csdn.net/gamecreating/article/details/5504152
    • http://blog.sina.com.cn/s/blog_61ba4898010153zu.html

敏捷软件开发 - *,*的百科全书

Scrum

Test-driven development (TDD)

  • 测试驱动开发 - *,*的百科全书
    • https://zh.wikipedia.org/wiki/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91
    • 测试驱动开发英语:Test-driven development,缩写为TDD)是一种软件开发过程中的应用方法,由极限编程中倡导,以其倡导先写测试程序,然后编码实现其功能得名。测试驱动开发始于20世纪90年代。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
    • 测试驱动开发是戴两顶帽子思考的开发方式:先戴上实现功能的帽子,在测试的辅助下,快速实现其功能;再戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。测试驱动着整个开发过程:首先,驱动代码的设计和功能的实现;其后,驱动代码的再设计和重构。

Behavior-driven development(BDD)

BDD是第二代的、由外及内的、基于拉(pull)的、多方利益相关者的(stakeholder)、多种可扩展的、高自动化的敏捷方法。它描述了一个交互循环,可以具有带有良好定义的输出(即工作中交付的结果):已测试过的软件。

    • BDD的重点是通过与利益相关者的讨论取得对预期的软件行为的清醒认识。它通过用自然语言书写非程序员可读的测试用例扩展了测试驱动开发方法。行为驱动开发人员使用混合了领域中统一的语言的母语语言来描述他们的代码的目的。这让开发者得以把精力集中在代码应该怎么写,而不是技术细节上,而且也最大程度的减少了将代码编写者的技术语言与商业客户、用户、利益相关者、项目管理者等的领域语言之间来回翻译的代价。

Continuous integration(CI)

  • Continuous integration - Wikipedia
    • https://en.wikipedia.org/wiki/Continuous_integration
  • 持续集成 - *,*的百科全书
  • 持续集成_百度百科
    • https://baike.baidu.com/item/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90
    • 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

Continuous delivery / Continuous deployment(CD)

DevOps(Development和Operations的组合词)

  • DevOps - *,*的百科全书
    • https://zh.wikipedia.org/wiki/DevOps
    • DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

系统发展生命周期(SDLC)

软件即服务(Software as a Service,i.e. SaaS)

奇异递归模板模式(curiously recurring template pattern,CRTP)

MEAN Stack

  • MongoDB, Angularjs, Nodejs, React, Golang

LAMP Stack

  • Linux, Apache, MySQL, PHP/Python, Javascript, Angularjs

Full Stack Java

  • Java, J2EE, Spring MVC Framework, Bootstrap, Javascript, Angularjs

测试 

如何测试一个水杯,记得考虑异常测试

常用的测试工具,测试方法 

程序crash如何定位检测

内存泄露定位 / 监测/防止

  • 内存泄漏_百度百科
    • https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F/6181425?fr=aladdin
  • 内存泄漏以及常见的解决方法 - na_he的专栏 - CSDN博客
    • http://blog.csdn.net/na_he/article/details/7429171
  • C/C++内存泄漏及检测 - 吴秦 - 博客园
    • http://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html
  • Memory debugger - Wikipedia
    • https://en.wikipedia.org/wiki/Memory_debugger
    • A memory debugger also known as a runtime debugger
  • Valgrind - Wikipedia

GDB

  • gdb_百度百科
    • http://baike.baidu.com/link?url=qzDVNAB5igtON9p7hw4Ybwu5hELcvElenqb9X-hINKukyB-6lG0Al-VJ2Vxjm7PwFBJmiZVwZCYJ2V-alB_WLa

工具

Confluence

Cucumber

git

JIRA

JMeter

  • Apache JMeter - Wikipedia
    • https://en.wikipedia.org/wiki/Apache_JMeter
    • Apache JMeter is an Apacheproject that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications.
    • JMeter can be used as a unit-test tool for JDBC database connections,[8]
    • JMeter supports variable parameterization, assertions (response validation), per-thread cookies, configuration variables and a variety of reports.
    • JMeter architecture is based on plugins. Most of its "out of the box" features are implemented with plugins. Off-site developers can easily extend JMeter with custom plugins.
  • Jmeter_百度百科
    • https://baike.baidu.com/item/Jmeter
    • Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
    • Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

LoadUI

OpenGL

Selenium

SoapUI

Swing

  • Swing (Java) - *,*的百科全书
    • https://zh.wikipedia.org/wiki/Swing_(Java)
    • Swing是一个为Java设计的GUI工具包。Swing是Java基础类的一部分。Swing包括了图形用户界面(GUI)组件如:文本框,文本域,按钮,分隔窗格和表。
    • Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用Java支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

程序员必备的工具软件有哪些?


系统设计

个人吐血整理的系统设计资料大全 - 九章算法

  • https://mp.weixin.qq.com/s/4kv57_rBVWemkh5t33WGMw 

设计模式

  • 设计模式(即使代码编制真正工程化)_百度百科
    • http://baike.baidu.com/link?url=QoxZgqaX0LcWjUC9bYsOC8jLwWf3HpljeCuDoqxL4MYIWnWqzdtWlIhyVhe6npPk8zL-pcoQP5oq4HImZKspt9Da3R7d3cEkrsVgwqVmAKu

单体如何避免多个instance?

  • 构造时指向一块内存保证惟一性。static

如何设计爬虫系统 | 系统设计高频题解题思路分析

系统设计资料大全

面试官绝杀:系统是如何支撑高并发的?

每秒千万级实时数据处理系统是如何设计的?

面试官:说说 Spring Cloud 的底层架构原理吧