计算机与软件工程-研究生复试-专业面试题型举例

本人笔记本里这是十五个独立的文章,汇聚在一起,可能模块不是很清楚,这里可以自行对应一下

  • 开放思维题

  • Java原理

  • 操作系统

  • 个人经历

  • 行业前沿

  • 基本问题

  • 计算机网络

  • 计算机组成原理

  • 软件工程

  • 数据结构

  • 数据库

  • 智力题

  • 数学题(或者你本科学过的某些课程)


请你设计个unix文件系统

一个文件系统的结构包括引导块(boot block)、超级块(super block)、索引节点表(inode list)以及数据块(data blocks)(如下图所示)。

引导块:在文件系统的开头,典型地一般为一个扇区。如果操作系统装在该文件系统中,则该块包含了引导或初启操作系统的引导代码。如果没该文件系统没安装操作系统,则这个块的内容可能是空的。

超级块:相当于是保存了文件系统的元数据信息,描述文件系统的状态,比如它有多大,何处有空闲空间以及其他一些信息等等。(可通过 $ tune2fs -l 文件系统来查看文件系统的超级块的内容,需要root权限)

索引节点表:相当于是索引节点的一个数组,内核所引用的索引节点号即是索引节点在该数组中的下标大小。类似于文件的元数据信息。每个文件都有一个索引节点,但是一个索引节点可以对应几个文件名字,每个名字被称为一个链接(link)。内核实现文件名到索引节点的解析。

数据块:真正存放数据的地方。目录(PS:也是一个文件)在数据块中保存的数据是一系列的索引节点 <-> 文件名的 item。


图书馆有一本书,m个人要去借这本书,但是这本书只能被一个人借阅,则对于某个人,他去图书馆的次数与他借到该书的概率是成正比的,设计一个算法,是人们跑的次数和借到的概率之间实现一个平衡,即不能让某个人跑的次数太多,也不能让他借到该书的概率太小。

参考操作系统里的多级反馈队列(Multilevel feedback queue)。随着跑腿的次数提高优先级,同一优先级里的人有相同的概率借到这本书


一个数组中,只有一个数字出现了一次,其他都出现了两次,找出这个出现一次的数字?

一个N+1长度的数组中,存放的都是1到N的数字,只有一个数字重复,找出重复的数字?

异或


异常是怎么产生的

  • 用户输入了非法数据。

  • 要打开的文件不存在。

  • 网络通信时连接中断

  • 或者JVM内存溢出memory overflow。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。


C++和java的区别

1.解释对编译:Java是一种解释性语言,意味着其在执行时会被“翻译”为二进制形式,也就是java跑得时候必须有人(jvm)去解释它(现在的Java语言,其执行方式已经不仅仅是解释执行方式了,即时编译器(JITC、just-in-time compiler)技术和原型编译技术的出现大大提高了JAVA的运行效率)。而C++则是编译语言,意味着程序只能在特定操作系统上编译并在特定系统上运行,也就是说C++一步到位成机器语言的。

Compiled language and interpreted language

C Primer Plus

Primer[ˈpraɪmə(r)]

2、内存安全:Java是一种内存安全型语言,意味着大家可以为给定数组分配任意参数,即使超出范围也只会返回错误提示。C++更为灵活,但代价是一旦分配的参数超出资源范围,则会引起错误甚至严重崩溃。

Memory security

3、性能:Java人气极高,但其代码由于需要在运行前进行解释因此性能表现更差。C++会被编译为二进制形式,因此其能够立即运行且速度更快。如果你写一个c++的程序和做同样事情的java程序,可能你感觉两者速度差不多。但如果这两个程序都足够大、而且c++的代码经过过优化,两者的速度差就会变得很显著甚至很惊人,C++会比java快很多。

performance

4、指针:指针是一种C++结构,允许您直接在内存空间中进行值管理。Java不支持指针,因此您可能使用值引用的方式进行值传递。

pointer

5、重载:重载是指对某种方法或者运算符的功能进行“重新定义”。Java允许方法重载,而C++则允许进行运算符重载。

overload

6.java侧重于大型企业级应用开发,C++侧重于底层应用开发。Java是Android开发领域的王者,因此移动开发者无疑应该选择它作为项目基础。另外,Java也常见于Web及桌面应用乃至服务器端应用。

C++更接近机器语言,因此其软件运行速度更快且能够直接与计算机内存、磁盘、CPU或者其它设备进行协作。另外,C++也能为游戏提供良好的运行性能。 

java face to enterprise development

7.Java是纯面向对象的语言,所有代码(包括函数、变量)都必须在类中定义。而C++中还有面向过程的东西,比如是全局变量和全局函数

8.C++支持多继承,Java中类都是单继承的

multiple inheritance

single inheritance

inheritance

[ɪnˈherɪtəns]


C#和java的区别

  • c#设计者更注重一线开发人员的感受,java设计者则不同,他们的关注点在于java应用系统本身,更好的降低耦合,保持OOP是其始终坚持的。

  • 没有JDK文档的情况下,我没法写Java,但是没有MSDN的情况下,我照样写.Net的程序。

    • 你要在代码中获取系统当前时间。你会去哪里找?至少我的第一想法是去Date类、Time类或者DateTime类里找。我在Java里找了好久,最后发现在Calendar类里。。。

    • 在C#下,你直接去DateTime类里,就能找到。DateTime类里有个属性叫Now。而且C#的DateTime类,可以很方便的获取小时、分钟什么的。

    • 微软专门请过1000个程序员,给他们n小时,写一个读写文件的程序。结束之后,经过微软统计发现,这1000人里大部分人首先想到去找File这个类。于是微软就在它的C#里,把File做成了个静态类,专门提供各种用于读写文件的方法。

  • 委托(Delegate)

    • 委托用于将方法作为参数传递给其他方法

    • 虽然Java可以依靠接口,匿名内部类这些特性实现委托一样的功能,但却要麻烦许多,如果涉及到N个委托实例相加的情况,那么一个C#里面简单的"+"号,在Java里就只能用FilterChain,InterceptorStack这种概念了。

  • 泛型(Generics)[dʒɪˈnɛrɪks]

  • 特性(Attribute):unsafe

  • IDE

  • 参数传递(parameter) ref out

  • LINQ


java构造(construction)方法跟析构Deconstruction

构造方法:

public class Rectangle {

public Rectangle(int w, int h) {

width = w;

height = h;

}

public Rectangle() {}

}

当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数


static的用法

static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途

在 JVM 加载一个类的时候,若该类存在 static 修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域,有了这些“固定”的特性,那么 JVM 就可以非常方便地访问他们。

它在内存中仅有一个,且 JVM 也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。


Error和Exception的区别

Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。

Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。


C# MVC

模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。

视图(View)能够实现数据有目的的显示

控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。

优点:

同一个 Model 可以被不同的 View 重用,所以大大提高了代码的可重用性。

Controller 是自包含(self-contained,指高独立内聚)的对象,与 Model 和 View 保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。


类和对象的区别

类是对象的抽象,对象是类的具体实例。

class is the abstract of object, object is the specific instance of class

类是抽象的,不占用内存,而对象是具体的,占有内存空间。

class is abstract, object is concrete thing

例如:类就是水果,对象就是苹果


Java多态体现在哪里

  • 接口

  • 重载和重写

抽象类,接口,父类定义子类

abstract class, interface, parent class defince the children class

方法重载和重写

同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!


重载

同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

the functions with same names have different parameter list


循环与递归一定可以相互转化么

理论上是的

但实际上栈底不可预见的时候,递归是无法有效地化为循环的。


强类型与弱类型、动态类型与静态类型的区别

强类型:偏向于不容忍隐式类型转换。譬如说haskell的int就不能变成double

弱类型:偏向于容忍隐式类型转换。譬如说C语言的int可以变成double

strongly typed, don't tolerate the implicit type exchange

weakly-typed tolerate the implicit type exchange

静态类型:编译的时候就知道每一个变量的类型,因为类型错误而不能做的事情是语法错误。

动态类型:编译的时候不知道每一个变量的类型,因为类型错误而不能做的事情是运行时错误

static type, know every variable[ˈveəriəbl] type when it compile

dynamic type, don't know every variable[ˈveəriəbl] type when it compile


编译器与解释器

C++,直接编译成可以执行的程序再跑

compile to a program that can be running directly

解释程序是运行一条解释一条

when it run to this code then explian one


继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

鸟,狗,猫,都是动物


泛型genericity:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型


如何实现一个操作系统

其实就是操作系统实现了什么,操作系统的目录的6个章节背下来


操作系统

操作系统的作用:(接口与服务,进程调度,虚拟机,管理资源)

用户接口与公共服务:改善人机界面,提供各种服务

进程执行的控制者和协调者:控制程序运行,组织工作流程

扩展机与虚拟机

资源的管理者和控制者:管理系统资源

the role of OS(interface and services, process management, virtual machine, resource management


分布式系统能够“握手”,机制和协议

三个机制:

单一全局性的进程通信机制

process communication

单一全局性的进程管理和安全保护机制

process management and security protection

同步机制

总线锁

两段锁

单一全局性的资源管理机制

resource management

多处理器调度设计要点

静态分配与动态分配

static distribution and dynamic distribution

主从式结构与分布式结构

Master-slave structure and distributed architecture

算法《操作系统》P427

负载共享调度算法:一个处理器空闲就选择一个就绪线程占有处理器运行

load balancing

群调度算法:把同一个进程的多个相关线程同时调度到一组处理器上运行

Group scheduling algorithm

处理器专派调度算法

Processor-specific algorithm

动态调度算法

Dynamic scheduling algorithm


PV 操作

PV 操作与信号量的处理相关,P 表示获取的意思,V 表示释放的意思。PV 信号量机制可以用来解决进程的同步与互斥的问题。一般来说,信号量 S>=0 时,S 表示可用资源的数量。执行一次 P 操作意味着请求分配一个单位资源,因此 S 的值减 1;当 S<0 时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个 V 操作意味着释放一个单位资源,因此 S 的值加 1;若 S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。


透明

告诉我干啥就行,这个事你别管我咋做到的


面包店算法

该算法的基本思想源于顾客在面包店中购买面包时的排队原理. 顾客在进入面包店前, 首先抓一个号, 然后按照号码由小到大的次序依次进入面包店购买面包. 

这里, 面包店发放的号码是由小到大的, 但是两个或两个以上的顾客却有可能得到相同的号码(使所抓号码不同需要互斥), 如果多个顾客抓到相同的号码, 则规定按照顾客名字的字典次序进行排序, 这里假定顾客是没有重名的.

 在计算机系统中, 顾客就相当于进程, 每个进程有一个唯一的标识,我们用 P 的下面加一个下标来表示. 例如: 对于 Pi 和 Pj, 如果有 i<j, 则先为 Pi 服务, 即 Pi先进入临界区


内存泄露

由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。


进程和线程的区别,然后提到了一个切换的时候的栈的问题

进程是系统进行资源分配和调度的一个独立单位。程序在系统内的执行是停停走走的,并不是连续的,使用进程来描述一个程序在一个时间段内在某个数据集上的一种行为。

线程:轻量级进程。线程是进程中能够并发执行的实体,是进程的组成部分,也是处理器调度和分派的基本单位。

线程状态:运行,就绪,等待,终止

没有挂起:线程不是资源拥有单位。对换出内存的是其所属的进程

优点:

快速线程切换

通信易于实现

减少管理开销

并发程序提高

为什么引入线程:

开销:减少程序并发执行时所付出的时空开销

并发性:使得并发粒度更细,并发性更好

分离“独立分配资源”与“被调度分派执行”


操作系统里面的进程的“三态”“五态”“七态”是什么

**三态模型

七态模型


死锁:

***定义:一个进程集合内每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期僵持的现象

***死锁产生的原因:

进程推进顺序不当(Improper sequence of process advancement)

PV使用不妥(Improper use of PV operation)

资源分配不均(Uneven distribution of resources)

资源使用不加限制(Unrestricted use of resources)

***死锁的条件:

互斥(mutually exclusive)

占有和等待(Possession and waiting)

不剥夺(non-deprivation)

循环等待(wait in a loop)

***解决方法:死锁防止,死锁避免,死锁检测和恢复

死锁预防:(Deadlock prevention)

静态分配(static distribution)——破坏条件占有和等待

按序分配,层次分配(Sequential distribution, hierarchical distribution)——破坏循环等待

死锁避免(deadlock avoidance)

银行家算法——循环等待(Banker's Algorithm - Loop Waiting)

死锁检测和恢复(Deadlock detection and recovery)

资源剥夺(Deprivation of resources)

进程回退(process regression)

进程撤销(Revocation process)

系统重启(system reboot)


“目态”和“管态”

特权指令(privileged order):仅在内核态下才能使用的指令

非特权指令(non-privileged order):目态与管态皆可。应用程序只能使用非特权指令

内核态与用户态:Kernel[ˈkɜːnl] state and user state

内核态:全部机器指令允许运行

用户态转变为内核态的情况:

系统调用(system call)

中断(interruption)(如I/O操作完成)

异常事件


解释系统调用syscall和库函数的区别

系统调用:使用系统服务

作用:保证系统安全性,提供一致性接口

系统调用的分类:

1.进程管理(Process management)

2.文件管理(Document management)

3.设备管理(Equipment management)

4.存储管理(Storage Management)

5.进程通信(Process communication)

6.信息维护(Information maintenance):系统信息


文件管理

文件组织有(文件的逻辑结构):有结构的记录文件(Recorded documents)和无结构的流文件(streaming documents)

还可以分为:顺序文件,索引文件,索引顺序文件(Sequential[sɪˈkwenʃl] file, index file, index Sequential[sɪˈkwenʃl] file)

操作系统的文件管理(物理结构):

1. 顺序结构:一种简单的物理结构,将一个逻辑文件存储在外存连续的物理块中

Sequential[sɪˈkwenʃl] structure: a simple physical structure that stores a logical file in a continuous physical block of external memory

2. 链接结构(link structure):将逻辑上连续的文件存放在外存不连续的区域上。通过链表的方式将同一个文件串成一个链表。

Store logically contiguous files on areas where the external memory is not contiguous. 

3. 索引结构:索引结构将一个逻辑文件的信息存放在外存的若干个物理块中,并为每个文件建立一个索引表,索引表中的每个表目存放文件信息所在的逻辑块号中和与之对应信息存放在的逻辑结构和与之对应的物理块号中,以索引结构存放的文件称为索引文件。

Index structure: the index structure stores the information of a logical file in several physical blocks in an external memory and creates an index table for each file

文件的存储空间管理:空闲表和空闲链表,还有位示图(bit diagram)


页表(page table)

页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。

A page-table is a special data structure that is placed in the page-table area of the system space and houses the correspondence between logical pages and physical page frames

每一个进程都拥有一个自己的页表,PCB 表中有指针指向页表

页表里面存放的是物理页号,有效位,脏位等


虚存,内存

虚存:外存当内存使用,对于用户而言,好像有着比实际内存更大的内存空间

Use the external memory as memory. To the user, it seems that there is more memory space than the actual memory.

使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上

It makes the application think it has continuously available memory

内存:内存(Memory)也被称为内存储器和主存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据

It temporarily stores computing data in the CPU.


个人经历部分

万年基本功-自我介绍

1分钟版的

2分钟版的

3分钟版的

毕业设计(Graduation project)

最喜欢的一门课程

做过的项目

项目中印象很深的事情

专业课的学习情况

为什么要考研

谈谈你的一个程序设计的感想


HTML5

HTML5指的是包括HTML、CSS和JavaScript在内的一套技术组合。

优点:

1、网络标准统一、HTML5本身是由W3C推荐出来的。

2、多设备、跨平台

3、即时更新。

4、提高可用性和改进用户的友好体验;

5、有几个新的标签,这将有助于开发人员定义重要的内容;

6、可以给站点带来更多的多媒体元素(视频和音频);

7、可以很好的替代Flash和Silverlight;

8、涉及到网站的抓取和索引的时候,对于SEO很友好;

9、被大量应用于移动应用程序和游戏。

缺点:(总结来讲就是目前客观环境对它的支持还不够,开发者,用户与各种浏览器)

a)安全:像之前Firefox4的web socket和透明代理的实现存在严重的安全问题,同时web storage、web socket 这样的功能很容易被黑客利用,来盗取用户的信息和资料。

b)完善性:许多特性各浏览器的支持程度也不一样。

c)技术门槛:HTML5简化开发者工作的同时代表了有许多新的属性和API需要开发者学习,像web worker、web socket、web storage 等新特性,后台甚至浏览器原理的知识,机遇的同时也是巨大的挑战

d)性能:某些平台上的引擎问题导致HTML5性能低下。

e)浏览器兼容性:最大缺点,IE9以下浏览器几乎全军覆没。


问一些大数据的知识,不让你说定义,问大数据的特征,举一个例子说明什么是大数据,具体是怎么实现的

注重个体,从整体的地方发现一些特定的规律,比如很著名的啤酒和尿布的故事

Focusing on the individual, Discover some specific laws.

网易云音乐的推荐功能。

NetEase Cloud Music's recommendation function

1.给音乐进行归类并建立评分规则

这是我们前面说到的给内容分类,是每个平台推荐前要做好的准备。简单说就是把音乐贴标签,把相同/相似标签的音乐归到一块,所以一首歌可能会被归到多个类别里,比如说同一个歌手的歌、同种曲风或者表达某一个情绪等等。

其次对用户听音乐行为建立评分规则有助于更好分析用户的喜好从而进行更精确的推荐,比如以下行为:

2.建立用户模型

制定评分规则后,就可以得到每个用户和该用户相关的每首歌的一个得分,那么根据这些数据就可以给用户建立相应的模型从而为其做精确推荐。

3.寻找相似的用户

常用的计算相似度评价值的体系有两种:欧几里得距离和皮尔逊相关度


云盘用过没?说说优缺点?

百度云盘。

Baidu Cloud 

优点:

多端同步,减少冗余

Consistency across platforms, can use it in mobilephone, ipad or PC

自己不用操心

It doesn't take much effort.

利于分享

Easy to share

缺点:

成本太贵

Cost is too high

受限于网速

Limited by network speed

有泄露风险

There is a risk of a leak.

受限于实际政策

Subject to actual policy

用户还不愿意付钱

Users aren't willing to pay yet.


专家系统是一个智能计算机程序系统,其内部含有大量的某个领域专家水平的知识与经验,能够利用人类专家的知识和解决问题的方法来处理该领域问题。

也就是说,专家系统是一个具有大量的专门知识与经验的程序系统,它应用人工智能技术和计算机技术,根据某领域一个或多个专家提供的知识和经验,进行推理和判断,模拟人类专家的决策过程,以便解决那些需要人类专家处理的复杂问题。

简而言之,专家系统是一种模拟人类专家解决领域问题的计算机程序系统。

Expert system, Contains a significant amount of expert-level knowledge and experience in a field

知识库用来存放专家提供的知识。专家系统的问题求解过程是通过知识库中的知识来模拟专家的思维方式的,因此,知识库是专家系统质量是否优越的关键所在,即知识库中知识的质量和数量决定着专家系统的质量水平。

Knowledge database used to house knowledge


图灵测试

Turing test

提出了一种测试机器是不是具备人类智能的方法

Proposed a way to test whether machines have human intelligence.

提出一假想:即一个人在不接触对方的情况下,通过一种特殊的方式,和对方进行一系列的问答,如果在相当长时间内,他

无法根据这些问题判断对方是人还是计算机,那么,就可以认为这个计算机具有同人相当的智力,即这台计算机是能思维的。这就是著名的“图灵测试”(Turing Testing)

One person without touching the other, take series of questions and answers with each other. If, for a considerable period of time, he is unable to tell whether the other person is a human being or a computer, then the computer can be considered to have the intelligence of a human being equivalent


服务器怎么利用最大化,盈利模式


google关于云申请了哪些专利

"是这样的张总,你在家里的电脑上按了CTRL-C,然后在公司的电脑上再按CTRL-V是肯定不行的……不不,多贵的电脑都不行。"

这个经典笑话终于要终结了,Google已经将其Cloudboard云剪贴板技术申请专利,未来大家可以在不同的电脑之间复制Gmail、Google Docs和其它Google服务里的内容,如果复制的内容是带有格式的一系列表格,那么复制到文本编辑器里,所有格式也会通过HTML表格保持一致。

Mr. Zhang, if you press CTRL-C on your home computer, and then press CTRL-V on your company computer, it will definitely not work.

云打印服务

Cloud Printing Services


解释一下平台无关性

就是在不同的系统上面都可以运行了

windows

linux

unix

java 程序都是跑在虚拟机上面的,sun 给不同的系统都作了虚拟机

Java 主要靠 Java 虚拟机(JVM)在目标码级实现平台无关性


网格和云计算是什么

网格(Grid),在信息学中,网格是一种用于集成或共享地理上分布的各种资源(包括计算机系统、存储系统、通信系统、文件、数据库、程序等),使之成为有机的整体,共同完成各种所需任务的机制。

云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。

The grid takes resources from different places and brings them together so that they appear to be one

现阶段所说的云服务(Cloud services)已经不单单是一种分布式计算(distributed computing),而是分布式计算(distributed computing)、效用计算、负载均衡(load balancing)、并行计算(parallel computing)、网络存储(network storage)、热备份冗杂和虚拟化(virtualization)等计算机技术混合演进并跃升的结果

Cloud services at this stage are no longer just a form of distributed computing, but are the result of the hybrid evolution and leap forward of distributed computing, utility computing, load balancing, parallel computing, network storage, hot backup redundancy and virtualization, among other computer technologies

特点

虚拟化技术(virtualization technology)

动态可扩展

灵活性高(High flexibility)

可靠性高(High reliability)

经济(save money)


微信与 QQ 的区别


ACM 的全称

ACM (Association for Computing Machinery ) 中文:国际计算机学会


图灵机的停机问题

判断任意一个程序是否能在有限的时间之内结束运行的问题

whether any one program can be terminated within a limited period of time


什么是透明计算

透明计算是一种用户无需感知计算机操作系统、中间件、应用程序和通信网络的具体所在;只需根据自己的需求,通过网络从所使用的各种终端设备(包括固定、移动、以及家庭中的各类终端设备)中选择并使用相应服务(例如计算、电话、电视、上网和娱乐等)的计算模式。

transparent calculation, Simply select and use the appropriate service according to your needs

强调两点:

跨平台cross-platform

云计算cloud computing


谈谈慕课对教育方式的影响


关于Google

全美乃至于全球大学生最希望进入的公司

The companies that college students across America and the world want to get into the most

行业领先的技术公司

Industry-leading technology company

拥有的业务:

  • Google

  • youtube 

  • gmail

  • chrome

  • google map

  • andriod

  • google play


Windows 系统为什么容易受到攻击

1.在微软的 Windows 系统中,自动更新程序只会升级那些由微软公司官方所提供的组件。而第三方的应用程序却不会得到修补。从而,第三方的应用程序可能会给你的系统带来大量的安全隐患。

Third-party apps that don't get fixed.

2.window 系统用户人多,攻击的人也多

window system has a large number of users, and a large number of attacker

3.windows 代码的不公开,很多安全问题都被掩盖起来

windows is closed source and many security issues are covered up


关系数据库和NoSql的区别的应用场景

Nosql的全称是Not Only Sql

1.存储方式:关系型数据库是表格式。而Nosql数据库则与其相反,通常存储在数据集中

2.存储结构:关系型数据库对应的是结构化数据,但是修改这些数据比较困难。而Nosql数据库基于动态结构,可以很容易适应数据类型和结构的变化。

Structured vs. Unstructured

3.存储规范:关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而Nosql数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写

4.存储扩展:关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。而Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。

横向扩展是已扩展服务器的数量进行高并发的处理(增强处理业务的能力)

根据配置nginx的反向代理,转发服务器(配置的ip)进行轮换处理业务(可加入负载均衡器进行分发请求)

纵向扩展,是增加单机的处理能力,一般增加cpu的处理能力

Easy to expand vs. diffcult to expand

5.查询方式:关系型数据库通过结构化查询语言来操作数据库(就是我们通常说的SQL)。SQL支持数据库CURD操作的功能非常强大,是业界的标准用法。而Nosql查询以块为单元操作数据,使用的是非结构化查询语言(UnQl),它是没有标准的。

SQL(Structured Query Language) vs. unstructured query language

6.事务

关系型数据库遵循ACID规则,而Nosql数据库遵循BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state )、最终一致性(Eventual Consistency))。由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。而Nosql数据库是在CAP(一致性、可用性、分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,但是并不是Nosql的闪光点。

Relational databases follow ACID rules, while Nosql databases follow BASE principles

7.性能

  关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能非常差,面对海量数据的时候效率非常低。而Nosql存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的一致性是弱要求。Nosql无需sql的解析,提高了读写性能。

In the face of high concurrent reading and writing, the performance of relational databases is poor. Nosql is better than relational databases

8.授权方式

  关系型数据库通常有SQL Server,Mysql,Oracle。主流的Nosql数据库有redis,memcache,MongoDb。大多数的关系型数据库都是付费的并且价格昂贵,成本较大,而Nosql数据库通常都是开源的。

free and high cost

记忆起点:ACID(事务)->结构

结构->性能

关系型数据库

优点:

1.事务处理—保持数据的一致性

2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上只有一处);

3.可以进行Join等复杂查询。

4.基于严格的数学

5.标准化SQL

6.事务

缺点

1.性能

2.纵向扩展

3.贵

nosql

优点

1. 简单的扩展(集群)

2. 高性能(它们可以处理超大量的数据):主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作;

3. 低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本;

4.灵活的数据模型。不需要事先对存储数据建立字段。

5.高可用。

缺点:

1.不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本;

2.不支持事务

3.现有产品的不够成熟:大多数产品都还处于初创期,和关系型数据库几十年的完善不可同日而语;

4.很难保证数据一致性

5.不能支持比较复杂的计算

6.NoSQL 并不完全安全稳定,由于它基于内存,一旦停电或者机器故障数据就很容易丢失数据,其持久化能力也是有限的,而基于磁盘的数据库则不会出现这样的问题


数据量大和高并发的优化策略,从硬件,系统和应用层面分析

硬件

物理存储(physical storage):分表存储

锁机制(locking mechanism)

横向扩展(Horizontal [ˌhɒrɪˈzɒntl] expansion)

纵向拓展(Vertical expansion):CPU,硬件,内存,网络

分布式(distributed)

RAID

缓存(cache)

系统

nosql

redis

读写分离(read-write separation)

合理的设计,根据访问量(Reasonable design)

静态资源(static resource)

负载均衡(load balancing)

前后端分离(Front and back end separation)

MQ消息队列

应用

合理的SQL(reasonable SQL)

限流: 令牌桶、漏桶(Restricted flow: token buckets, leaky buckets)

熔断降级(Fuse downgrade)

控制合法请求(Control of legitimate requests)


DevOps

/de'vɒps/

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下:

(1)减少变更范围

与传统的瀑布模式模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。

(2)加强发布协调

靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议和企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。

(3)自动化

强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。

与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,敏捷方法大大提升了发布频率(通常以“天”或“周”为单位)。

实现DevOps需要什么?

硬性要求:工具上的准备

上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下:

代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion

构建工具:Ant、Gradle、maven

自动部署:Capistrano、CodeDeploy

持续集成(CI):Bamboo、Hudson、Jenkins

配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail

容器:Docker、LXC、第三方厂商如AWS

编排:Kubernetes、Core、Apache Mesos、DC/OS

服务注册与发现:Zookeeper、etcd、Consul

脚本语言:python、ruby、shell

日志管理:ELK、Logentries

系统监控:Datadog、Graphite、Icinga、Nagios

性能监控:AppDynamics、New Relic、Splunk

压力测试:JMeter、Blaze Meter、loader.io

预警:PagerDuty、pingdom、厂商自带如AWS SNS

HTTP加速器:Varnish

消息总线:ActiveMQ、SQS

应用服务器:Tomcat、JBoss

Web服务器:Apache、Nginx、IIS

数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库

项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

在工具的选择上,需要结合公司业务需求和技术团队情况而定。(注:更多关于工具的详细介绍可以参见此文:51 Best DevOps Tools for #DevOps Engineers)

软性需求:文化和人

DevOps成功与否,公司组织是否利于协作是关键。开发人员和运维人员可以良好沟通互相学习,从而拥有高生产力。并且协作也存在于业务人员与开发人员之间。

出席了2016年伦敦企业级DevOps峰会的ITV公司在2012年就开始落地DevOps,其通用平台主管Clark在接受了InfoQ的采访,在谈及成功时表示,业务人员非常清楚他们希望在最小化可行产品中实现什么,工程师们就按需交付,不做多余工作。

这样,工程师们使用通用的平台(即打通的工具链)得到更好的一致性和更高的质量。此外,DevOps对工程师个人的要求也提高了,很多专家也认为招募到优秀的人才也是一个挑战。


大数据和传统BI领域的数据分析有什么区别,从应用场景、数据来源和数据处理技术架构分析

大数据和BI数据分析有什么不同,应用大数据的场景、来源、技术架构。

BI(商业智能)

中文翻译是商务智能,是一套完整的解决方案,用来将组织中现有的数据进行有效的整合, 快速准确的提供报表并提出决策依据,帮助组织做出明智的业务经营决策。

大数据

是从收集的海量数据中,通过算法将这些来自不同渠道、格式的数据进行直接分析, 从中寻找到数据之间的相关性。 简单而言, 大数据更偏重于发现,以及猜测并印证的循环逼近过程。

1.结构化VS非结构化(Structured vs. Unstructured)

2.整体VS个体(Whole vs. Individual)

大数据对于传统 BI,既有继承,也有发展,从”道”的角度讲, BI 与大数据区别在于前者更倾向于决策, 对事实描述更多是基于群体共性, 帮助决策者掌握宏观统计趋势, 适合经营运营指标支撑类问题, 大数据则内涵更广, 倾向于刻画个体,更多的在于个性化的决策。

3.传统数据库VSHadoop。(Traditional database VS Hadoop)

传统 BI 使用的是 ETL、数据仓库、 OLAP、可视化报表技术,ERP,属于应用和展示层技术,目前都处于淘汰的边缘,因为它解决不了海量数据 ( 包括结构化与非结构化)的处理问题。而大数据应用的是一个完整的技术体系,包括用 Hadoop、流处理等技术解决海量的结构化、 非结构化数据的 ETL问题,用 Hadoop、MPP等技术计算海量数据的计算问题, 用 redis 、HBASE等方式解决高效读的问题, 用 Impala等技术实现在线分析等问题。因此是个全新的行业。

4.集中式存储VS分布式存储(Centralized Storage vs. Distributed Storage)

在大数据环境中,数据存储在分布式文件系统(例如HDFS)上,而不是存储在中央服务器上。数据将分布在工作节点上,以便于处理。分布式文件系统更加安全和灵活。

5.报表式分析VS探索式发现与分析:(Report analysis vs Exploratory Discovery)

个人理解:一个是已经有了条条框框的模型,往里面放东西,然后得出结果。一个是像牛顿一样,苹果砸在你头上,你想探究这个现象

大数据的应用场景:

零售(retail)

电子商务(e-commerce)

快递(express delivery industry)


基本问题

谈谈你的缺点

举一个人生中最失败的经历

我们为什么要录用你

谈谈你的家庭情况

你最崇拜谁

你的座右铭是什么

你的学习成绩如何

你谈恋爱了吗?你如何看待大学生谈恋爱?

假如你流落荒岛,可以拥有一本书,你会选择哪一本?为什么?

外语水平?

你喜欢你的本科学校吗?你的老师怎么样?

请问你还有问题要问吗?

谈一谈你在过去事情中生活中遇到的问题,以及如何解决。

你最大的长处和弱点分别是什么?这些长处和弱点对你在读研过程中会有什么样的影响?

是否有教授或者咨询师曾经让你处于尴尬境地,还让你感到不自信?在这种情况下,你是怎样回应的?

你是否曾经得到过低于自己预期的成绩?如果得到过,你是怎样处理这件事情的?

出于个人发展的考虑,硕士毕业之后你打算继续深造吗,比如读博或出国留学?

你曾经参加过哪些竞争活动?这些活动值得吗?

你怎样影响其他人接受你的看法?

在做口头表达方面你有哪些经验?你怎样评价自己的口头表达能力?

你怎样比较自己的口头技能和写作技能?

在写专业论文时你最不喜欢哪些方面?

你的好友怎样评价你?

你和同学怎样相处?

你认为自己最显著的成就是什么?为什么?

在什么情况下你的事情或学习最为成功?

竞争对你的成就有什么积极或者消极的影响?是怎样影响的?

如果重新开始读大学的话,你的做法会有什么不同?

你个人的长期和短期目标分别是什么?你是如何确定这些目标的?你准备怎样实现这些目标?

什么样的情形会让你感到沮丧?

你确信自己是正确的,但是其他人却不赞同你时,你会怎样做?

你能够在压力状态下事情得很好吗?

你认为你能通过复试么

“你对你自己的本科成绩是否满意?”

你如何评价你的大学生活?

你是否有出国的打算,你对出国有什么看法?

谈谈你对国内外研究生制度的看法,有什么建设性的意见?

你在大学里的学习成绩不敢恭维,你如何解释呢?

你怎样对待自己的失敗?

你和别人发生过争执吗?你是怎样解决的?

你做过的哪件事最令自己感到骄傲?

说说你对行业、技术发展趋势的看法?

你认为你在学校属于好学生吗?


通信基站能定位吗?答能,讲原理,又问能精确定位吗?

基站定位 , 就是靠从用户手机上获得基站(base station)的信息 , 然后将基站信息上传给基站定位提供商的服务器 , 服务器拥有这些基站所在地的经纬度信息 , 返回给用户 , 用户就知道了自己的大概位置


计算机网络

计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统

computer network, Connected by hardware, A system for resource sharing and information transfer by software


http与https的区别

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

transmit the infromation from the server to the client

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

more safer HTTP protocol[ˈprəʊtəkɒl]

HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息让然是安全的。这就是HTTP和HTTPS的最大区别。


计算机网络的各层

OSI模型

物理层:在物理媒体上透明地传输比特流

Physical layer: transparent transmission of bit streams over physical media

数据链路层:点到点通信。成帧,差错控制,流量控制,传输管理

Data link layer: point-to-point communication. Framing, Error Control, Traffic Control, Transmission Management

网络层:为不同主机提供通信服务

Network layer: communication services for different hosts

流量控制(flow control)

拥塞控制(congestion control)

差错控制(error control)

网际交互(Internet interaction)

传输层:主机间进程间的通信。提供端到端的可靠的传输服务。流量控制,差错控制,服务质量,数据传输管理

Transport layer: communication between processes between hosts. Provides end-to-end reliable transmission services. Traffic control, error control, quality of service, data transfer management

会话层:不同主机之间的进程进行会话

Session layer: Processes between different hosts to have a session

表示层:交换信息的表示方式

Representation layer: a representation of the information exchanged

应用层:用户与网络的界面

Application layer: user interface to the network

TCP/IP模型

网际接口层

网际层

传输层

应用层


TCP/IP协议

TCP/IP模型

网际接口层

网际层

传输层

应用层


播放视频流

边下载边播放的流式

实时传输协议


路由协议

IGP:内部网关协议(Internal gateway protocol),域内路由选择。一个自治系统内部额所使用的路由选择协议。RIP,OSPF

EGP:外部网关协议(External Gateway Protocol),域间路由选择。自治系统之间所使用的路由选择协议。用于不同自治系统之间的路由器交换路由信息。BGP

路由协议:

OSPF(Open Shortest Path First):

IGP的一种,使用迪杰斯特拉算法

LSA(链路状态通告)来在网络中的路由器之间交换网络拓扑信息

基本特点:

向本自治系统中所有路由器发送信息,使用洪泛法

Sending information to all routers in this autonomous system

发送的信息是与路由器相邻的所有路由器的链路状态

The message sent is the link status of all routers adjacent to the router

只有链路状态发生变化时,路由器才向所有路由器发送此信息

The router sends this information to all routers only when the link status changes

OSPF是网络层协议,直接用IP数据报发送

OSPF is a network layer protocol that sends directly over IP datagram

能适用于规模很大的自治系统中

Can be applied to large autonomous systems

全网范围内是一致的

It's consistent across the board.

灵活

flexible

多路径间的负载平衡

load balancing

子网划分与CIDR

Subnet segmentation and CIDR

虽然能算出完整的最优路径,但路由表中不会存储完整路径。只存储“下一跳”

能将一个自治系统再划分为更小的范围

subdivide an autonomous system into smaller areas

RIP(Routing Information Protocol)

IGP的一种。应用层协议,传输层使用UDP

Application layer protocol, transport layer using UDP

使用跳数,每经过一个路由器,跳数加1

一条路径最多15个路由器。距离16不可达

There are up to 15 routers in a single path. Distance 16 is inaccessible.

特点

仅和相邻路由器交换信息

Exchange information only with adjacent routers

交换的是当前路由器所知道的全部信息,即自己的路由表

What is exchanged is all the information that the current router knows, its own routing table

选择最小跳数路由

缺点

限制了网络的规模

Limiting the size of the network

开销大,交换的是完整的路由表

High cost, full routing tables are exchanged.

慢收敛,需要较长时间才能将此信息传送到所有路由器

It takes a long time to transfer this information to all routers

RIP比较OSPF

RIP发送整个路由表,OSPF发送路由表的一部分

RIP sends the entire routing table, OSPF sends part of the routing table


带冲突检测的载波侦听的英文全称,还有什么指数回退的原因

CSMA/CD(载波侦听多路访问/碰撞检测):

CSMA的改进,适用于总线型网络或者半双工环境。不太可能全双工通信

应用于有线连接的局域网

Local Area Network (LAN) for wired connections

先听后发,边听边发(区别于CSMA协议),冲突停发,随机重发(二进制退避算法)

Listen before send, listen while send (different from CSMA protocol), conflict stop, random retransmission (binary backspace algorithm)

二进制指数退避算法等待一段时间

争用期(冲突窗口或碰撞窗口):2*单程传播时延

最小帧长:以太网规定64B,太短了无法判断是否会冲突,发出此帧的时候,前期发送的侦听帧还没回来

二进制退避算法:最多重传16次


解释下FTP、HTTP全称及其原理

FTP(文件传输协议):异构网络中任意计算机之间传送文件。提供交互式的访问,允许客户指明文件的类型与格式,允许文件具有存取权限

提供的功能:

不同种类主机系统之间的文件传输能力

以用户权限方式提供用户对远程FTP服务器上的文件管理能力

以匿名FTP的方式提供公用文件共享的能力

C/S工作方式,FTP。由主进程与若干从属进程构成

控制连接(端口21)与数据连接(端口20)

Control connection (port 21) and data connection (port 20)

HTTP(超文本传送协议):为了实现万维网上各种链接,万维网客户程序与万维网服务器程序之间的交互必须严格遵守的协议。HTTP是一个应用层协议,它使用TCP连接进行可靠的传送

面向事务,无状态(我不记得你),HTTP本身是无连接的,面向文本(每个字段都是一些ASCII码串)

HTTP的两类报文:请求报文,响应报文

持久连接:服务器发送响应后仍保持这个连接。

非持久连接:每个元素都单独用TCP连接

流水线:每遇到一个对象引用就发出一个请求

非流水线:收到一个响应才能发下一个


电子邮件发送到接收的过程

UA用SMTP推送到发送端服务器,发送端服务器用SMTP推送到接收端服务器,收件人用POP从服务器拉邮件到本地UA

SMTP POP协议


P2P技术,具体的实现机制

中继(Relaying)

  这是最可靠但也是最低效的一种P2P通信实现。其原理是通过一个有公网IP的服务器中间人对两个内网客户端的通信数据进行中继和转发。如下图所示:

  客户端A和客户端B不直接通信,而是先都与服务端S建立链接,然后再通过S和对方建立的通路来中继传递的数据。这钟方法的缺陷很明显,当链接的客户端变多之后,会显著增加服务器的负担,完全没体现出P2P的优势。

逆向链接(Connection reversal)

 第二种方法在当两个端点中有一个不存在中间件的时候有效。例如,客户端A在NAT之后而客户端B拥有全局IP地址,如下图:

  客户端A内网地址为10.0.0.1,且应用程序正在使用TCP端口1234。A和服务器S建立了一个链接,服务器的IP地址为18.181.0.31,监听1235端口。NAT A给客户端A分配了TCP端口62000,地址为NAT的公网IP地址155.99.25.11,作为客户端A对外当前会话的临时IP和端口。因此S认为客户端A就是155.99.25.11:62000。而B由于有公网地址,所以对S来说B就是138.76.29.7:1234。

  当客户端B想要发起一个对客户端A的P2P链接时,要么链接A的外网地址155.99.25.11:62000,要么链接A的内网地址10.0.0.1:1234,然而两种方式链接都会失败。链接10.0.0.1:1234失败自不用说,为什么链接155.99.25.11:62000也会失败呢?来自B的TCP SYN握手请求到达NAT A的时候会被拒绝,因为对NAT A来说只有外出的链接才是允许的。

  在直接链接A失败之后,B可以通过S向A中继一个链接请求,从而从A方向“逆向“地建立起A-B之间的点对点链接。

  很多当前的P2P系统都实现了这种技术,但其局限性也是很明显的,只有当其中一方有公网IP时链接才能建立。越来越多的情况下,通信的双方都在NAT之后,因此就要用到我们下面介绍的第三种技术了。

UDP打洞(UDP hole punching)

  第三种P2P通信技术,被广泛采用的,名为“P2P打洞“。P2P打洞技术依赖于通常防火墙和cone NAT允许正当的P2P应用程序在中间件中打洞且与对方建立直接链接的特性。以下主要考虑两种常见的场景,以及应用程序如何设计去完美地处理这些情况。第一种场景代表了大多数情况,即两个需要直接链接的客户端处在两个不同的NAT之后;第二种场景是两个客户端在同一个NAT之后,但客户端自己并不需要知道。


IEEE(Institute of Electrical and Electronics Engineers)

国际电气电子工程师协会:世界上最大的专业技术团队。致力于电气、电子、计算机工程和与科学有关的领域的开发和研究


握手

https://blog.csdn.net/qq_38950316/article/details/81087809


无状态路由

无状态路由就不需要流表这些,就单纯根据每个报文头部的字段处理,不关心报文对应流的历史状态


计算机中如何表示数据

使用二进制来表示数据,有原码,补码,反码,移码

Using binary to represent data, There is original code, complementary code, reverse code, shift code


定点数

固定小数点的位置来表示小数点。定点整数小数点在最后一位,定点小数在符号位的后面


浮点数(floating point)

通过阶码,位数,符号位来表示浮点数

Floating-point numbers by order code, bits, symbolic bits

a = m × b^e

我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。


冯诺依曼体系结构(Von Neumann architecture)

input device

output device

memory

operator(calculator)

controller


TLB

TLB就是页表的Cache,其中存储了当前最可能被访问到的页表项,其内容是部分页表项的一个副本。只有在TLB无法完成地址翻译任务时,才会到内存中查询页表,这样就减少了页表查询导致的处理器性能下降。

cache for page table, which stores the current page table items most likely to be accessed


什么是计算机,计算,语法,语义,语用

计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件系统和软件系统所组成

It use to compute, and now it was a machine with many functions, such as store data, run the process, deal with big data.

语法(grammar):一种规范,在那种语言中什么样的字符串被认为是有效程序

A specification, what kind of string is considered a valid program in that language

Java:boolean表示布尔量

C#:写成bool

语义:语法的表意,做了什么。i++这个操作具体做了什么

semantic, the mean of this operation

semantic[sɪˈmæntɪk]

语用:研究句子的言外之意。比如女朋友跟你说,我今天发烧39度了。表意是事实,但是基于她与你的关系,她想说的是让你关心照顾一下她

Semantic use: studying the meaning of sentences


Cache的两种更新策略

回写法和直写法

1〉 write through:CPU 向 cache 写入数据时,同时向 memory 也写一份,使 cache 和 memory的数据保持一致。

优点是简单,缺点是每次都要访问 memory,速度比较慢。

2〉write back:CPU更新cache时,只是把更新的cache区标记一下,并不同步更新memory。

只是在 cache 区要被新进入的数据取代时,才更新 memory。

这样做的原因是考虑到很多时候 cache 存入的是中间结果,没有必要同步更新 memory。

优点是 CPU 执行的效率提高,缺点是实现起来技术比较复杂。


Cache

Cache 是一种小容量的高速缓冲存储器,由快速的 SRAM 组成,直接制作在 CPU 芯片中。其根据程序访问的局部性(localized principle),将主存中活跃的程序块和数据块复制到 cache 中,CPU 直接从 cache中读取数据,而不必访问低速的内存

store the data that will be visited frequently

Cache 的评价标准:命中率,访存时间

改进方案:选用较好的替换算法,扩大 cache 的容量,采用多级 cache 和数据和指令 cache分类策略。

用到 cache 的思想的有:

基地址寄存器,将经常使用的基地址放在一个高速寄存器中,存储器的分层结构。


软件工程

软件工程定义:

①将系统的、规范的、可量化(成体系,有步骤,量化的的方法)的方法应用于软件的开发、运行和维护,即将工程化应用于软件;

②对①中所述方法的研究


瀑布模型的缺点

瀑布模型(Waterfall Model):按照一个阶段到另一个阶段的有序的转换序列。要求每一个活动必须进行验证。

允许出现迭代,每个活动的结果必须验证,“文档驱动”

需求工程→软件设计→软件实现→软件测试→软件交付→软件维护(可以迭代反复)。

缺点:对文档的高期望、对开发活动的线性预设、客户用户参与不够、里程碑粒度过粗。

适用范围:需求非常成熟稳定、技术可靠、复杂度适中的工程。


如何做需求分析

需求获取,需求分析,建模,给出解决方案

Requirements acquisition, requirements analysis, modeling, solutions

Object-oriented analysis methods

Use case diagram, class diagram, sequence diagram, state diagram

Structured analysis methods

Data Flow Diagram

Entity Relationship Diagram


开闭原则的缺点

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

add the code to realize change. Not to modify the code

缺点:类特别多

too much class


软件生命周期

软件生命周期模型:需求工程→软件设计→软件实现→软件测试→软件交付→软件维护

Software Life Cycle Model: 

Requirements Engineering → Software Design → Software Implementation → Software Testing → Software Delivery → Software Maintenance


观察者模式


软件工程是什么,需要哪些文档

用例文档,软件需求规格说明文档

Use case documentation, software requirements specification documentation


内聚和耦合

耦合:描述了两个模块之间的复杂程度。

Coupling: describes the level of complexity between two modules.

内聚:表达了一个模块内部联系的紧密型。

Cohesion: expresses the tightness of connection within a module.


什么是质量高的软件,你觉得软件质量如何提高


软件测试(黑白盒)

黑盒测试:把测试对象看做一个黑盒子,完全基于输入和输出来判断测试对象的正确性

优点 :

1) 比较简单,不需要了解程序的内部的代码及实现

2) 与软件的内部实现无关

3)  从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题

4)  基于软件开发文档,所以也能知道软件实现了文档中的哪些功能

5)  在做软件自动化测试时较为方便

缺点:不可能覆盖所有的代码

常见方法:

1)等价类划分 

2)边界值分析 

3)决策表 

4)状态转换

白盒测试:把测试对象看做透明的,按照测试对象内部的程序结构来设计测试用例进行测试工作

优点:帮助软件测试人员增大代码的覆盖率

缺点:

不可能覆盖所有的代码

测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求

系统庞大时,测试开销会非常大

(能解释并区别白盒测试三种不同的方法)

常见方法:

1)语句覆盖:保证每一行代码都至少执行一次。

2)分支覆盖:保证每个判断结果都至少满足一次。

3)路径覆盖:保证每条独立的执行路径都至少执行一次。


说说设计模式

观察者模式

设计模式(Design Pattern):P263

策略模式:

抽象Strategy,实现不同的ConcreteStrategy方法,Context拥有Strategy的一个引用。

优点

减少算法类与使用算法类之间的耦合

提供可重用方法

简化单元测试

扩展性好

缺点

策略类增多

策略需要对外暴露

抽象工厂模式:

AbstractFactory声明接口,ConcreteFactory实现对产品的创建。

AbstractProduct定义产品接口,ConcreteProduct实现具体工厂创建出来的产品,实现接口。

Client使用AbstractFactory和AbstractProduct来创建。

优点

易于交换产品系列

具体的创建实例过程与客户端分离(不知道用的到底是SQL还是mysql)

符合OCP

缺点

扩充困难

单件模式:

Singleton提供访问单件的接口,负责实现单件。

Client通过getInstance使用单件。

迭代器模式:

Iterator定义访问和遍历的接口,ConcreteIterator实现接口。

Aggregate定义创建相应迭代器对象的接口,ConcreteAggregate实现接口。


怎样提高代码可读性。那现在让你写个软件,给程序的可读性打分1--10分你怎么处理?

高内聚低耦合

封装

使用合理的变量名

合理添加注释

以得分点为基准,

达到控制耦合以上的得1分,达到时间内聚以上的得一分

变量名不使用一些简单a,b的得一分


体系结构与设计模式的区别是什么,举例说明

体系结构说的是整个项目的结构,比如使用MVC开发

The architecture describes the structure of the entire project, such as using MVC

设计模式说的是部分模块功能的一个设计

design pattern describes a design of some modules


线性表

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

The relationship between data elements in a linear table is a one-to-one relationship

在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。

一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。

受限线性表主要包括栈和队列,受限表示对结点的操作受限制。


用到了栈的机制:

函数的调用,每调用一次,将程序现场入栈保存。

Calling of functions

程序的递归调用。

Recursive call of the program


ADT

抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。ADT 包括数据数据元素,数据关系以及相关的操作。

A mathematical model and the set of operations defined on it

ADT includes data data elements, data relationships and related operations.

即 ADT

{

数据对象:(数据元素集合)

数据关系:(数据关系二元组结合)

基本操作:(操作函数的罗列)

}

这使得只研究和使用它的结构而不用考虑它的实现细节成为可能。

This makes it possible to study and use only its structure without considering the details of its implementation


b树

由根指向子节点,B树将索引按顺序存储,在叶节点保存索引到字段及其对应数据在表中的位置指针。从根节点开始搜索,通过节点中的指针进入下一级节点,通过比较要查找的索引值和节点中的指针大小选择进入哪个子节点,最终要么找到对应叶节点,要么没找到。叶节点中有指向表中数据的指针。

The B-tree stores the indexes sequentially from the root to the child node, Saving pointers at the leaf node. 

Start the search from the root node and go to the next level of the node via the pointer in the node


贪心算法greedy algorithm

单次求解取最优,不考虑整体

Consider only the best case at a time, not the whole


操作系统哪种数据结构用的最多?

红黑树用于内存

B树用于磁盘


动态规划,时间空间复杂度要求

把原问题分解成子问题进行求解,也就是分治的思想。其实就像一个企业一样,一个老板,对应总监,总监下面有主管,主管下面管着组员

Break down big problems into small ones, partition. One boss manages 10 directors, One director manages ten department managers, department managers manage the deparment

动态规划问题,大致可以通过以下四部进行解决。

1.划分状态,即划分子问题,例如上面的例子,我们可以认为每个组下面、每个部门、每个中心下面最优秀的3个人,都是全公司最优秀的3个人的子问题

2.状态表示,即如何让计算机理解子问题。上述例子,我们可以实用f[i][3]表示第i个人,他手下最优秀的3个人是谁。

3.状态转移,即父问题是如何由子问题推导出来的。上述例子,每个人大Leader下面最优秀的人等于他下面的小Leader中最优秀的人中最优秀的几个。

4.确定边界,确定初始状态是什么?最小的子问题?最终状态又是什么。例如上述问题,最小的子问题就是每个小组长下面最优秀的人,最终状态是整个企业,初始状态为每个领导下面都没有最优名单,但是小组长下面拥有每个人的评分。

三类模型

区间

线性

树状

实现的套路

自底向上

自顶向下

https://baijiahao.baidu.com/s?id=1631319141857419948&wfr=spider&for=pc


红黑树

与AVL树的区别:

红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。


既然你了解数据结构,那我就问一个数据结构问题,有一个excel表格,里面有许多公式,如果出现A=B+C,B=A+D(差不多就是循环调用的意思),如何避免?


找一列数的第K大的数

快速排序

Quick Sort


怎样把二维的图像重新构建成三维的模型


一群数里面每个数出现两次,只有一个数出现一次,怎样用N的复杂度找到只出现一次的数

空间换时间,数组计数

异或操作


Hash

通过一定的散列算法,将元素散列到地址上相对分散的空间上

By a definite hashing algorithm, elements are scattered over a relatively dispersed space on the address


解释:元素,树,图。并各举一例


图:由顶点和边结构组成的一种数据结构。可以分有向图和无向图

Graphs: A data structure consisting of a vertex and side structure

oriented graph

undirected graph


树:特殊的无回路的图

Trees: special circuitless diagrams


计算机中如何表示数据

最底层就是0和1,原码,反码,补码,移码

计算机组成原理上用定点数(fixed-point),浮点数(floating point)这些来表示


如何表示知识,谈谈数据结构

实际上,知识很难用结构化的方式来表示出来

In fact, knowledge is difficult to represent in a structured way


给定序列123,通过栈操作和打印操作,不给其他的存储器,能都打印123的任何一种排列。(全排列问题)

可以通过递归实现。每次交换元素的位置,然后递归调用自己

This can be done recursively. 

数据结构-Chapter9-南大算法题


解释“优先队列”这一抽象数据类型及其实现方法

大的先出来,小的后出来

1.使用数组排序的方法实现,有大小限制

sort

2.二叉排序树来实现

binary search tree

3.堆来实现

heap


在计算机领域有很多典型问题,比如在操作系统中的“生产者消费者问题”,你能不能列举一下在其他领域的典型问题,比如在人工智能方面、图形学、算法等等。

数据结构:二叉树遍历,图的遍历,找k大,大数据量下找前N个数

Binary tree traversal, graph traversal, find the k th large num

计算机网络:TCP连接释放

TCP connection and disconnection

软件工程:瀑布模型

SE: waterfall model

数据库:customer   order   orderitem     catagory     supplier      commodity


数据结构中的线性表,栈是不是线性表,还有什么用到了栈的机制

链表,顺序表,队列,栈

Chain Tables, Sequential Tables, Queues, Stacks

函数调用,递归


分治策略

分治策略是对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解

快速排序


图表示的办法,遍历图的策略,不同策略的时间复杂度

邻接矩阵。O(n*n)

adjacency matrix

邻接表。顶点表和边表。深度和广度,O(n+e)

adjacency list


谈一谈你在软件开发过程中所遇到最难的数学问题


百度地图实现计算两地公交路线最短距离适合实现

迪杰斯特拉算法


排序

选择排序,插入排序,冒泡排序,快速排序,堆排序,归并排序,基数排序。

Select sort, insert sort, bubble sort, quick sort, heap sort, merge sort, base sort.

快速排序平均时间效率最高。


数据库的事务性,就是 ACID

A原子性

C一致性

I隔离性

D持久性


数据库的恢复方法

1.根据日志进行恢复

2.通过备份进行恢复


数据库接口

使用数据库连接字


数据库范式的概念

1NF:一个关系模式R的所有属性都是不可分的基本数据项

插入异常:未选课学生不能插入

删除异常:放弃修一门课,只选修这一门课的学生被删除

错误例子:四川省成都市

正确:四川省,成都市

如关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade)

第二范式P182

R满足第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则R满足第二范式

第二范式就是每一行被码唯一标识

不满足2NF:

学生信息表:学号,姓名,系名,系主任,课程名称,分数。

(正确:学号--》姓名,学号--系名,学号--》系主任,)

问题:部分依赖    分数  --依赖--》  (课程名称+学号)

正确,拆分表:

学生表:学号,姓名,系名,系主任;

学生成绩:学号,课程名称,成绩;

不满足第二范式的问题:

插入异常:

删除异常

修改复杂

S-L-C(Sno,Sdept,Sloc,Cno,Grade)

应该改为SC(Sno,Cno,Grade)和S-L(Sno,Sdept,Sloc)

3NF   P184

R符合第三范式,则每一个非主属性既不传递依赖于码,也不部分依赖于码

3NF要求一个数据库表中不能包含其他表中已包含的非码信息

不满足3NF:

学生信息表:学号(主键),姓名,系名,系主任。

问题: 学号 --》 系名,系名--》系主任;存在传递依赖

拆分表:

学生信息表:学号(主键),姓名,系名;

学校系: 系名,系主任;

仍然不能完全消除关系模式中的各种异常情况和数据冗余

***BCNF(Boyce Codd Normal Form)修正的第三范式,扩充的第三范式 P184

每一个决定因素都包含码,消除任何属性对码的部分和传递函数依赖

不符合的例子:STJ,S学生,T教师,J表示课程

符合BCNF的关系模式:

所有非主属性对每一个码都是完整函数依赖

所有主属性对每一个不包含它的码也是完全函数依赖

没有任何属性完全函数依赖于非码的任何一组属性

1NF->2NF 消除非主属性对码的部分函数依赖

2NF->3NF 消除非主属性对码的传递函数依赖

3NF->BCNF 消除主属性对码的部分和传递函数依赖


11. 数据库的查询优化有哪些?

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描

5. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。


一个方格,从左上角走到右下角,只能向下后者向右,问有几种走法

假设从 (1,1) 走到 (m,n) ,则向下走 m-1格, 向右走 n-1格,根据全排列,有 [(m-1)+(n-1)]!种走法,再去重复计算,有 [(m-1)+(n-1)]!/[(m-1)!*(n-1)!] 种不同走法。

解释一下函数的连续

智力测验:有两柱不同的且质地均匀的香,但烧完都要用 1小时。问如何用这两柱香来表示15 分钟?

把一支香点燃一端 同时把另一支香点燃两端 当第二支香先烧完时也就是过了半小时 那么再把第一支香没点燃的那端点燃 当第一支香烧完时正好 15 分钟

猜你喜欢

转载自blog.csdn.net/m0_37302219/article/details/106052464