很多同学都想得到淘宝的实习或者校招机会。那从过来人的角度谈谈,要通过淘宝的实习、校招面试,都有哪些经验和注意事项呢?今天就跟大家分享一下。
1、两个进程之间的通信方式有哪几种?
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使 用。进程的亲缘关系通常是指父子进程关系。 # 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 # 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机 制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程 之间的同步手段。 # 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列 克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 # 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 应届生求职大礼包 应届生求职网 YingJieSheng.COM 应届生求职网 http://www.yingjiesheng.com 第 20 页 共 60 页 # 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程 创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设 计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 # 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程 通信。
2、数据库的 ACID 特定是什么?以及他们分别应用的场合?
答案:ACID 是指数据库事务具有的四个特性:原子性、一致性、隔离性、持久性
原子性:事务是数据库的逻辑工作单位,事务中包 括的操作要么都做,要么都不做。只有使据库事务中所有的操 作都执行成功,才算整个事务成功;事务中任何一个 SQL 语句执行失败,那么已经执行成功的 SQL 语句也必须 撤销,数据库状态应该回滚(ROLLBACK)到执行事务前的状态。
持久性:指一个事务一旦提交,它对数据库中数据 的改变就应该是永久性的。接下来的其他操作或故障不应该对 其执行结果有任何影响。 只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃, 重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
隔离性:一个事务的执行不能被其他事务干扰。即 一个事务内部的操作及使用的数据对其他并发事务是隔离的, 并发执行的各个事务之间不能互相干扰。独立的数据库事务集合以不相互冲突的方式执行。仍使用这个 银行类比, 考虑两个客户同时在帐户之间转移资金。数据库必须分别跟踪两个转帐;否则,资金可能进入错误的帐户。
一致性:如果在执行事务之前数据库是一致的,那 么在执行事务之后数据库也还是一致的;事务执行的结果必须 是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就 说数据库 处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些尚未完成的事务对数据 库所做的修改有一部分已写入物理数据库, 这时数据库就处于一种不正确的状态,或者说是不一致的状态。例如 某公司在银行中有 A、B 两个账号,现在公司想从 A 中减去一万元,存入账号 B。那么就可以定 义一个事务,该 事务包括两个操作,第一个操作就是从账号 A 减去一万元,第二个操作就是向账号 B 中加入一万元。这两个操作 要么全做,要么全不做,数据库都处 于一致性状态。如果只做一个操作则用户逻辑上就会发生错误,少了一万元, 这时数据库就处于不一致状态。可见一致性与原子性是密切相关的。
3、 指针和引用的区别?
(1)从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。
(2)从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域。
(3)从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。 指针变量在符号表上对应的地址值为指针变量的地址 值,而引用在符号表上对应的地址值为引用对象的地址值。 符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能 改。
引用:一个变量的别名,为什么引入别名呢?原因是我们想定义一个变量,他共享另一个变量的内存空间,使用 别名无疑是一个好的选择。变量是什么?是一个内存空间的名字,如果我们给这个内存空间在起另外一个名字, 那就是能够共享这个内存了,引用(别名)的由此而来。 指针:指向另一个内存空间的变量,我们可以通过它来索引另一个内存空间的内容,本身有自己的内存空间。
二者区别:(1)引用访问一个变量是直接访问,而指针是间接访问。 (2)引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间,指针是一个实体,而 引用不是。(3)引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个内存空间的名字,而不能 改成其他的,当然可以改变这个内存空间的值。 例如 int i = 3,j = 4; int &x = i; //成为 i 的别名 x = j; //不能否认 x 仍然引用 i,并没有成为 j 的别名,只是修改了 x 和 i 共享的内存空间的值为 4
4、操作系统中的同步和异步有什么区别?分别应用在什么场合?
同步,就是你的程序在执行某一个操作时一直等待直到操作完成。 最常见的例子就是 SendMessage。 该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把 消息处理函数所返回的 LRESULT 值返回给调用者。
异步,就是程序在执行某一个操作时,只是发出开始的指令;由另外的并行程序执行这段代码,当完成时再通 知调用 者。 当一个客户端通过调用 Connect 函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连 接真正建立起来以后,socket 底层会发送一个消息通知该对象。
同步和异步的简单区别: 举个例子:普通 B/S 模式(同步)AJAX 技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起 去吃饭。 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。 所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。 举个例子:打电话是同步,发消息是异步。
想要更多阿里巴巴实习、校招的机会。请点击这里