微软校园招聘 研发工程师A
1.const
A. const int a;
B. int const a;
a是常数
C. int const *a;
D. const int *a;
常量指针,指向一个常量的指针
E. int * const a;
指针常量,初始化的时候固定指向一个int类型变量,之后就不能再指向别的地方了。
2.attrack method
1)Vulnerability scan 漏洞扫描:基于漏洞数据库,通过扫描等手段对指定的远程或本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种渗透攻击行为。
2)SQL Injection
3)Brute force 暴力破解
3.dll被加载到内存时,哪些部分可以在进程间共享
1)code segment
2) bss segment : 存放程序中未初始化的全局变量的一块内存区域。
4.实验鼠个数
8个瓶子,其中一个瓶子里面装的有毒试剂,最少需要几只实验鼠可以确定有毒试剂在哪个瓶子里?
答案:3只
解答:
8个瓶子编码0~7,并将编号用二进制表示
0:0 0 0
1:0 0 1
2:0 1 0
3:0 1 1
4:1 0 0
5:1 0 1
6:1 1 0
7:1 1 1
将最后一位为“1”的瓶子给实验鼠1吃:即1、3、5、7
将倒数第二位为“1”的瓶子给实验鼠2吃:即2、3、6、7
将倒数第三位为“1”的瓶子给实验鼠3吃:即4、5、6、7
发现实验鼠1死亡,实验鼠2活着,实验鼠3死亡
即实验鼠1吃了末尾为1的瓶子 - - 1
实验鼠2吃了中间为1的瓶子,但是活着,即 - 0 1
实验鼠3吃了开头为1的瓶子死亡,即 1 0 1
即瓶子5里的试剂有毒
5.并发、并行、线程安全
1)并发:某个时间段内,多任务交替处理的能力
CPU把可执行的时间均匀地分成若干份,每个进程执行一段时间后,记录当前的工作状态,释放相关的执行资源并进入等待状态,让其它进程抢占CPU资源。
2)并行:同时处理多任务的能力
目前,CPU 已经发展为多核,可以同时执行多个互不依赖的指令及执行块。
3)线程安全:因为各个线程轮流占用CPU的计算资源,可能会出现某个线程尚未执行完就不得不中断的情况,容易导致线程不安全。
线程安全问题只在多线程环境下才出现,单线程串行执行不存在此问题。
a.数据单线程内可见
b.只读对象
c.线程安全类
d.同步与锁机制
核心:要么只读,要么加锁
6.Lock继承关系
在AQS中,定义了一个volatile int state变量作为共享资源,如果线程获取资源失败,则进入同步FIFO队列中等待;如果成功获取资源就执行临界区代码。执行完释放资源时,会通知同步队列中的等待线程来获取资源后出队并执行。
7.Java中常用锁实现的方式
1)用并发包中的锁类
2)利用同步代码块
使用synchronized关键字
a.在方法签名处加synchronized关键字
b.使用synchronized(对象或类)进行同步
锁的范围尽可能小,锁的时间尽可能短,即能锁对象,就不要锁类;能锁代码块,就不要锁方法。
synchronized锁特性由JVM负责实现,JVM底层是通过监视锁来实现synchronized同步的,监视锁即monitor,是每个对象与生俱来的一个隐藏字段,使用synchronized时,JVM会根据synchronized的当前使用环境,找到对应对象的monitor,再根据monitor的状态进行加、解锁的判断。例如,线程在进入同步方法或代码块时,会获取该方法或代码块所属对象的monitor,进行加锁判断。如果成功加锁就成为该monitor的唯一持有者,monitor在被释放前,不能再被其他线程获取。
8.调用函数
__cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈,被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。
9.double转int
(new Double(result)).intValue();
先生成一个double的外覆型Double,再用Double的intValue()得到int