操作系统

解释堆和栈的区别。

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

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

线程与进程的区别

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

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

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
  • 如何处理死锁问题:
    • 忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
    • 检测死锁并且恢复。
    • 仔细地对资源进行动态分配,以避免死锁。
    • 通过破除死锁四个必要条件之一,来防止死锁产生。

网络

网络协议_百度百科

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

TCP/IP

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

UDP/IP

socket

  • socket(计算机专业术语)_百度百科

    • https://baike.baidu.com/item/socket/281150?fr=aladdin

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

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

数学

估算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[1] is a debugger for finding software memory problems such as memory leaks and buffer overflows. These are due to bugs related to the allocation and deallocation of dynamic memory. Programs written in languages that have garbage collection, such as managed code, might also need memory debuggers, e.g. for memory leaks due to "living" references in collections.
  • 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,[1] FTP,[2] LDAP,[3] Webservices,[4] JMS,[5] HTTP,[6] generic TCP connections and OS native processes.[citation needed] One can also configure JMeter as a monitor,[7] although this is typically considered[by whom?]ad hoc rather than advanced monitoring. It can be used for some functional testing as well.[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

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


算法

Book Review: Coding Interview Questions by Narasimha Karumanchi

  • https://mp.weixin.qq.com/s/CbC7lpK1bgXNTYDSZjRUUQ
  • https://whatpixel.com/coding-interview-questions-book-review/

程序员面试备考锦囊 - 程序员必修课

  • https://mp.weixin.qq.com/s/RKd6YkYwwQ-IL--L0GJnIw

几道 BAT 算法面试中经常问的「字符串」问题

  • https://mp.weixin.qq.com/s/M8U9B7UA2AdfnJi5EpTv-g

面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)的更多相关文章

  1. C#(Net)软件开发常用工具汇总,提高你的开发效率

    C#(Net)软件开发常用工具汇总,提高你的开发效率 写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用技术文章. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是 ...

  2. 搞清楚 硬件环境 os环境 网络环境 搞清楚测试工具 测试步骤 自己搭测试环境 自测

    1,遇事的第一反应要从变化情绪转变为做出判断.判断什么?判断这一件事对自己是否重要,是否关乎我的个人利益,是否影响我的人际关系等等等等.如果答案都是否,那就没必要着急忙慌了.如果答案是是 冷静,其实是 ...

  3. python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)

    1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...

  4. 华为软件开发云对比Jenkins-JavaWeb项目持续部署方式

    一.前言:Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成和持续部署变成可能. 本文 ...

  5. 读《31天学会CRM项目开发》记录1 - 认识软件开发

    今天闲来无事,心中又对软件开发充满了向往和憧憬.一直认为实践是检验真知的唯一标准,也是快速提升的绝密方法,是巩固基础加深基础的好去处.故在JD上搜了下软件开发,看到了这本<31天学会CRM项目开 ...

  6. java 软件开发面试宝典

    一. Java 基础部分........................................................................................ ...

  7. 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..

    大家好,我是柠檬. 柠檬哥作为一个普通大学.非计算机专业,自学后端技术进入腾讯做后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听柠檬哥转行之路经历的吗,可以留言告诉我,人多就写写),体 ...

  8. 六款主流免费网络嗅探软件wireshark,tcpdump,dsniff,Ettercap,NetStumbler

    1.WireShark WireShark是一个开源免费的高性能网络协议分析软件,它的前身就是非常著名的网络分析软 件Ethereal.你可以使用它来解决网络疑难问题,进行网络协议分析,以及作为软件或 ...

  9. 杂项-数学软件:Mathematica

    ylbtech-杂项-数学软件:Mathematica Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相 ...

随机推荐

  1. Mininet实验 设置带宽之简单性能测试

    原文:设置带宽之简单性能测试 这个实验主要还是说明通过python程序来设定Mininet中的链路带宽. 目的: Python脚本实现自定义拓扑 设置链路的带宽.延迟及丢包率 iperf测试主机间的带 ...

  2. HDU 2732 Leapin' Lizards(最大流)

    http://acm.hdu.edu.cn/showproblem.php?pid=2732 题意: 给出n行的网格,还有若干只蜥蜴,每只蜥蜴一开始就在一个格子之中,并且给出蜥蜴每次的最大跳跃长度d. ...

  3. Vue 组件设计

    Vue 组件设计 Vue 作为 MVVM 框架一员,不管是写业务还是基础服务,都少不了书写组件.本文总结一下书写业务组件的一些心得. 为什么要写组件? 我们知道,只要是组件,就需要在引用的时候与 vi ...

  4. Android之微信开放平台实现分享(分享好友和朋友圈)

    开发中分享操作往往经常遇到,而且还是一些比较大型一定的平台,如微信,QQ,微博等.写这篇博客主要是把微信的的分享和相关操作表达一下,分享可以包含:文字,视频,音乐,图片等分享. 分享可以有 分享给好友 ...

  5. POJ 2411 状压DP经典

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16771   Accepted: 968 ...

  6. HDU1166 敌兵布阵_线段树

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. ARIMA模型——本质上是error和t-?时刻数据差分的线性模型!!!如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理!ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

    https://www.cnblogs.com/bradleon/p/6827109.html 文章里写得非常好,需详细看.尤其是arima的举例! 可以看到:ARIMA本质上是error和t-?时刻 ...

  8. PHP与Java集成开发详解(一)

    很久以前,有人从www上看到看到天空上一个很亮的亮点,它就是Java语言,与此同时,在另一个地方一位梦想家也看到了一个亮点,它就是PHP. 时间一天天过去,这两个亮点也变得越来越亮,很快,它们受到了编 ...

  9. 蓝桥杯练习系统历届试题 带分数 dfs

    问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...

  10. C语言----------链表的简单实现与操作

    链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成. 每个结点包括两个部 ...