2011年11月30日星期三

linux chapter10

progress&signal

1.替换一个进程映象 :exec()函数组

#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(){
printf("running ps with execlp\n");
execlp("ps","ps",0);
printf("done\n");
exit(0);
}


2.复制一个进程映象

一段代码有两个进程在享用,所以需要区分,方法就是父进程调用fork()的返回值不是零,而子进程的是零.

一般,父进程要等待子进程的結束,所以要用函数wait();

#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(){
pid_t pid;
int stat_value;
pid_t child_pid;
char *message;
int n;
int exit_code;
printf("fork program starts\n");
pid=fork();
switch(pid){
case -1:perror("fork failed\n");
exit(1);
case 0:message="This is child";
n=5;
exit_code=37;
break;
default:
message="This is father";
n=3;
exit_code=0;
break;
}
for(;n>0;n--){
puts(message);
sleep(1);
}
if(pid!=0){
child_pid=wait(&stat_value);
printf("Child finished : PID = %d\n",child_pid);
}
exit(0);
}


Ctrl+c=SIGINT;

Ctrl+\=SIGQUIT;


3.信号处理(用signal()函数)

#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void ouch(int sig){
printf("OUCH! I GOT A SIGNAL %d\n",sig);
(void)signal(SIGINT,SIG_DFL);////对中止信号采取default方法
}

int main(){
(void)signal(SIGINT,ouch);
while(1){
printf("Hello\n");
sleep(1);
}
}



4.信号处理(用sigaction()函数)

#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void ouch(int sig){
printf("OUCH! I GOT A SIGNAL %d\n",sig);
//(void)signal(SIGINT,SIG_DFL);////对中止信号采取default方法
}

int main(){
struct sigaction act;
//(void)signal(SIGINT,ouch);
act.sa_handler=ouch;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGINT,&act,0);
while(1){
printf("Hello\n");
sleep(1);
}
}

2011年11月29日星期二

linux chapter9

调试与纠错
///////////////////debug.c //////////////////
#include<stdio.h>
#include<stdlib.h>
int main(){
#ifdef DEBUG
printf("compiled " __DATE__ " at "  __TIME__ "\n");
#endif
printf("Hello World\n");
exit(0);
}

编译时,如果不用DEBUG,则gcc -o debug debug.c
如果要用DEBUG,就得在命令中define,方法就是gcc -o debug -DDEBUG debug.c



使用强大的gdb
1.启动 首先在gcc时加入选项-g
然后  gdb filename
进入gdb的命令行
2.有很多命令,比如
run,list,print,break,


使用assert宏
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<math.h>
double my_sqrt(double x){
assert(x>=0);
return sqrt(x);
}

int main(){
#ifdef DEBUG
printf("compiled " __DATE__ " at "  __TIME__ "\n");
#endif
printf("Hello World\n");
printf("sqrt of +2 = %g\n",my_sqrt(2.0));
printf("sqrt of -2 = %g\n",my_sqrt(-2.0));
exit(0);
}

2011年11月28日星期一

linux chapter8

开发工具
1.make& Makefile
2.RCS(revision control system)
rcs -i
ci
co -r
co -l
rlog
rcsdiff
3.编写使用手册以供man命令使用
4.软件的打包发行
diff&patch
tar

2011年11月26日星期六

linux chapter7

数据管理
1.内存管理(物理内存&swap space)
2.文件封锁
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
int main(){
int file_des;
int save_err;
file_des=open("/tmp/LCK.txt",O_RDWR|O_CREAT|O_EXCL,0444);
if(file_des==-1){
save_err=errno;
printf("open failed with error %d\n",save_err);
}
else printf("open ok\n");
exit(0);
}
文件中的封锁区
3.dbm database
#include<memory.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<gdbm.h>
#include<string.h>
#define TEST_DB_FILE "/tmp/dbm1_test"
#define ITEMS_USED 3
struct test_data{
char misc_char[15];
int any_integer;
char more_char[21];
};
int main(){
struct test_data items_to_store[ITEMS_USED];
struct test_data item_retrieved;
char key_to_use[20];
int i,result;
datum key_datum;
datum data_datum;
GDBM_FILE dbm_ptr;
dbm_ptr=gdbm_open(TEST_DB_FILE,512,O_RDWR|O_CREAT,066,0);
if(!dbm_ptr){
fprintf(stderr,"open dbm error\n");
exit(1);
}
memset(items_to_store,'\0',sizeof(items_to_store));
strcpy(items_to_store[0].misc_char,"FIRST!");
items_to_store[0].any_integer=47;
strcpy(items_to_store[0].more_char,"foo");
strcpy(items_to_store[1].misc_char,"bar");
items_to_store[1].any_integer=13;
strcpy(items_to_store[1].more_char,"unlucky?");
strcpy(items_to_store[2].misc_char,"THIRD!");
items_to_store[2].any_integer=3;
strcpy(items_to_store[2].more_char,"baz");
for(i=0;i<ITEMS_USED;i++){
sprintf(key_to_use,"%c%c%d",items_to_store[i].misc_char[0],items_to_store[i].more_char[0],items_to_store[i].any_integer);
key_datum.dptr=(void *)key_to_use;
key_datum.dsize=strlen(key_to_use);
data_datum.dptr=(void *)&items_to_store[i];
data_datum.dsize=sizeof(struct test_data);
result = gdbm_store(dbm_ptr,key_datum,data_datum,GDBM_REPLACE);
if(result!=0){
fprintf(stderr,"dbm_store fail\n");
exit(2);
}
}
sprintf(key_to_use,"bu%d",13);
key_datum.dptr=key_to_use;
key_datum.dsize=strlen(key_to_use);
data_datum=gdbm_fetch(dbm_ptr,key_datum);
if(data_datum.dptr){
printf("data retrieved\n");
memcpy(&item_retrieved,data_datum.dptr,data_datum.dsize);
printf("retrieved  item %s %d %s\n",item_retrieved.misc_char,item_retrieved.any_integer,item_retrieved.more_char);
}
else{
printf("no data find\n");
}
gdbm_close(dbm_ptr);
exit(0);
}
///////////////////////////////////课本关于DBM的内容比较老,现在是GDBM

2011年11月25日星期五

linux chapter6

curses library
(vi is based on this library)
是介于文本行程序和X窗口程序的一个过度.
可实现对屛幕的控制.
可实现对键盘的控制
多窗口编程
子窗口编程
窗口色彩

2011年11月23日星期三

linux chapter5

终端
对终端进行读写
终端驱动可控制
 #include<termios.h>
shell 查看当前终端设置 stty -a

2011年11月22日星期二

linux chapter4

environment
很多工具程序有命令行参数,如 ls -l中的"-l"
处理这种命令行选项有个函数 getopt,定义如下
#include<unistd.h>
int getopt(int argc,const char * argv[],const char *optstring);
extern char *optarg;
extern int optind,oprerr,optopt;
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
    int flags, opt;
    int  tfnd;
char *nsecs;
  
    tfnd = 0;
    flags = 0;
    while ((opt = getopt(argc, argv, "nt:")) != -1) {
        switch (opt) {
        case 'n':
            flags = 1;//printf("scan n\n");
            break;
        case 't':
            nsecs = optarg;printf("nsecs %s\n",nsecs);
            tfnd = 1;
            break;
        default: /* '?' */
            fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
                    argv[0]);
            exit(EXIT_FAILURE);
        }
    }

   printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind);

   if (optind >= argc) {
        fprintf(stderr, "Expected argument after options\n");
        exit(EXIT_FAILURE);
    }

   printf("name argument = %s\n", argv[optind]);

   /* Other code omitted */

   exit(EXIT_SUCCESS);
}

在C中读写环境变量,getenv,putenv
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
int main(int argc,char *argv[]){
char *value,*var;
char var1[1000];
if(argc==1||argc>3){
fprintf(stderr,"usage:env var [value]\n");
exit(1);
}
var=argv[1];
strcpy(var1,var);
value=getenv(var);
if(value)///不是NULL
printf("variable %s is %s\n",var,value);
else
printf("variable %s no value\n",var);
if(argc==3)
{
value=argv[2];
strcat(var1,"=");
strcat(var1,value);
putenv(var1);
value=getenv(var);
if(value)///不是NULL
printf("variable %s is %s\n",var,value);
else
printf("variable %s no value\n",var);
}
exit(0);
}

isca2007,san diego,usa

special purpose for warehouse computer
transactions and synchronization
virtual caches and hierarchies
transactions
networks and routers
atomic regions and fine-grained parallelism
core fusion and quantum
streams to physics processors
bricks,mortars,and microfluidics
memory consistency
power and thermal
clocks, scheduling and stores
memory and caches
experience and methodology
control independence and prediction
fault
security
vulnerability

isca2008,beijing,cn

novel microarchitecture
novel memory system
interconnect networks
transactional memory
emergent tech
debugging parallel programs
system architecture and I/O
reliability
application acceleration
performance evaluation
multi-core many-core design

2011年11月21日星期一

流转的王妃

多一个想保护的人,幸福就多增一点
——慧生出生时,浩对溥杰
我是你的妻子,我要和你在一起
——日本战败在即,溥杰劝浩留在东京,自己只身回新京,浩对溥杰

所有关于爱情的美好想象,都在这段传奇中找到了答案
这本小说在我小学五年级的时候就读过,现在再看电视剧,唏嘘不已
历史车轮碾压的一对爱人,所谓造物弄人
这是历史上真实的故事,所以才感人至深

Linux Chapter3

file operation
open,close,read,write,ioctl:这五个是系统调用
/dev/null,/dev/tty,/dev/console
弹出光驱eject
now we use standard io library     这些是库函数
#include<stdio.h>
fopen
fclose
fread
fwrite

isca2009,austin,texas,usa

session1:new memory tech
session2A:real time
session2B:prefetching and streaming
session3A:reliability&fault-tolerance
session3B:multimedia&mobile
session4A:cache organization
session4B:routing
session5:load and stores
session6:DRAM&SSD
session7:power in chip multiprocessors
session7B:hardware support for monitoring&debugging
session8A:potpourri
session8B:memory system reconfiguration&acceleration
session9:on-chip interconnection networks
session10:speculative threading&parallelization

isca2010,saint malo,fr

session1:energy-efficiency
session2:caches,emerging tech and interconnect
session3:memory subsystem and prductivity&debugging
session4:acceleration architecture&threading
session5A:simulation tech and real system evaluation
session5B:cluster&data centre
session6:QOB&security
session7A:multi-core
session7B:reliability&fault-tolerance

isca2011,san jose,ca,usa

session1:novel architecture
session2:parallel architecture
session3A:caches
session3B:parallel architecture
session4A:dependable architecture
session4B:security
session5:reliability
session6A:multithreading
session6B:on-chip networks
session7A:memory
session7B:power
session8A:architecture modeling and evaluation
session8B:on-chip networks
session9A:photonics
session9B:power

2011年11月20日星期日

Linux Chapter2

Shell Programming
重定向:>,<
追加:>>
拉机桶/dev/null
管道:|
用来把进程连接在一起,
脚本程序
#!/bin/sh
myvar="HI"
echo ENTER SOMETHING
read myvar
echo \$myvar is now $myvar
exit 0
单引号不替换变量,双引号替换

测试用[]
#!/bin/sh
echo "is it morning,enter yes or no"
read anser
if [ "$anser" = "yes" ];then
echo GOOD MORNING
elif [ "$anser" = "no" ];then
echo Good afternoon
else
echo please enter yes or no
exit 1
fi
exit 0

#!/bin/sh
for file in $(ls *.c);do
echo $file
done
exit 0

2011年11月19日星期六

Linux Chapter1

入门知识
unix下的应用程序不仅包括可执行文件,也包括脚本程序.
静态库:若有多个程序用该库,则内存中会有其多份考备.
动态库:代码运行时,若要用到库,则这时才把库载入内存.

2011年11月17日星期四

中科院招聘

中国科学院计算技术研究所2012年度岗位招聘信息
【打印】【关闭】
中国科学院计算技术研究所(简称计算所)创建于1956年,是中国第一个专门从事计算机科学技术综合性研究的学术机构。计算所研制成功了我国第一台通用数字电子计算机,并形成了我国高性能计算机的研发基地,我国首枚通用CPU芯片也诞生在这里。
  计算所是我国计算机事业的摇篮。伴随着计算所的发生发展,先后为国家培养了几百名我国最早的计算技术专业人员,在这里工作或学习过的院 士有二十余位。随着学科与技术发展,从计算所陆续分离出中科院微电子学研究所、计算中心、软件所和网络中心等多个研究机构,以及联想、曙光等高技术企业。 五十多年来,计算所在科学研究和科技成果等方面取得了显著成就。截止2010年底,我所作为第一完成单位共取得科技成果714项;共获国家、院、市、部级 科技奖励194项,其中,国家级科技奖励 38项(含非第一完成单位5项),院、部级科技奖励 156项(含非第一完成单位6项)。
  计算所坚持“基础性、战略性、前瞻性”的三性原则,坚持新时期办院方针,以“跻身国际前沿,关注国计民生,引领中国信息产业”为己任,落实“创新、求实”的理念,力争成为世界一流的科研学术机构。

中国科学院计算技术研究所2012年度岗位招聘信息

应聘简历请发送至hr@ict.ac.cn或岗位名称后专用邮箱,请注明
应聘部门和岗位名称。

岗位编号:1201
招聘部门:计算机体系结构国家重点实验室
招聘岗位:集成电路可靠性设计方向助理研究员
招聘人数:1
岗位职责:从事集成电路可靠性相关的研究工作,主要包括面向新器件和新体系结构的集成电路可靠性分析和可靠性设计的研究。
岗位要求:
1、计算机系统结构专业,具有博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,在集成电路可靠性设计方面发表过高水平英文论文,对科研有浓厚兴趣;
3、熟悉集成电路设计的基本流程及工具;
4、熟悉计算机体系结构和微体系结构的基本原理及实现,熟悉一到两种主流多核处理器模拟器;
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
6、有多核处理器高速缓存一致性、新型非易失性存储器研究等相关经验者优先。

岗位编号:1202
招聘部门:计算机体系结构国家重点实验室
招聘岗位:编译技术方向助理研究员
招聘人数:1
岗位职责:动态优化技术研究,二进制翻译系统研究
岗位要求:
1、计算机系统结构专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、编译技术、linux系统内核等;
4、熟悉虚拟机/二进制翻译/编译优化等领域的一项或几项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境下的编程经验;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
7、有编译器开发、linux内核驱动开发等相关经验者优先

岗位编号:1203
招聘部门:计算机体系结构国家重点实验室
招聘岗位:编译方向助理研究员
招聘人数:1
岗位职责:开展面向高通量计算的编程系统研究
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表过高水平科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、编译理论与实现技术、现代操作系统原理与实现、并行及分布式系统等
4、熟悉云计算/虚拟机/海量数据处理等领域的一项或几项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java、及各种脚本语言开发程序,有Linux环境下的编程经验;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;

岗位编号:1204
招聘部门:计算机体系结构国家重点实验室微结构实验室
招聘岗位:计算机微结构方向工程师
招聘人数:1
岗位职责:计算机微结构研究与开发
岗位要求:
1、计算机专业或电子专业,硕士学历;
2、有扎实的计算机专业基础知识,深刻理解计算机体系结构;
3、熟悉计算机体系结构、处理器内微结构、众核处理器、片上网络等;
4、有VLSI开发经验,能够熟练运用verilog等硬件开发语言,熟悉C/C++等开发程序,有EDA工程经验;
5、有较强的独立工程问题解决能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
6、有工程开发经验者优先。

岗位编号:1205
招聘部门:高性能计算机研究中心
招聘岗位:系统软件方向 助理工程师/工程师
招聘人数:2
岗位职责:参与国家、科学院以及横向的重大科研项目,从事并行计算机系统软件相关的研究工作。主要包括操作系统核心的研究及通信系统的研究等。
岗位要求:
1、计算机相关专业,硕士及以上学历,或本科毕业并具有三年以上开发经验;
2、具有扎实的专业基础知识,热爱操作系统相关研究工作;
3、熟悉并行计算机体系结构、并行算法及并行编程;
4、熟悉操作系统基本原理,了解操作系统核心的层次结构,具有Linux核心程序开发经验,能够熟练运用C/C++、Java、Perl、Python等工具;
5、有较强的独立科研能力,并具有良好的团队意识、沟通能力及敬业精神。

岗位编号:1206
招聘部门:高性能计算机研究中心
招聘岗位:文件系统方向 助理工程师/工程师
招聘人数:1
岗位职责:参与国家、科学院以及横向的重大科研项目,从事大规模存储/并行文件系统相关的研究工作。主要包括大规模存储系统结构研究、并行文件系统研究、高性能专用文件系统研究等。
岗位要求:
1、计算机相关专业,硕士及以上学历,或本科毕业并具有三年以上开发经验;
2、具有扎实的专业基础知识,热爱存储及文件系统相关研究工作;
3、熟悉并行计算机体系结构、并行算法及并行编程;
4、熟悉大规模存储体系结构及并行文件系统基本原理,具有Linux核心程序开发经验,能够熟练运用C/C++、Java、Perl、Python等工具;
5、有较强的独立科研能力,并具有良好的团队意识、沟通能力及敬业精神。

岗位编号:1207
招聘部门:高性能计算机研究中心
招聘岗位:并行算法/加速计算方向 助理研究员
招聘人数:1
岗位职责:参与国家、科学院以及横向的重大科研项目,从事大规模并行算法及加速计算相关的研究工作。主要包括大规模并行算法研究、可重构计算研究、GPU加速计算研究等。
岗位要求:
1、计算机等相关专业,博士学历;
2、有扎实的专业基础知识,能够把握相关领域的国际前沿发展趋势,发表了一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉数字电路理论基础、并行计算机体系结构、并行算法及并行编程;
4、熟悉数字电路设计流程及主流EDA工具,具有FPGA/IC/GPU系统开发经验,能够熟练运用Verilog、C/C++等工具;
5、熟悉Linux操作系统,能够熟练运用C/C++、Perl、Python等工具;
6、有较强的独立科研能力,并具有良好的团队意识、沟通能力及敬业精神。

岗位编号:1208
招聘部门:高性能计算机研究中心
招聘岗位:并行计算应用方向 助理研究员
招聘人数:1
岗位职责:
参与国家、科学院以及横向的重大科研项目,从事大规模并行计算应用相关的研究工作。主要包括多尺度/混合精度数值模拟、大规模并行有限元/粒子模拟、高可扩展容错算法等。
岗位要求:
1、计算数学、计算力学或计算机等相关专业,博士学历;
2、有扎实的专业基础知识,能够把握相关领域的国际前沿发展趋势,发表了一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉并行计算机体系结构、并行算法及并行编程;
4、有大型软件开发经验,能够熟练运用C/C++、Fortran等工具,有Linux或Window环境下的编程经验;
5、有较强的独立科研能力,并具有良好的团队意识、沟通能力及敬业精神。

岗位编号:1209
招聘部门:高性能计算机研究中心
招聘岗位:系统结构/逻辑电路方向 助理工程师/工程师
招聘人数:1
岗位职责:参与国家、科学院以及横向的重大科研项目,从事并行计算机系统结构研究及逻辑电路设计相关工作。
岗位要求:
1、计算机或电子类相关专业,硕士及以上学历,或本科毕业并具有三年以上开发经验;
2、具有扎实的专业基础知识,热爱体系结构/硬件系统开发工作;
3、熟悉数字电路理论基础、并行计算机体系结构;
4、熟悉数字电路设计流程及主流EDA工具,具有实际FPGA/IC系统开发经验,能够熟练运用Verilog、VHDL、SystemVerilog、C/C++等工具;
5、有较强的独立科研能力,并具有良好的团队意识、沟通能力及敬业精神。

岗位编号:1210
招聘部门:高性能计算机研究中心
招聘岗位:逻辑验证方向 助理工程师/工程师
招聘人数:1
岗位职责:参与国家、科学院以及横向的重大科研项目,从事数字芯片设计的逻辑验证相关研究工作。
岗位要求:
1、计算机或电子类相关专业,硕士及以上学历,或本科毕业并具有三年以上开发经验;
2、具有扎实的专业基础知识,热爱体系结构/硬件系统开发工作;
3、熟悉数字电路理论基础、并行计算机体系结构;
4、熟悉数字电路设计流程及主流EDA工具,具有实际FPGA/IC系统开发经验,能够熟练运用Verilog、VHDL、SystemVerilog、C/C++等工具;
5、有较强的独立科研能力,并具有良好的团队意识、沟通能力及敬业精神。

岗位编号:1211
招聘部门:微处理器研究中心
招聘岗位:全定制电路设计助理研究员/工程师
招聘人数:2
岗位职责:参与国家重大科研项目,从事下一代数据接口传输等相关研究工作。
岗位要求:
1、微电子或电子工程专业,博士学历,有射频领域科研经验者的优先;
2、有扎实的射频领域相关专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
4、有安捷伦、Ansoft等软件使用经验者优先。

岗位编号:1212
招聘部门:微处理器研究中心
招聘岗位:芯片物理设计工程师
招聘人数:2
岗位职责:参与国家重大科研项目,从事微处理器高频及低功耗物理设计方向研究工作。
岗位要求:
1、微电子或电子工程专业,硕士及以上学历;
2、有扎实的微电子电子相关专业基础知识,能够把握相关领域的国际前沿发展趋势,具备一定的科研工作经验;
3、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
4、有集成数字电路设计或模拟电路设计经验者优先。

岗位编号:1213
招聘部门:微处理器研究中心
招聘岗位:逻辑设计工程师
招聘人数:2
岗位职责:从事芯片结构逻辑设计和验证等相关工作
岗位要求:
1、计算机专业或微电子工程专业,硕士及以上学历;
2、有扎实的计算机系统架构、芯片设计等专业基础知识;
3、熟悉硬件描述语言和各类EDA仿真验证工具;
4、熟悉SOC验证流程,了解主流片上总线协议,能承担testbench的开发和调试;
5、善于与人沟通,性格开朗,做事细心、有耐心;
6、熟悉MIPS架构者优先。

岗位编号:1214
招聘部门:微处理器研究中心
招聘岗位:系统软件工程师
招聘人数:2
岗位职责:从事芯片原型系统系统开发和性能优化
岗位要求:
1、计算机专业或软件工程专业,硕士及以上学历;
2、有扎实的计算机专业基础知识,熟悉计算机体系结构、操作系统、编译工具;
3、熟悉linux内核、主流总线协议与设备驱动;
4、熟悉linux操作,熟悉C/C++编程,熟悉脚本编程;
5、善于与人沟通,性格开朗,做事细心、有耐心;
6、熟悉MIPS架构者优先。

岗位编号:1215
招聘部门:微处理器研究中心
招聘岗位:DFT(可测性设计)助理研究员/工程师
招聘人数:2
岗位职责:DFT设计及芯片的测试
岗位要求:
1、计算机、电子、通讯专业,硕士以上学历;
2、熟悉ASIC、DFT设计流程,熟悉Verilog;
3、熟悉EDA软件,DC/VCS/TetraMAX 优先;
4、有良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神。

岗位编号:1216
招聘部门:网络技术研究中心
招聘岗位:未来互联网(体系结构方向)助理研究员(简历可发送lixiaoyu01@ict.ac.cn)
招聘人数:1
岗位职责:参与国家、科学院以及横向的重大科研项目,从事未来互联网体系结构相关的研究工作,主要包括新型网络管理和控制平面的研究和设计、未来互联网体系结构模型的研究和试验床验证,协助课题申请和研究生指导
岗位要求:
1、 计算机、通信或相关专业博士;
2、 具有扎实的计算机网络基础理论和系统的专业知识,能够把握相关领域的国际前沿发展趋势,对科研有浓厚兴趣;
3、 熟悉网络路由协议、传输协议或互联网的管控机制,了解网络建模和性能分析方法;
4、 在互联网协议栈、路由以及网络安全方向有深入研究者优先,对未来互联网(后IP网络)研究有深入了解者优先;
5、 在国内外学术期刊、国际会议上发表过一定数量高水平的学术论文,具有良好的英语听说读写等能力;
6、 具备一定的系统开发经验,能够熟练运用C/C++,有一定的Linux环境下的编程经验;
7、 有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神。

岗位编号:1217
招聘部门:网络技术研究中心
招聘岗位:未来互联网(移动互联网方向)助理研究员(简历可发送lixiaoyu01@ict.ac.cn)
招聘人数:1
岗位职责:开展未来互联网架构、移动互联网、无线网络和移动计算等方面的研究
岗位要求:
1、 计算机、通信或相关专业博士;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定
数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机网络体系架构、网络TCP/IP核心协议族、无线网络关键技术与系统;
4. 有项目开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环
境下的编程经验;
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研
精神;
6. 在下一代互联网、移动互联网方面具备研究基础者优先;
7. 有较好数学基础者优先;
8、有一定科研工作经验,熟悉项目申请、项目管理等科研工作者优先。

岗位编号:1218
招聘部门:网络技术研究中心
招聘岗位:未来互联网(协议与试验床方向)助理研究员
(简历可发送lixiaoyu01@ict.ac.cn)
招聘人数:1
岗位职责:未来互联网的协议设计、性能评估和实验床建设
岗位要求:
1、计算机科学与技术相关专业,博士学位;
2、融合掌握计算机理论知识与互联网体系原理;
3、掌握互联网协议设计和网络性能评估的基本方法;
4、掌握大型实验网络建设的基本方法及技术;
5、能够熟练运用C/C++、Java等在Linux与Windows环境下的编程开发程序;
6、在互联网方面有较好的科研基础,具有国家级科研项目经验,发表过高质量的科研论文;
7、具有较强的独立科研能力,具有良好的沟通能力与团队合作意识;
8、具有大型网络系统设计相关经验者优先。

岗位编号:1219
招聘部门:网络技术研究中心
招聘岗位:未来互联网(安全与可信关键技术方向)助理研究员(简历可发送lixiaoyu01@ict.ac.cn)
招聘人数:1
岗位职责:
1、作为学术骨干,参与相关科研项目/课题的组织申请及执行;
2、主持所承担的科研任务,并将科研成果进行总结,发表高质量论文;
3、协助指导研究生。
岗位要求:
1、计算机、通信工程或相关专业博士。
2、有扎实的网络方向基础理论和系统知识,能够把握相关领域的国际前沿发展趋势,在国内外相关学术期刊、国际会议上发表过较高水平的学术论文,对科研有浓厚兴趣。
3、在网络安全、可信网络、网络体系结构等方面参与/承担过相关课题,具备相关研究背景和开发经验。
4、能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验。
5、熟练的英语听说读写等能力。
6、有较强的独立科研能力,良好的沟通能力、组织能力、团队合作与敬业精神。

岗位编号:1220
招聘部门:网络技术研究中心
招聘岗位:无线传感器网络方向助理研究员(简历可发送lixiaoyu01@ict.ac.cn)
招聘人数:1
岗位职责:
1、作为学术骨干,参与相关科研项目/课题的组织申请及执行;
2、主持所承担的科研任务,并将科研成果进行总结,发表高质量论文;
3、协助指导研究生和科研管理。
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表过高质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、并行或分布式系统、嵌入式系统;
4、熟悉传感网/物联网/云计算/移动互联网等领域的一项或几项;
5、曾经承担或参与大型项目,能够熟练运用C/C++、Java等程序设计语言,有Linux以及Window环境下的编程经验;
6、有较强的独立科研能力以及项目管理经验,良好的团队合作意识、沟通能力,以及敬业和钻研精神;
7、有传感网、物联网、云计算、移动互联网等相关经验者优先。

岗位编号:1221
招聘部门:前瞻研究实验室
招聘岗位:分布式计算方向助理研究员(简历可发送renfei@ict.ac.cn)
招聘人数:1
岗位职责:从事分布式计算技术与系统研发
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
4、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
5、有云计算相关经验者优先。

岗位编号:1222
招聘部门:前瞻研究实验室
招聘岗位:生物信息学方向助理研究员(简历可发送至renfei@ict.ac.cn)
招聘人数:1
岗位职责:电子断层三维重构算法设计/光电联合成像算法设计;
岗位要求:
1、计算机专业或生物信息学专业,博士学历;
2、有扎实的计算机专业和生物信息学基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉冷冻电镜三维重构和高性能计算;
4、能够熟练运用C/C++、Java、MPI、OpenMP等开发程序,有Linux环境下的编程经验;
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
6、有电子断层三维重构、GPU编程等相关经验者优先。

岗位编号:1223
招聘部门:前瞻研究实验室
招聘岗位:多媒体计算方向助理研究员(简历可发送至renfei@ict.ac.cn)
招聘人数:1
岗位职责:从事多媒体内容处理技术与系统研发
岗位要求:
1、计算机应用专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、有多媒体内容分析与理解,或者视频压缩编码与流媒体传输技术等领域的研究开发经验;
4、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境下的编程经验;
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神。

岗位编号:1224
招聘部门:智能信息处理重点实验室
招聘岗位:知识网格方向助理研究员或副研究员
招聘人数:1
岗位职责:基础与应用研究
岗位要求:
1、博士学历;
2、有扎实的专业基础知识,能够把握相关领域的国际前沿发展趋势,在国际刊物和一流国际会议发表过论文;
3、熟悉数据库、人工智能、分布式系统、数据挖掘、语义万维网、自然语言处理、信息融合、移动计算等;

岗位编号:1225
招聘部门:智能信息处理重点实验室
招聘岗位:图像与视频处理方向工程师
招聘人数:1
岗位职责:负责研究组代码的规范化、优化、bug调试、版本管理和使用控制等;原型演示系统开发:包括界面设计、外围功能等;协助或指导研究生进行不同平台间代码的移植;嵌入式设备(如手机)上的代码移植和相关演示系统开发;有关算法的并行化加速(比如多核、GPU加速)等。
岗位要求:
1、计算机专业或软件工程专业,硕士以上学历;
2、有扎实的计算机专业基础知识,对软件开发和工程有浓厚兴趣;
3、熟悉图像处理、计算机视觉、模式识别、机器学习等相关领域知识;
4、有较多软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
5、有较强的独立开发能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
6、有生物特征识别、智能视频监控分析等相关经验者优先。

岗位编号:1226
招聘部门:集成应用中心
招聘岗位:大规模信息与服务系统总体技术方向助理研究员
招聘人数:2
岗位职责:综合分析行业或具体应用需求,结合平台技术、网络技术、数据管理技术和集成技术设计总体方案,并辅助组织或主持项目实施。
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识和丰富的实践经验,热爱工程,能够把握相关领域的国际前沿发展趋势,对大系统有浓厚兴趣;
3、熟悉计算机体系结构、网络和存储系统、并行及分布式文件系统、分布式键值存储系统;
4、熟悉云计算/虚拟机/物联网/海量数据处理与数据挖掘/网络与信息安全等领域的一项或几项;
5、有大型软件系统需求分析、规划设计和工程管理经验,有Linux环境下系统开发经验;
6、有较强的独立科研能力,良好的书面表达能力,良好的团队合作意识和组织能力,较强的沟通能力,以及敬业和钻研精神;
7、有数据中心、云计算、存储系统、文件系统、数据库系统设计经验者优先。

岗位编号:1227
招聘部门:集成应用中心
招聘岗位:大规模数据管理与应用方向实习研究员/助理工程师
招聘人数:2
岗位职责:研究结构化、非结构化和半结构化以及混合结构大规模数据的管理技术及其应用服务,并根据具体的行业和项目需求进行系统设计和工程实现。
岗位要求:
1、计算机专业或软件工程专业,硕士或博士学历;
2、有扎实的计算机专业基础知识和一定的实践经验,热爱工程,对行业应用有浓厚兴趣;
3、熟悉计算机体系结构、网络存储系统、并行及分布式文件系统、分布式键值存储系统;
4、熟悉云计算/虚拟机/物联网/海量数据处理与数据挖掘等领域的一项或几项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
6、有较强的独立工作能力,良好的团队合作意识,良好的沟通能力,以及敬业和钻研精神;
7、有数据中心、云计算、存储系统、文件系统、数据库系统等相关开发经验者优先。

岗位编号:1228
招聘部门:集成应用中心
招聘岗位:大规模信息服务系统开发工程师
招聘人数:2
岗位职责:大规模信息系统设计、开发、测试和工程部署
岗位要求:
1、计算机专业或软件工程专业,硕士学历;
2、有扎实的计算机专业基础知识和一定的实践经验,热爱工程,对用户体验有较深刻的理解;
3、熟悉软件工程、网络和存储设备、流行开发工具、平台、数据库和中间件等;
4、熟悉云计算/海量数据处理与数据挖掘/图像处理/地理信息系统等领域的一项或几项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
6、有较强的独立工作能力,良好的团队合作意识,良好的沟通能力,以及敬业精神;
7、有大规模信息系统设计开发经验者优先。

岗位编号:1229
招聘部门:普适计算研究中心
招聘岗位:感知计算方向副研究员
招聘人数:1
岗位职责:主要从事普适计算领域的新型人机感知界面、移动定位相关的核心技术、新型终端及其应用系统的研发,带领团队承担和完成国家与科学院重大研究计划项目。
岗位要求:
1、计算机相关专业,具有博士学位;
2、具有良好的感知计算技术相关的基础理论知识和较高学术水平,发表过IEEE/ACM Transactions 或相当级别的论文;
3、参加过有影响力的相关大型研究项目;
4、有较高水平的英语应用水平,能够用英语开展对外项目合作;
5、有5年以上的领域从业经历,对普适计算领域有前瞻性战略眼光;
6、取得海外博士学位者、有海外留学经历或取得海外助理教授职务者优先;

岗位编号:1230
招聘部门:先进计算机系统实验室
招聘岗位:数据存储方向助理研究员(简历请发至xj@ncic.ac.cn)
岗位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心存储系统和海量数据存储系统等相关研究工作,包括云存储服务的设计和开发、数据中心存储系统的设计和开发、海量数据存储系统的设计和开发等。协助指导研究生。
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、网络存储系统、并行及分布式文件系统、分布式键值存储系统;
4、熟悉云计算/虚拟机/物联网/海量数据处理与数据挖掘等领域的一项或几项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
7、有数据中心、云计算、存储系统、文件系统、数据库系统等相关经验者优先。

岗位编号:1231
招聘部门:先进计算机系统实验室
招聘岗位:数据存储方向研发工程师(简历请发至Xj@ncic.ac.cn)
岗位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心存储系统、云存储服务、海量数据存储系统等方向的研发工作。
岗位要求:
1、计算机专业或软件工程专业,本科以上学历;
2、有扎实的计算机专业基础知识,熟悉计算机系统结构、网络存储系统、并行及分布式文件系统、分布式键值存储系统;熟悉数据结构和算法;
3、有较强的编程能力,有大型软件系统开发经验;
4、能够熟练运用C/C++、Java等开发程序,熟悉Linux开发环境或Window开发环境
5、具有良好的团队合作意识,较强的沟通能力,以及敬业和钻研技术的精神;
6、有数据中心、云计算、存储系统或文件系统软件开发经验者优先。

岗位编号:1232
招聘部门:先进计算机系统实验室
岗位名称:下一代数据中心与云计算助理研究员(简历可发至hourui@ict.ac.cn)
岗位职责:参与国家、科学院重大科研项目,从事下一代数据中心与云计算服务器软硬件系统相关研究工作,包括系统结构设计与模拟,FPGA/ASIC芯片设计开发,典型应用及算法分析优化,编程模型及运行时系统等。协助指导研究生。
岗位要求(条件3、4、5满足一项即可):
1、计算机或电子工程专业,博士学历;
2、有扎实的专业基础,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系机构、微体系结构,熟悉一到两种主流处理器模拟器,熟悉linux内核,熟悉性能分析方法;
4、深入理解电路、芯片的基础理论和方法,熟练掌握FPGA、ASIC芯片的设计流程及工具;
5、熟悉云计算/虚拟机/物联网/海量数据处理与数据挖掘等领域的一项或几项;
5、有数据中心、云计算、低功耗等相关经验者优先;

岗位编号:1233
招聘部门:先进计算机系统实验室
岗位名称: FPGA/IC设计工程师(简历请发给cmy@ict.ac.cn)
岗位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心可扩展访存体系相关的研究工作。包括新型存储控制器、存储通道、存储模块的设计和研发。
岗位要求:
1、计算机专业或电子工程专业,硕士及以上学历;
2、熟悉操作系统基本原理;了解计算机体系结构和微体系结构原理及实现; 3、具有扎实的数字电路理论基础,具有数字集成电路设计经验,熟悉数字集成电路设计全流程及主流工具;有实际FPGA/IC系统开发经验。
4、有较强的团队合作精神,工作积极主动,有上进心,并善于沟通和交流。

岗位编号:1234
招聘部门:先进计算机系统实验室
岗位名称: 系统软件工程师(简历请发给cmy@ict.ac.cn)
岗位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心可扩展访存体系相关的研究工作。主要包括操作系统核心的内存管理、访存体系优化以及存储控制器固件的开发。
岗位要求:
1、计算机专业或软件工程专业硕士及以上学历;
2、熟悉计算机体系结构和微体系结构原理,
3、熟悉操作系统基本原理,了解操作系统核心的层次结构,具有Linux核心程序开发经验。
4、 有较强的团队合作精神,工作积极主动,有上进心,并善于沟通和交流。

岗位编号:1235
招聘部门:先进计算机系统实验室
岗位名称: 系统结构方向助理研究员(简历请发给cmy@ict.ac.cn)
岗位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心可扩展访存体系相关的研究工作。主要包括新型计算机访存微体系的设计、新型存储器件应用,可扩展访存协议的研究和设计,协助课题申请、课题管理和研究生指导。
岗位要求:
1、计算机专业或电子工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、操作系统和编译原理和方法。
4 熟悉数字电路、数字系统设计的基本原理和方法
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;

岗位编号:1236
招聘部门:先进计算机系统实验室
招聘岗位:系统软件(操作系统)方向助理研究员(简历可发送至jfzhan@ncic..ac.cn)
岗位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心分布式系统软件或操作系统等相关研究工作,包括云数据中心系统软件中的文件系统、IO系统、运行时系统等设计和开发,和相关软件设计方法的研究等。协助指导研究生、申请课题。
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构或操作系统或者软件工程理论;
4、熟悉云计算中的PaaS或IaaS、虚拟机和VMM、Linux kernel、大型软件工程项目等中的至少一项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验,或者,在软件工程与理论方法方面有优秀的研究成果;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
7、有数据中心、云计算等系统软件(操作系统)或国家重大课题等相关经验者优先。

岗位编号:1237
招聘部门:先进计算机系统实验室
招聘岗位:分布式系统研究组助理研究员(简历可发送至jfzhan@ncic..ac.cn)
岗 位职责:参与国家、科学院以及横向的重 大科研项目。具体工作为:开展数据密集型服务或者数据分析类 Benchmark; 数据中心范围profiling, tracing研究;数据密集型计算性能评 价,性能瓶颈诊断,故障诊断研究与开发系。
岗位要求:
1、计算机系统结构或计算机软件专业,具有博士学位;
2、熟悉Linux操作系统,熟悉主流的商用和科学计算Benchmark;
3、熟悉常用的profiling工具,熟悉Hadoop类系统;
4、发表过高水平英文论文2篇;
5、有大型系统开发经验,有参与申请项目的经验,指导过硕士研究生开展卓有成效的工作。

岗位编号:1238
招聘部门:先进计算机系统实验室
招聘岗位:数 据中心计算方向助理研究员
岗位职责:参与国家、科学院以及横向的重大科研项目。具体工作为:开展数据中心应用 instruction, memory, I/O trace研究,关注于如何向architecture 社 区贡献公共域知识;开展数据中心应用性能分析方 法研究,从性能计数器,操作系统、应用多个维度研究数据中心应用的性能分析、瓶颈定位和优化方法。开发面向system communities 开源的系统。
岗位要求:
1、计算机系统结构或计算机软件专业,具有博士学位;
2、熟悉Linux操 作系统,熟悉主流的商用和科学计算Benchmark;
3、熟悉常用的profiling工 具和模拟器系统;
4、发表过高水平英文论文2篇;
5、有大型系统开发经验。

岗位编号:1239
招聘部门:数据存储中心
招聘岗位:存储系统助理研究员
招聘人数:2
岗位职责: 负责存储系统架构研究; 面向存储系统的计算机体系结构研究;云计算与云存储基础架构核心技术研究; 先进文件系统核心技术研究。
岗位要求:
1、计算机专业或软件工程专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数
量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、网络存储系统、并行及分布式文件系统、分布式键值存储系统;
4、熟悉云计算/虚拟机/物联网/海量数据处理与数据挖掘等领域的一项或几项;
5、有系统级软件开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或
Window环境下的编程经验;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
7、有数据中心、云计算、存储系统、文件系统、数据库系统等相关经验者优先。

岗位编号:1240
招聘部门:数据存储中心
招聘岗位:存储系统研发工程师
招聘人数:2
岗位职责: 负责存储系统研发工作; 面向存储系统的计算机体系结构研究;
岗位要求:
1、计算机专业或软件工程专业,硕士学历;
2、有扎实的计算机专业基础知识及系统级软件开发经验,能够熟练运用C/C++、Java等
开发程序,有Linux环境或Window环境下的编程经验;
3、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精
神;
4、有数据中心、云计算、存储系统、文件系统、数据库系统等相关经验者优先。

岗位编号:1241
招聘部门:科研支撑中心 EDA中心
招聘岗位: 集成电路后端设计工程师(简历可发送至bjzheng@ict.ac.cn)
招聘人数:1
岗位职责:集成电路后端设计,包括布局规划,电源规划,时钟树综合,电压降和电迁移分析,物理验证。
岗位要求:
1、计算机或微电子专业,硕士及以上学历
2、熟练使用Linux或Unix操作系统;
3、熟悉后端设计流程,熟悉后端设计工具,使用过Synopsys工具者优先;
4、有tap-out经验者优先;

岗位编号:1242
招聘部门:科研支撑中心
招聘岗位:计算所IT支撑环境工程师(简历可发送至htwu@ict.ac.cn)
招聘人数:1
岗位职责:信息系统的建设及运维;网络的运维;信息化建设。
岗位要求:
1、计算机相关专业本科及以上学历,或从事过IT系统运维工作二年以上;
2、具备服务器管理、虚拟化技术及网络方面的基础知识,或具备类似系统的运维经验;
3、有责任心,具备分析问题解决问题的能力,有较强的学习能力。

岗位编号:1243
招聘部门:网络数据科学与工程研究中心
招聘岗位:网络数据科学方向助理研究员
招聘人数:1
岗位职责:网络科学与社会计算基础理论,大规模网络信息处理模型、理论与算法研究;
岗位要求:
1、计算机软件相关专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉海量数据处理、数据挖掘、复杂网络、信息检索等一个或多个领域,具有相关领域的研究经历,具备较好的数学基础;
4、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神。

岗位编号:1244
招聘部门:网络数据科学与工程研究中心
招聘岗位:大规模网络信息检索与挖掘方向助理研究员
招聘人数:1
岗位职责:统计学习理论,信息检索、数据挖掘相关的模型、理论与算法研究;
岗位要求:
1、计算机软件相关专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉海量数据处理、数据挖掘、复杂网络、信息检索等一个或多个领域,具有相关领域的研究经历,具备较好的数学基础;
4、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
5、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神。

岗位编号:1245
招聘部门:网络数据科学与工程研究中心
招聘岗位:海量数据处理方向助理研究员
招聘人数:1
岗位职责:分布式海量数据处理系统体系结构、优化理论与关键技术研究;
岗位要求:
1、计算机软件相关专业,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算机体系结构、网络存储系统、并行及分布式文件系统、分布式键值存储系统;
4、熟悉云计算/海量数据处理/分布式系统等领域的一项或几项;
5、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神;
7、有数据中心、云计算、存储系统、文件系统、数据库系统等相关经验者优先。

岗位编号:1246
招聘部门:网络数据科学与工程研究中心
招聘岗位:网络舆情与垂直搜索方向研究实习员/助理工程师
招聘人数:7
岗位职责:大规模网络舆情分析预警平台、互联网信息挖掘与深度搜索系统及关键技术研发
岗位要求:
1、计算机软件相关专业,硕士以上学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的技术发展趋势;
3、有大型软件系统开发经验,能够熟练运用C/C++、Java等开发程序,有Linux环境或Window环境下的编程经验;
4、熟悉设计模式和算法,具备命令行下开发经验;
5、具备海量数据处理、数据挖掘或信息检索等一个或多个领域的技术基础和研发经历;
6、具备良好的团队合作意识,较强的沟通、学习和动手能力,以及敬业和钻研精神;
7、有数据中心、云计算、存储系统、文件系统、数据库系统等相关经验者优先。

岗位编号:1247
招聘部门:无线通信技术研究中心
岗位名称:处理器架构设计师
招聘人数:1
岗位职责:参与“面向下一代无线通信的向量基带数字信号处理器”科研工作。进行VLIW、SIMD微结构设计;多核并行扩展设计;专用指令集设计;
岗位要求:
1、计算机相关专业,博士学历
2、丰富的SoC设计经验,熟练掌握Verilog HDL
3、熟练掌握C/C++,熟练使用EDA设计验证工具如ISE/Quartus, VCS, Design Compiler;
4、有嵌入式系统设计经验,如单片机、NIOS、 ARM
5、有CPU架构设计经验最佳,如MIPS、ARM
6、熟练的英文读写能力。

岗位编号:1248
招聘部门:无线通信技术研究中心
岗位名称: IC前端设计与验证工程师
招聘人数:1
岗位职责:承担基带芯片子模块的RTL设计、仿真、优化和综合;承担基带芯片子系统的仿真验证;参与FPGA的验证和调试;编写相关的开发和验证文档;
岗位要求:
1、具有芯片前端设计基础,微电子、通信、计算机或相关专业,硕士及以上学历
2、英语六级水平,能熟练运用英文开展研发工作
3、熟悉Verilog语言和相关的EDA工具(DC、VCS、Formality、Quartus等),熟悉perl脚本语言
4、有参与成功流片的芯片项目工作背景的优先。

岗位编号:1249
招聘部门:无线通信技术研究中心
岗位名称:后端设计工程师
招聘人数:1
岗位职责:承担基带芯片的后端物理设计与实现;承担基带芯片时序、面积、功耗的优化;编写相关的物理设计文档;
岗位要求:
1、具有芯片后端设计基础,微电子、通信、计算机或相关专业,硕士及以上学历
2、英语六级水平,能熟练运用英文开展研发工作
3、熟悉Verilog语言和相关的EDA工具(ICC、DC、Primetime、Star-RCXT、Calibre、Formality等),熟悉perl脚本语言
4、有参与成功流片0.13um或更先进工艺芯片项目工作背景的优先

岗位编号:1250
招聘部门:无线通信技术研究中心
岗位名称:宽带移动通信物理层研发工程师
招聘人数:1
岗位职责:负责宽带移动通信物理层算法调研、仿真、优化;负责宽带移动通信物理层链路级浮点、定点性能评估;负责宽带移动通信物理层算法在多核DSP平台实现;参与宽带移动通信物理层与协议栈在硬件平台上的集成、联调、测试;负责相关文档、专利论文的撰写;
岗位要求:
1、具有宽带移动通信,特别是LTE系统研发经验,微电子、通信或相关专业,硕士及以上学历;
2、英语六级水平,能熟练运用英文开展研发工作;
3、熟悉linux操作系统,熟悉linux下的C语言开发流程;熟悉汇编语言;
4、有参与多核DSP开发工作背景的优先

岗位编号:1251
招聘部门:无线通信技术研究中心
岗位名称: LTE协议栈软件研发工程师
招聘人数:1
岗位职责:LTE协议栈软件控制面设计与开发;协议栈软件与物理层软件的集成调试
岗位要求:
1、通信、计算机相关专业,硕士及以上学历;
2、了解LTE通信网络原理,有相关协议栈软件工作经验者优先;
3、熟练掌握C语言编程;有1年以上相关工程经验;
4、熟悉Linux或VxWorks操作系统,熟悉Linux/VxWorks C语言开发流程;
5、有较强的工作责任心和团队合作精神;

岗位编号:1252
招聘部门:无线通信技术研究中心
岗位名称:网关系统研发工程师
招聘人数:1
岗位职责:研究3GPP标准协议;结合协议设计和开发标准3G/4G网关;负责网关产品的安装、配置、调试;为客户提供实施、维护、优化等专业技术服务;
岗位要求:
1、计算机、通信等相关专业,硕士及以上学历;
2、熟悉3G UMTS/LTE网络架构、核心网接口及相关信令流程,有相关工作经验者优先;
3、掌握C/C++程序设计,熟悉Linux/Unix环境编程,有一年以上相关工程经验;
4、熟悉电信协议,有电信软件开发经历着优先;
5、有较强的工作责任心、团队合作精神,学习能力强。

岗位编号:1253
招聘部门:前瞻研究实验室
招聘岗位:研究实习员/高级软件研发工程师(大规模数据计算平台)
招聘人数:1
岗位职责:负责大规模数据计算系统中关键技术的研究与实现,及结构化数据计算系统优化。
岗位要求:
1、硕士学历,计算机或相关专业毕业。
2、熟悉操作系统,分布式系统和网络计算理论,有分布式系统领域相关的研究经验。
3、掌握Java或C/C++语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java或C/C++语言的网络编程经验。
4、掌握常用数据结构与算法,有一定系统设计和分析经验;
5、熟悉数据库原理,并熟悉至少一种常用数据库,如Mysql、Oracle、DB2、SQL Server等;
6、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;具有项目管理经验。
7、熟悉分布式系统设计和开发者,熟悉Hadoop或HBase实现技术者优先。

岗位编号:1254
招聘部门:前瞻研究实验室
招聘岗位:研究实习员/高级软件研发工程师(大规模数据计算平台)
招聘人数:1
岗位职责:负责大规模数据计算系统中关键技术的研究与实现,以及分布式存储系统优化。
岗位要求:
1、硕士学历,计算机或相关专业毕业。
2、熟悉操作系统,分布式系统和网络计算理论,有分布式系统领域相关的研究经验。
3、掌握Java或C/C++语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java或C/C++语言的网络编程经验。
4、掌握常用数据结构与算法,有一定系统设计和分析经验;
5、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;具有项目管理经验。
6、熟悉分布式系统设计和开发者,熟悉Hadoop或HBase实现技术者优先。


博士后和计算所下属公司编制员工招聘启事
岗位编号:1261
招聘部门:网络技术研究中心
招聘岗位:下一代互联网监测管理方向博士后
招聘人数:1
岗位职责:从事下一代网络监测管理/云环境监控分析方向的支撑技术及其相关基础理论研究,协助指导研究生。
岗位要求:
1、博士学历,扎实的计算机网络方面的基础理论和良好的创造力;
2、具有完成高水平科研工作的能力或潜质;
3、熟练的英语听说读写等能力;
4、良好的沟通能力、组织能力、团队合作与敬业精神;
5、申请材料请提供: 一份详细简历(含个人基本情况、学习和工作经历、发表论文,科研工作及博士论文概述)。

岗位编号:1262
招聘部门:智能信息处理重点实验室自然语言组
招聘岗位:博士后
招聘人数:1
岗位要求:
1、计算机专业或软件工程专业,计算语言学或者相关方向,博士学历;
2、有扎实的计算机专业基础知识,能够把握相关领域的国际前沿发展趋势,发表一定数量和质量的科研论文,对科研有浓厚兴趣;
3、熟悉计算语言学和机器翻译、机器学习、统计自然语言处理方法的基本知识;
5、有较强的软件开发经验,能够熟练运用C/C++等开发程序,有Linux环境或Window环境下的编程经验;
6、有较强的独立科研能力,良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神,责任心强。

岗位编号:1263
招聘部门:智能信息处理重点实验室自然语言组
招聘岗位:软件开发工程师
招聘人数:1
岗位要求:
1、计算机专业或软件工程专业,本科学历;
2、有较强的软件开发经验,能够熟练运用C/C++等开发程序,有Linux环境或Window环境下的编程经验;
3、有良好的团队合作意识,较强的沟通能力,以及敬业和钻研精神,责任心强

岗位编号:1264
招聘部门:先进计算机系统实验室
岗位名称:硬件设计工程师(简历可发至hourui@ict.ac.cn)
岗位职责:参与国家、科学院重大科研项目,为新型服务器设计、开发主板,系统集成。
岗位要求:
1、本科及以上学历,计算机、自动化、电子等相关专业;
2、熟悉硬件电路设计,有数字和模拟电路设计经验;
3、熟悉电磁兼容EMI、EMC、信号完整性原理、数字电路、模拟电路以及混合电路设计;
4、能够熟练使用至少一种PCB设计软件,并且能够独立进行多层板PCB设计;
有实际产品开发经验者优先;
5、敬业合作,具有良好的协调沟通能力,具备良好的英语听说读写能力。

岗位编号:1265
招聘部门:先进计算机系统实验室
招聘岗位:数字IC设计/FPGA设计工程师(简历可发至hourui@ict.ac.cn)
岗位职责:参与国家、科学院重大科研项目,从事下一代数据中心与云计算服务器系统的开发工作,负责从事新型服务器核心芯片的设计、开发工作。
岗位要求:
1、计算机、自动化或微电子专业,硕士及以上学历;
2、熟悉Linux开发环境;了解计算机体系结构和微体系结构原理及实现;
3、具有扎实的数字电路理论基础,具有数字集成电路设计经验,熟悉数字集成电路设计全流程及主流工具;并满足以下要求中的任意一条:
a)有数字前端RTL设计经验,熟悉VHDL或Verilog语言;熟悉NC-Verilog,ModelSim,VCS等工具;
b)有丰富的综合、静态时序(STA)分析经验,熟悉相应的Cadence或Synopsys EDA工具;
c)熟悉从Netlist到GDS的设计实现,芯片级测试,ASIC物理版图,集成电路制造和工艺;熟悉相应设计工具,如ICC,SOC Encounter等;
d)熟悉QuartusII,Xilinx ISE,ModelSim SE等基本的FPGA开发工具,有实际FPGA系统开发经验者优先;
4、有较强的团队合作精神,工作积极主动,有上进心,并善于沟通和交流。

岗位编号:1266
招聘部门:先进计算机系统实验室
岗位名称:软件工程师(简历可发至hourui@ict.ac.cn)
岗位职责:参与国家、科学院重大科研项目,从事新型服务器软件相关工作,包括应用程序部署、分析与优化,数据中心及服务器系统软件环境建设,新型编程模型及运行时系统等。
岗位要求:
1. 计算机相关专业,硕士及以上学历;
2. 精通Linux内核或BIOS,精通C/C++或者Java语言,熟悉体系结构基本知识;
3. 具有扎实的软件理论基础和设计开发经验,具有性能分析优化的经验,并熟悉以下方向中的任意一个:云计算;物联网;虚拟化(虚拟机);海量数据处理及分析;数据中心资源管理;绿色计算;
4、有实际工作经验者优先。

岗位编号:1267
招聘部门:先进计算机系统实验室
招聘岗位:系统软件工程师 一(简历可发送至jfzhan@ncic.ac.cn)
岗 位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心系统软件的研究与开发工作。 主要包括数据密集型服务及海量数据分析场景下操作系统的结构设计,进程的执行模型和性能优化。
岗位要求:
1、计算机专业或 软件工程专业硕士及以上 学历;
2、熟悉计算机体 系结构和微体系结构原 理,
3、熟悉操作系统 基本原理,了解操作系统 核心的层次结构,具有Linux核心程序开发经验。
4、 有较强的团队合作精神,工作积极主动,有上进心,并善于沟通和交流。

岗位编号:1268
招聘部门:先进计算机系统实验室
招聘岗位:系统软件工程师二 (简历可发送至jfzhan@ncic.ac.cn)
岗 位职责:参与国家、科学院以及横向的重大科研项目,从事下一代数据中心系统软件的研究与开发工作。主要包括数据中心计算测试床并行实验管理系统及运行时环境的研究与开发。
岗位要求:
1、计算机专业或 电子工程专业,博士学 历;
2、有扎实的计算 机专业基础知识,能够把 握相关领域的国际前沿发展趋势,对科研有浓厚兴趣;
3、熟悉计算机体 系结构、操作系统和编译 原理和方法。
4 有并行与分布式系统开发经验(精通Hadoop尤 佳)。
6、有较强的独立 科研能力,良好的团队合 作意识,较强的沟通能力,以及敬业和钻研精神;

岗位编号:1269
招聘部门:先进计算机系统实验室
招聘岗位: 网络管理员
招聘人数:1
岗位职责:管理实验室网络系统;购置、配置和管理各种计算机设备;协助科研小组 构建计算机或网络实验系统;机房管理,网 站维护,数据备份;配合所级网管,执行安全规定。
岗位要求:
1、计算机及相关专业专科以上学历;
2、对计算机网络、云计算和数据中心计算机系统有一定的 了解;
3、对基本计算机设备的市场价位有一定的了解;
4、工作细致,责任心强,具有良好的沟通能力、团队精神 和服务意识;
5、具有一定的英文读写能力;
6、有工作经验者优先。

岗位编号:1270
招聘部门:智能信息处理重点实验室
招聘岗位:智能系统集成与开发工程师 (计算所下属公司编制,应聘简历请发送至sqjiang@ict.ac.cn)
岗位职责:参与智能系统的设计和分析。主要从事智能系统的集成与开发,包括技术设计、系统集成与调试、编码测试、界面开发等;以及相关的文档撰写等。
岗位要求:
1、计算机、电子相关专业本科以上学历,硕士优先;
2、3年以上软件开发工作经历,熟悉常用数据结构与算法;精通C++编程,熟悉Java等编程语言;具备独立编程的能力和良好的编程风格;具有丰富的系统集成经验,有架构设计经验者更佳,熟悉网络编程接口、TCP/IP和socket编程、多线程处理、及内存管理等;
3、了解自然语言理解、模式识别、人机交互等智能处理技术者优先;
4、 吃苦耐劳,工作踏实认真,善于学习、积极主动、责任心强、严谨细致,具有较强的团队沟通和协作能力。

岗位编号:1271
招聘部门:前瞻研究实验室
招聘岗位:博士后/项目组长(弹性计算系统方向)
招聘人数:1
岗位职责:协助课题负责人完成项目管理工作,负责大规模分布式资源管理核心技术研究,协助培养研究生。协助申请相关国家科技计划项目。
岗位要求:
1、博士学历,计算机或相关专业毕业。
2、熟悉操作系统,分布式系统和网络计算理论,有分布式系统领域相关的研究经验和成果。良好的学术造诣,在重要国际会议和学术期刊上发表一定数量的论文。
3、具有主持研究项目的能力和经历,曾参与国家重要/重大项目/课题的经验。
4、熟练的英语听说读写能力。
5、具备良好的领悟能力,对工作持积极主动、精益求精的态度,有强烈的责任心。
6、对本领域科学问题具有敏锐的洞察力和强烈的创新意识。
7、具备良好的沟通和组织能力,以及良好的团队意识和合作精神。
8、主持过或作为主要人员参加过省部级以上研究课题/项目者优先考虑。

岗位编号:1272
招聘部门:前瞻研究实验室
招聘岗位:高级软件研发工程师(弹性计算系统方向)(简历发送至char@ict.ac.cn)
招聘人数:3
岗位职责:负责大规模分布式系统资源调度、面向数据密集型负载的磁盘I/O性能优化,以及系统评测等技术的研究与开发。
岗位要求:
1、硕士学历,计算机或相关专业毕业。
2、熟悉操作系统,分布式系统和网络计算理论,有分布式系统领域相关的研究经验。
3、掌握Java或C/C++语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java或C/C++语言的网络编程经验。
4、掌握常用数据结构与算法,有一定系统设计和分析经验;
5、熟练的英语听说读写能力。
6、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;

岗位编号:1273
招聘部门:前瞻研究实验室
招聘岗位:软件开发工程师(弹性计算系统方向)(简历发送至char@ict.ac.cn)
招聘人数:3
岗位职责:负责“凌云”相关软件模块的开发工作以及对“凌云”软件开源代码的维护工作。
岗位要求:
1、本科学历,计算机或相关专业毕业。
2、掌握Java或C/C++语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java或C/C++语言的网络编程经验。
3、掌握常用数据结构与算法,有一定系统设计和分析经验;
4、熟练的英语听说读写能力。
5、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;

岗位编号:1274
招聘部门:前瞻研究实验室
招聘岗位:软件开发工程师(大规模数据计算平台)(简历发送至char@ict.ac.cn)
招聘人数:1
岗位职责:负责大规模数据计算系统中关键技术的实现。
岗位要求:
1、本科学历,计算机或相关专业毕业。
2、掌握Java语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java语言的网络编程经验。
3、掌握常用数据结构与算法,有一定系统设计和分析经验;
4、熟悉数据库原理,并熟悉至少一种常用数据库,如Mysql、Oracle、DB2、SQL Server等;
5、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;
6、熟悉分布式系统设计和开发者,熟悉Hadoop或HBase实现技术者优先。

岗位编号:1275
招聘部门:前瞻研究实验室
招聘岗位:软件开发工程师(大规模数据计算方向)(简历发送至char@ict.ac.cn)
招聘人数:1
岗位职责:负责大规模数据计算系统中的用户管理及访问控制等工具的开发。
岗位要求:
1、本科学历,计算机或相关专业毕业。
2、掌握Java语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java网络编程经验。拥有Java实际项目开发经验者优先;
3、掌握常用数据结构与算法,有一定系统设计和分析经验;熟悉数据库原理。
4、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;
5、熟悉分布式系统设计和开发者优先;拥有网络安全相关开发经验者优先;熟悉或者了解Hadoop、HBase者优先。

岗位编号:1276
招聘部门:前瞻研究实验室
招聘岗位:Web开发工程师(简历发送至char@ict.ac.cn)
招聘人数:2
岗位职责:负责弹性计算系统和大规模数据计算平台的Web前端逻辑开发
岗位要求:
1、本科学历,计算机或相关专业毕业。
2、掌握JavaScript/Java、HTML语言开发技能和Linux操作系统使用,有Web UI设计和Web应用实际开发经验者优先考虑;
3、掌握AJAX、Hibernate、Spring等框架的运用;
4、熟悉面向对象的设计模式,掌握常用数据结构与算法,有一定系统设计和分析经验;
5、熟悉至少一种应用服务器的使用(Tomcat,WebLogic,WebSphere,JBoss,Resin);
6、熟悉或者了解Hadoop、HBase者优先。

岗位编号:1277
招聘部门:前瞻研究实验室
招聘岗位:系统评测工程师(简历发送至char@ict.ac.cn)
招聘人数:2
岗位职责:负责软件版本功能及性能测试、开发及测试平台维护、文档管理
岗位要求:
1、本科学历,计算机或相关专业毕业。
2、至少1年以上的软件测试(包括性能测试)工作经验;
3、掌握Java语言开发技能和Linux操作系统使用,掌握TCP/IP网络原理以及基于Java网络编程经验。
4、熟悉测试工作流程,能根据需求文档,设计文档编写测试计划、测试用例以及测试报告;
5、具有良好的学习能力、沟通能力、自我激励能力和团队精神,能够承受一定的工作压力;
6、拥有Java大型分布式系统测试经验者优先。

相关待遇:
1、提供富有竞争力的薪酬待遇,完善的社会保险、住房公积金、补充医疗保险、工作餐补助、学习休闲津贴等福利保障;
2、带薪年假、年度健康体检、完善的员工职业发展体系和培训体系;
3、确保为非北京生源应届毕业生解决户口,可为具有博士学位或在我所工作满三年的硕士员工配偶解决北京户口,并可为符合条件的外地户口员工办理进京;
4、申请出国留学基金并到海外名校访问、深造的机会;
5、丰富多彩的员工集体活动,如体育健身活动、集体疗养、年终联欢等。

联系方式:
通讯地址:北京市海淀区中关村科学院南路6号
邮编:100190
联系部门:人力资源处
简历投递邮箱:hr@ict.ac.cn
网址:www.ict.ac.cn
联系方式:
通讯地址:北京市海淀区中关村科学院南路6号
邮编: 100190
联系部门:人力资源处
简历投递邮箱:hr@ict.ac.cn
网址:www.ict.ac.cn

2011年11月13日星期日

幽默一则

此时此刻,我想起一本俄罗斯作家车尔尼雪夫斯基的名著,《怎么办》

2011年11月11日星期五

DBMS Chapter21

安全与认证
任意访问控制
GRANT,REVOKE语句
还有一个很重要的方法,就是用视图屛蔽

DBMS Chapter20

物理数据库的设计调整(主要是选择索引,决定是否聚簇)
工作负载的描述
索引可以加快查詢,但会减慢更新
范围查詢用B+,等值查詢用HASH
索引自动选择工具,索引调整算法
另外还有模式的調整,比如关系的垂直分解和水平分解

DBMS Chapter19

基于完整性约束的模式求精与范式
高级约束:函数依赖
方法:模式分解(范式(Normal Form))
BCNF:
3NF:放松BCNF一点
模式分解必需无损,最好还要保持依赖
无损分解成BCNF
保持依赖分解成3NF

2011年11月10日星期四

还是爱情

经历了太多的欲望的追逐,看过了无数的权力的斗争,最后回到一个范范之辈的凡人立场,令人热泪满眶的,只有不完满的悲剧爱情,尢其是一位集万千宠爱的,公主.
如果我有机会,我会珍惜身旁的她,因为到目前为止,我相信,爱情.
----大明宮词

看过大明宫词后的第三天,我内心的巨大震撼渐渐降温,回过头看,这种巨大的感动是什么原因的?我想,是因为太平公主的炽热爱情。一个女人对一个男人的爱情,得到的却是冷淡与嘲讽。所谓怜香惜玉,被无情的击碎,悲剧的力量便扑面而来。
SHAKESPEAR说过,女人不是用来了解的,女人是用来爱的。
我第一次有了感触,当然,还是太不成熟了。

DBMS Chapter16

事务管理:并发控制和崩溃恢复
四个特点:ATOMIC,CONSISTENCY,ISOLATION,DURABILITY.
日志的使用(LOG)
并发执行的调度:加锁(strict 2PL)互斥锁,共享锁,锁的粒度(granularity)
stealing frame and non-forcing-page

ARIES Algorithm:分析,重做,反做
写优先日志,脏页表,事务表
死锁的处理:1.超时机制;2.优先级机制
幻影问题:因动态增减而产生

DBMS Chapter15

典型的关系查詢优化器
SYSTEM R
IBM System R is a database system built as a research project at IBM San Jose Research (now IBM Almaden Research Center) in the 1970s. System R was a seminal project: it was a precursor of SQL, which has since become the standard relational data query language. It was also the first system to demonstrate that a relational database management system could provide good transaction processing performance. Design decisions in System R, as well as some fundamental algorithm choices (such as the dynamic programming algorithm used in query optimization[1]), influenced many later relational systems.

DBMS Chapter14

关系操作求解:
选择:
投影:关键是去重复.标准算法是外排序然后前后比较来去重复
连接:块嵌套循环连接,索引嵌套循环连接,排序归并连接,hash连接

DBMS Chapter13 外排序

外排序算法致力于减少磁盘访问的开销.
基本思想是归并排序,而且是多路归并
如果索引是B+树,但是是非聚簇的,那么,外排序的效率是高于B+树的索引排序的

DBMS Chapter12

察詢求解概述
DBMS維护一个系统目录,里面有所有表和索引的信息.
操作符求解:索引,迭代,划分
查詢优化:流水线技术:中间结果不需实例化
下推选择.查詢优化器生成若干等价查詢求解计划,估算其代价,选出最优计划.

2011年11月9日星期三

DBMS Chapter11

静态HASH:桶数固定
可扩展HASH:維护一个指针目录,指针指向桶,如需括展,则可以括展目录,分裂桶
线性HASH:
线性哈希是一种动态扩展哈希表的方法。
线性哈希的数学原理:
假定key = 5 、 9 、13
key % 4 = 1
现在我们对8求余
5 % 8 = 5
9 % 8=1
13 % 8 = 5
由上面的规律可以得出
(任意key) % n = M
(任意key) %2n = M或 (任意key) %2n = M + n
线性哈希的具体实现:
我们假设初始化的哈希表如下:

分裂点
桶编号
桶中已存储的Key
溢出key
*
0
4,8,12


1
5,9


2
6


3
7,11,15,19, 23

Figure1

为了方便叙述,我们作出以下假定:
1:为了使哈希表能进行动态的分裂,我们从桶0开始设定一个分裂点。
2:一个桶的容量为listSize = 5,当桶的容量超出后就从分裂点开始进行分裂。
3:hash函数为 h0 = key %4  h1 = key % 8,h1会在分裂时使用。
4:整个表初始化包含了4个桶,桶号为0-3,并已提前插入了部分的数据。
分裂过程如下:
现在插入key = 27
1:进行哈希运算,h0 = 27 % 4 = 3
2:将key = 27插入桶3,但发现桶3已经达到了桶的容量,所以触发哈希分裂
3:由于现在分裂点处于0桶,所以我们对0桶进行分割。这里需要注意虽然这里是3桶满了,但我们并不会直接从3桶进行分割,而是从分割点进行分割。 这里为什么这么做,在下面会进一步介绍。
4:对分割点所指向的桶(桶0)所包含的key采用新的hash函数(h1)进行分割。

对所有key进行新哈希函数运算后,将产生如下的哈希表


分裂点
桶编号
桶中已存储的Key
溢出key

0
8

*
1
5,9


2
6


3
7,11,15,19, 23
27

4
4,12

Figure2

5:虽然进行了分裂,但桶3并不是分裂点,所以桶3会将多出的key,放于溢出页.,一直等到桶3进行分裂。
6:进行分裂后,将分裂点向后移动一位。
一次完整的分裂结束。
key的读取:
采用h0对key进行计算。
如果算出的桶号小于了分裂点,表示桶已经进行的分裂,我们采用h1进行hash运算,算出key所对应的真正的桶号。再从真正的桶里取出value
如果算出的桶号大于了分裂点,那么表示此桶还没进行分裂,直接从当前桶进行读取value。
说明:
1:如果下一次key插入0、1、2、4桶,是不会触发分裂。(没有超出桶的容量)如果是插入桶3,用户在实现时可以自己设定,可以一旦插入就触 发,也可以等溢出页达到listSize再触发新的分裂。
2:现在0桶被分裂了,新数据的插入怎么才能保证没分裂的桶能正常工作,已经分裂的桶能将部分插入到新分裂的桶呢?
只要分裂点小于桶的总数,我们依然采用h0函数进行哈希计算。
如果哈希结果小于分裂号,那么表示这个key所插入的桶已经进行了分割,那么我就采用h1再次进行哈希,而h1的哈希结果就这个key所该插入的桶 号。
如果哈希结果大于分裂号,那么表示这个key所插入的桶还没有进行分裂。直接插入。
这也是为什么虽然是桶3的容量不足,但分裂的桶是分裂点所指向的桶。如果直接在桶3进行分裂,那么当新的key插入的时候就不能正常的判断哪些桶已 经进行了分裂。
3:如果使用分割点,就具备了无限扩展的能力。当分割点移动到最后一个桶(桶3)。再出现分裂。那么分割点就会回到桶0,到这个时候,h0作 废,h1替代h0, h2(key % 12)替代h1。那么又可以开始动态分割。那个整个初始化状态就发生了变化。就好像没有发生过分裂。那么上面的规则就可以循环使用。
3:线性哈希的论文中是按上面的规则来进行分裂的。其实我们可以安装自己的实际情况来进行改动。
假如我们现在希望去掉分割点,一旦哪个桶满了,马上对这个桶进行分割。
可以考虑了以下方案:
1:为所有桶增加一个标志位。初始化的时候对所有桶的标志位清空。
2:一旦某个桶满了,直接对这个桶进行分割,然后将设置标志位。当新的数据插入的时候,经过哈希计算(h0)发现这个桶已经分裂了,那么就采用新的 哈希函数(h1)来计算分裂之后的桶号。在读取数据的时候处理类似。

DBMS Chapter10

数结构索引:ISAM OR B+(根据如何处理删除添加来区分)
ISAM是纯静态的,有所谓溢出页
B+TREE是平衡树,是动态的,叶子项是双向链表
删除可能会导致合并,插入可能会导致分裂

DBMS Chapter9磁盘和文件

首先磁盘,是有若干盘片的,盘片上有磁道,磁道分扇区。。。
存储系统不是磁盘的简单堆叠,而是组织成磁盘阵列。实现数据划分和数据冗余(提高效率和可靠性)现在是有工业标准的,叫做RAID。磁盘阵列分成若干可靠组,每组有数据盘和检验盘。
磁盘空间管理(页的抽象)
缓冲区管理(负责替换):注意的是,DBMS不采用OS的虚拟存储管理来管理磁盘
页的组织:页目录
我们认为,页由槽组成,槽即记录。所以rid=<page id,slot number>.

2011年11月8日星期二

理性思考1

作为一名研究生,有什么打算?
答:1.工作;2.读博
如果工作,为什么?答:85%的计算机系研究生就业,我随大流.
如果读博,为什么?可能是念了三年后,依旧想要钻研,不想作重复性的技术工作.
如果工作,怎么准备?
如果读博,怎么准备?
未完待续,主要问题是系统结构方象比较非主流,可参考的经验较少.
现在该作什么?答:自学本科层次计算机系课程.
本科计算机都学什么呢?
答:搜索相关信息。
pku_cs:算法分析与设计(找工作的重点考察),计算机组织与体系结构(我的专业所在),
编译原理,操作系统,数据库,linux程序设计,计算机网络,计算机图形学

DBMS Chapter8 存储与索引(indexing)

讲的是外存上的数据组织.
索引是一种在磁盘上组织的数据结构.
基于HASH的索引(对范围选择不太好)
基于树的索引(有效支持等值选择和范围选择)
聚簇与非聚簇
对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。
聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块

DBMS Chapter7:Internet Application

HTML:用于苗述文档的简单语研.是一种标记语研.
HTML不好,因为不可括展.
XML:可括展标记语研

数据密集形INTERNET应用
1.两层结构,瘦客戶端
2.三层结构,
 客戶端技术:HTML表单:HTML 表单用于搜集不同类型的用户输入。
JavaScript(脚本语研):用于浏览器监策,控制和表单合法性检查
样式表(STYLE SHEET)用于内容適配
中间层技术:通用网关接口(将HTML表单和应用程序连接),
应用服務器:java servlet(j提供动态的面向用戶的内容)
状态維护:cookies

DBMS Chapter6

嵌入式SQL:在宿主语研中使用的SQL
数据匹配机制:游标
DECLARE sinfo CURSOR FOR
SELECT S.name S.age
FROM Sailor S
WHERE S.rating>1
OPEN sinfo
FETCH sinfo TO :c_string,:c_age
动态SQL:基于用戶要求生成SQL语句


JDBC(JAVA DATABASE CONNECTIVITY)(应用程序独立于DBMS,通过引入驱动器)
import java.sql.*
加载驱动器Class.forName("    ");
连接到数据源
PreparedStatement.executeUpdate();or .executeQuery();
对返回值(一个游标ResultSet)操作

存储过程(STORED PROCEDURE):在服务器上本地执行

2011年11月7日星期一

DBMS Chapter5

SQL包括数据操作(DML),数据定义(DDL),触发器。
SELECT
FROM
WHERE
UNION(EXCEPT,INTERSECT)
SELECT
FROM
WHERE
SQL的强大在于可以嵌套查询(在WHERE后用IN 或者NOT IN)
聚集操作符(COUNT,MAX,MIN,AVG,SUM)
GROUP BY操作符
<>表示不等于
触发器(TRIGGER)和主动数据库

DBMS Chapter4,形式化查询语言

代数
选择操作符,投影操作符
并,交,差,叉积
连接(自然连接)
演算(不知所云。。。。)

突然的未来

还记得2008年9月,踏进南京大学浦口校区的时候,心里所谓的未来的计划,是好好学习,争取研究生的时候考上清华北大。
然后是大一的生活,打听消息,知道本科的时候有种情况,叫做免试推荐研究生,不用考研,就可以读研。这时候,我的未来计划就是争取大四可以成为免试研究生,而为了以免试研究生的资格进入清华北大,排名还必须很靠前。于是,我满脑子想的就是GPA,RANKING。
情况总是没有变化快,我去听了当年的声学TOP1丁然师兄的一个分享会,另外还有当年天文系去harvard读博的另一个师兄,那时候有了另一个概念,就是飞跃去美国读博。除了GPA和RANKING,还要有托福和GRE成绩。于是,我开始了背单词的岁月,现在回想起来,大一时候背单词的自己,真的很努力的感觉。
随着课程的学习和进一步的了解情况,又有了新的发现,就是南京大学电子系电子类的出国情况可以用惨淡来形容,美丽的海市蜃楼完全是因为有声学专业的华丽OFFER。但是此时的自己不愿意就此放弃,因为已经背了一年的单词,这个沉没成本代价很高。
那如何是好?转专业去声学,如此便有机会去牛校。还记得大一暑假的时候,满脑子就是转,还是不转,这是个问题。
无论如何,我最终没有转去声学。这是我第一次,follow my heart.我知道那样做的话,自己会很辛苦,关键是,自己并不喜欢acoustics.至于为什么觉得自己不喜欢,真的很难回答。
我当时的想法是,我可以拼命学,然后为南京大学电子系的飞跃创造历史,尽管机会很渺茫,但是我不见棺材不掉泪,我总是幻想着,下个学期GPA会更高,RANKING会更高。但是,实际上,GPA停止不前,RANKING也是停滞不前。
在整个过程中,我看了很多关于飞跃的文章,上过各种飞跃的网站论坛,跟很多师兄有过交流,我也因此遇见了张川,这是个转折点。
张川师兄当时在UMN读博,专业是VLSI-DSP。他告诉我,念这个专业,在美国,毕业后都是15w刀一年。我对15w刀毫无抵抗力,立马把人生目标定成了转专业从事VLSI方面的研究,因为VLSI和我自己的电子信息方向非常接近,也是这个契机,我知道了,摆在自己前面还有一条路,就是转专业到自己喜欢的方向,比如微电子,比如计算机。
同时,我也知道了faculty这条道路,也知道南京大学现在招聘教授副教授的基本情况,我的未来有有了计划,那就是去美国念VLSI的PHD,然后回南京大学做发考题。那是的自己多幼稚啊!
最终,大三结束了,所有的飞跃的硬件软件都定型了,我也认清了现实。GPA和RANKING,加上我们系的飞跃传统,我的定位只可能是美国的50名开外。既然如此,飞跃又有什么意义呢?我问自己,美国到底是什么地方吸引我了呢?或者说,也许,我从未真正决定过飞跃重洋。同时,我开始思考,自己的未来在哪里,follow my heart,我选择了转专业到计算机系统结构。
大四上,我走出了国门,来到了离家乡10000公里之外的温哥华,而此时的我,也已经卖身给了北大MPRC。我只是来转转,看看什么是飞跃重洋。
最开始的几周,都是激动而欣喜的,全英文的环境,顿时让自己有了优越感。
之后的生活,就变得像白开水一样索然,一个人,孤独,寂寞。没有选太多的课,我的生活,和博士生的生活其实没有区别。这时,我感受到了褪去神秘面纱的飞跃生活,用一个成语形容就是,甘苦自知。
坦白说,来温哥华交换的最大收获就是,为我将来可能会做的决定,去除了干扰因素。
无数飞跃或将要飞跃的人都会在飞跃总结里讲,为什么去美国,是因为去感受美国的氛围。
我曾经一度也是为了这个理由,努力上新东方,背GRE。
可是回头再看,我告诉自己,这个理由太幼稚了,太靠不住了,他只能支撑自己在美国最多一个月的时间,但是,PHD最少也要读五年,那这剩下来的岁月,是什么理由可以支撑我在异国他乡的学习和生活?在没有到温哥华交换时候的我,也是大多是在国内准备飞跃的同学,有没有想过呢?
没有,当时的我,想的最多的是刷TOEFL,GRE,GPA,RANKING,想着要发文章,想着要申专利。这是多么的可笑?
出国不是为了装逼的,如果说,几年前的我,觉得出国了,就证明自己牛逼了的话,那只能说我的视野太狭小了。
因为自己转行计算机,所以开始看计算机相关的书,了解计算机的圈子。牛人无数的CS领域,技术才是王道,或者说,抛开所有的光环,什么牛校毕业了,PHD了,种种种种,你坐下来写个算法,立马就知道斤两。

这就是所谓的观念的改变了。在我拥有过那些所谓的光鲜的光环之后,我真正开始关注自己本身的实力。不得不说,这是一个巨大的进步。可以想象,如果我最后留在南京大学念书,我的理想无非是去清华北大读博,这会是生命的浪费和内耗。
但是这个观念的转变,我已经落后了同龄人四年的时间。同龄人中本科就拥有了这些光环的人(清华北大的学生),他们在走进高校的那一刻,就清楚地知道大学的四年,不图名利,全为自己的实力。这或许是北大清华的本科生比我优秀的原因所在。
无论如何,大学四年已经过去了,已经清醒了的我,知道要做什么了。也许北大三年过后,我还是会飞跃重洋,但我确信,那是自己做的决定,有充分的理由和理性的权衡,而不是虚名一个。

关系模型

不存在实体和联系,只存在关系。
比如,student不是一个实体,他是一个关系(好像很别扭),当然,enrolled也是一个关系。
关系模式的一个实例是一个记录集合。
关系有度和基。
一个关系数据库是一个关系的集合。
完整性约束:关系内的约束,关系间的约束(外码约束)
完整性约束是强制执行的,执行细节是可选的(如外码约束涉及到更新时怎么办)
从ER模型转换成关系模型
视图的概念

DBMS Chapter2

ER模式(之后会将ER模式转换成relational 模式)
实体(Entity)集,联系(Relation)集
码约束和参与约束,
类层次
聚合:允许一个联系集参与到另一个联系集

DBMS Chapter 1

两个概念:一个是数据库,一个是数据库查询语言(如SQL)。
大数据的存取不能用操作系统文件的形式,而用DBMS。
DBMS的三层抽象:概念模式,物理模式,外模式(针对用户的,可以有多个)。
数据库的操作:查询(Query),插入,删除,修改。
概念:事务(Transaction),事务的并发执行和加锁协议,系统崩溃和日志。
与数据库打交道的人:数据库实现者,数据库管理者(DBAdministrator),应用开发者,终端用户.

IBM中国芯片设计中心


IBM中国芯片设计中心招聘Logic Design/Verification/Backend design实习生 

Location : Beijing/Shanghai 

=============Requirement============ 

This time we wish you have the following skills below (no priority, not all) 

Required: 
1. Digital logic implementation (Verilog/VHDL) and functional verificati on (S 
ystemVerilog/SystemC) on the basis of the target system specification 
2. SoC design methodology: Knowledge of SoC integration, modeling and verifica 
tion at different abstract level 
3. Backend design methodology: Knowledge of synthesis, timing, DFT, floorplann 
ing, physical design, signal/power integrity, and other backend activities. 
4. Working knowledge and hand on coding experience in the following programmin 
g: Perl, Shell script. 
5. Good trouble shooting and debugging skills to find the root cause 
6. Could work full-time at least 4 days per week from now on 
7. Graduate in 2011 or later 

Optional: 
1. Experience in DDR or PCIE or USB or Ethernet application will be a plus 
2. Familiar with OVM/VMM/AVM verification methodology will be a plus 
3. Good software background and strong C/C++ skill is a significant plus 
4. Good English/communication skill and willingness to work with a global team. 


=============How to apply========== 
In order to improve the efficiency of review/indexing, please pay attention to 
 the format of application: 

Please send your Chinese and English resume in ONE word/pdf file with your nam 
e (in Chinese) as the file name to  
ibmges_campus@sina.com  
with subject "[Intern Recruit]YourName_University_Grade Number", such as  
"[Intern Recruit] 张三_上海交大_研二" 

IBM中国研究院系统组

标  题: IBM中国研究院系统组实习生招聘 
发信站: 自由空间 (Mon Oct 31 11:40:51 2011), 站内 

工作职责: 
    计算机系统虚拟化相关探索及开发 

招聘要求: 
    (1)    计算机、电子相关专业,硕士或博士生在读; 
    (2)    每周工作三天以上,可连续在职三个月以上; 
    (3)    熟悉Linux平台C语言开发环境; 
    (4)    有一定计算机体系结构知识基础。 
满足以下条件中一项以上者优先: 
    (1)    熟悉计算机系统虚拟化技术; 
    (2)    有大型open source项目代码阅读经验; 
    (3)    熟悉Linux平台设备驱动原理与实现; 
    (4)    能长期在职。 
     
    有意者请致信 zhyu at cn dot ibm dot com. 邮件题目请注明“实习生应聘”。谢谢! 
-- 
——“德军正在向南推进,你们可能会被包围的!” 
——“我们是伞兵,本来就应该被包围。” 

美国多核技术有限公司

美国多核技术有限公司(http://www.multicorewareinc.com)是一家高技术公司,致力
于为高性能计算应用提供基于多核处理器和众多核处理器的异构多核系统的软件和系统集成方案。公司的主要服务对象包括世界级的大公司(比如美国AMD公司)和研究机构,应用领域涵盖国防、航天、生物信息学、生命科学、图像处理、科学计算以及金融服务等。

公司的核心团队在对称多处理、多核/众多核硬件开发以及多线程软件开发方面拥有极其
丰富的经验。比如,首席技术官-胡文美(Wen-Mei Hwu)教授,是国际电气电子工程师学会院士(IEEE fellow)、美国计算机协会院士(ACM fellow),现任美国伊利诺伊大学厄本那香槟分校 (UIUC)协调科学实验室电气与计算机工程AMD创始人Jerry Sanders讲座教授(Walter J. Sanders III-Advanced Micro Devices EndowedChair )、微软和英特尔联合资助的通用并行计算研究中心联合主任兼世界上第一个英伟达(NVIDIA)CUDA卓越中心首席研究员。胡教授是世界顶级的并行处理器架构与编译器专家,他领导的实验室是世界最大的多核并行处理器
编译器研究团队,有超过20年的编译器、并行算法及工具软件研究经验,超过三年的CUDA开发教育与培训经验,并在视频处理与视觉计算上有资深经验。胡教授受聘为包括英特尔、超微(AMD)、英伟达(NVIDIA)在内的世界著名的处理器制造商的技术顾问。现并担任美国下一代千万亿级计算机-蓝水系统的首席研究员。

公司的首席运营官、工程副总裁 - Curtis Davis,在多核计算、网络通信、图形及半
导体领域有超过20年的管理、工程与运营经验。职业生

涯中曾研发7款不同的多核处理器,包含多达512个处理器核的系统。作为美国奥加公司
(AGEIA Technologies)的共同创始人,曾研发世界上

第一块用于实时加速游戏物理仿真的多核处理器(PPU)及相关软件系统PhysX。在奥加
公司被英伟达收购后、任职英伟达PhysX副总裁期间曾领

导世界最大的CUDA开发团队。

公司的工程总监兼中国区总经理 - 张立华博士曾先后担任美国奥加公司软件微码与硬件
内容总监、美国英伟达公司高级经理,期间直接负责领

导包括PPU PhysX、CUDA PhysX在内的一系列并行软件与系统的研究与开发,并拥有相关
美国专利多项。他在计算机视觉与模式识别、视频与图

像处理、并行算法与软件设计、复杂并行系统性能分析与优化等领域有资深经验

为开拓亚太区市场,我们公司决定在中国成立全资子公司,与总部的研发部门一起,共
同承担关键产品、项目和技术的研发工作。

资料:AMD和Multicoreware(美国多核)团队帮助开发人员优化OpenCL在AMD Fusion
APU (融合加速处理器)上的使用美国多核公司

(Multicoreware)在多核与异构计算环境的软件解决方案和工具开发中处于业界领先地位
。AMD公司今天宣布了与该公司的一项新的合作,旨在共

同开发一套先进的OpenCL优化工具。这套工具的开发,将会大大加快开发人员设计与优
化运行于并完全利用AMD Fusion APU(AMD融合加速处理

器)的独有处理能力的软件。“加速并行处理器(APU)意味着可移动设备的计算能力达到
了一个史无前例的水平,并且多核公司正在开发的这套

工具将使得应用程序开发者用更少的努力就可达到这样的高性能,” AMD公司的负责融
合经验的副总裁Manju Hegde说,“我们和多核公司的合

作标志着在通向广泛采用OpenCL的产业道路上创造了另一个里程碑,因为我们通过给程
序开发人员配置必要的工具来创建包含从消费电脑直到

高性能计算领域的创新性的下一代应用软件。”

美国多核技术的首席技术官,胡文美教授说:“我们使用AMD设计的产品是专门用来解决
目前软件生态系统所面临的重要开发难题,例如最大化

计算利用率,高效的处理数据转移以及减小内核之间的依赖关系等。通过使用我们的这
些改进工具,开发者将能够更容易地优化运行于强大的

异构与多核心架构上的应用程序,并且充分利用可编程平台。OpenCL是一个非常重要的
工业标准编程环境,它使得开发者只需关注应用,而不

必关注芯片的具体架构。我们预测这些工具软件将会带来富有影响的创新,以及随之而
来的一些令人难以置信的新用途。”

AMD和美国多核技术公司一起致力于继续推动OpenCL行业规范的广泛采用。这个高级工具
集将支持所有相关供应商的硬件,从而帮助OpenCL在异

构计算、APU(加速处理器)、独立的CPU(中央处理器)计算与GPU(图形处理器)计算
等不同系统上的广泛部署。


现在各大学招聘以下职位(所有职位均包括全职和实习)
1. C/C++软件工程师
岗位需求:
a. 计算机、电子、信息、通讯等相关专业的本科生、研究生
b. 良好的C/C++编程能力和编程规范
c. 熟悉Windows/LINUX环境下的多线程/进程/多核编程
e. 熟练的英语口语和书面交流能力
f. 优先考虑因素:熟悉GPU异构编程、编译器理论、图像视频处理、并行计算等

2. 软件测试工程师
岗位需求:
a. 计算机、电子、信息、通讯等相关专业的本科生、研究生
b. 良好的C/C++编程能力和编程规范
c. 良好的测试素养
d. 熟练的英语口语和书面交流能力

3. 技术支持工程师
岗位需求:
a. 计算机、电子、信息、通讯等相关专业的本科生、研究生
b. 良好的C/C++编程能力和编程规范
c. 良好的测试素养
d. 良好的沟通能力
e. 熟练的英语口语和书面交流能力

工作地点:北京, 长春
另外,公司招聘部分实习生

以上所有职位,能力和薪酬直接挂钩,公司提供同行业竞争力的待遇。

注: 我们将会在适当的时候择优选送业务突出的优秀员工到美国总部接受培训或工作一
定时间,从而更好地加强公司内部的文化与业务交流。

2011年11月6日星期日

刘未鹏不是盖的

Joel Spolsky曾经感叹:招聘难,难于上青天(此处笔者稍加演绎:))。他有两个辛辣但不乏洞察力的断言:真正的牛人也许一辈子就投大概4次简历,这些家伙一毕业就被好公司抢走了,并且他们的雇主会给他们不赖的待遇,所以他们也不想挪窝。(刚刚去世的Dennis Ritchie就是这样一个人)而“人才”市场上能找到的大多都不是什么人才。招到这帮人轻则费钱重则把你公司搞挂。
诚然,也许没有哪个行业像IT行业这样,无形资产占据公司的绝大多数资产。拒坊间传言比尔·盖茨就曾经说过类似这样的话:只要允许我带走100个人我可以再造一个微软。这话没搜到原版出处,但是从一个侧面反映了IT公司当中智力资产所占的比例之重。
所以一个自然的推论就是,招聘也许是一个公司决策当中最最重要的一个环节。Joel Spolsky把他在这方面的观察,体会和洞见集结成了一本小册子《Smart and Gets Things Done》,开篇就挑战“产品是公司成败的关键”这个传统观念,他认为创造最适合工程师生活的环境,留下最优秀的人才才是最先最重要的一步,接下来好的产品是水到渠成的事情。国内iapp4me.com创始人郝培强正是这个理念,所以他在微博上说
我们是小公司,工资开的不高,也不招太多的人,但是电脑都是iMac27,iMac21,Macbook pro15,基本上比很多大公司都好多了。软件没盗版,刚才photoshop的正版我也收了。中午管饭,公司备伞。哈哈。节日假正常放,从不加班,早晨11点上班,下午6点下班。我是有资格说某些大公司的员工苦逼的。
事实上,米国找个人尚且难成这样,搞得Joel还费心费力写本书语重心长地劝企业们要善待好工程师,国内找个人更是难上加难,国内高质量问答社区知乎创始人周源就曾经在知乎上分享他呕心沥血的招人历程,看完真是让人慨叹这年头找个靠谱的人多不容易(这条知乎问答还有很多精彩的跟帖):
其实从 08 年到现在,我一直想这事能不能有点窍门,或者是实用的方法,结论是几乎没有。我用过的大家都用的方法:
  • 在水木上发贴子(有点效果)
  • 在蓝色理想上发贴子(无效)
  • 在技术邮件组里发贴子(无效)
  • 买 51job/智联 最便宜的服务(有点效果)
  • 给所有可以想到的人打电话,请他们推荐(无效)
  • 给所有和你讨论过创业,喝过点小酒的人打电话(无效)
  • 约前同事私下谈(有效)
我用过的大家可能没有用的方法:
  • 上 twitter,看 XXX 的 follower,一个一个看,看他们的 twitter,博客,Google Reader 分享,想办法搞到邮件,联系,半夜电话骚扰。
  • 上豆瓣,前端后端挑几本重量级的书,去找想看,看过,正在看这本书的人,一个一个看,看他们的活动,博客,Google Reader 分享,想办法搞到邮件,联系,半夜电话骚扰。
  • 找同事,问他们都看什么技术博客,想办法搞到邮件,联系,半夜电话骚扰。
正是这样的不容易,才有不少公司走内部培养的办法,这里的逻辑是:一上来就招到靠谱的人太难了,但找一块靠谱的璞玉然后雕琢雕琢相对就简单很多。这倒是个办法,但这样做的人难免就陷入了纠结:培养好了,人跑了怎么办。这也不能怪招聘的公司,的确是人之常情。其实解决的办法也很简单,培养的时候进行适当引导,让员工发挥自己的主动学习能力,这样不但人得到更多成长,公司也不会觉得投入太多患得患失。所谓师傅领进门修行在个人。
但是,这仍然还是没有解决根本的问题,就是招聘真的很困难。应聘者固然觉得自己是在“海投”,大海捞针一般。而招聘者何尝不也是这种大海捞针的感觉。这就好比两个人谈恋爱,都想和对方好上,但是偏偏就聊不到一块去。
招聘真的很困难。以至于招聘者每年需要绞尽脑汁出新笔试题,以免往年的笔试题早就被人背熟了。出题很费脑子,要出的不太简单也不太难,能够滤掉绝大多数滥竽充数的但又要保证不因题目不公平而滤掉真正有能力的,要考虑审题人的时间成本就只能大多数用选择题,而选择题又是可以猜答案的(极少有人会在选了答案之后还敢在空白的地方写为什么选某答案的原因的)。更悲催的是,有些题目出的连公司的员工们自己都会做错(真的是员工们做错了吗?还是题目本身就出错了?)
笔试完了之后如果还没有被鄙视就要进入面试环节,姑且不说笔试题的种种弊端,就说面试环节,短短几个小时的面试(大多数公司也许连几个小时的面试时间都没有),既需要全面考察基本知识,又要考察编程素养,还要考察(也许最重要的)性格心态。再然后还有一项根本没法考察但却占据程序员相当一部分工作时间的:debug能力。面试官不但得找准问题,不因对方一题答对而妄下结论,也不因一题打错而就扼杀机会,还要以管窥豹,从一朵花看到整个世界,从面试人的举止言谈,分析问题的方式,甚至写程序的笔迹来观察这个人的性格,做事的方式和心态,简直是要面试官具备心理分析师的水准才行。
这厢要招人的雇主苦不堪言,那边找工作的人也是一团乱麻。绝大多数应届生直到毕业也不清楚他们想要去的公司到底需要什么样的能力,或者说,他们到底需要具备什么样的能力才能在应聘季节拥有自己的选择权。中国虽然本科教育环境差,但是同样有很多的人在本科希望整点东西出来,他们有一腔的激情和抱负,有强大的动力,但就是不知道自己需要掌握哪些技能才能满足雇主的要求,求告无门,整年整年苦闷的像没头苍蝇一样乱撞(我就收到过很多次这样的来信,他们往往很想学点东西,但又不知道哪些重要哪些不重要,到底该学到什么程度,不知道导致不确定,不确定导致决策瘫痪,干脆嘛也不动,荒废时间)。
什么叫熟练?什么又叫精通?那么扎实呢?两年的YY经验又意味着什么?能这么简单的量化吗?同样是两年的“实践”有的人能真的学到点东西,有的人也许近似一无所得。那么实习呢?很多人都一定要在简历上弄个实习经验,这个又能说明多少问题呢?大作业呢?得奖呢?有一次我面试一位同学,据简历说编译原理课的大作业得了一等奖,可我一问什么是递归下降,就傻眼了。
这个现实的结果就是,现在绝大多数应届简历而言,也许最具信息量的部分不是“精通XXX,熟悉YYY,掌握ZZZ”,不是“在UUU实习过”,也不是这个项目那个作业,反倒是越来越被认为不重要的一项:毕业学校毕业学校本不应该是最具信息量的,它之所以最具信息量只是源于一个悲剧的事实:简历上其他条目实在信息量太少了。所以靠谱的面试者往往学会了无视简历上华而不实的内容,只相信面试的时候亲眼所见,扫两眼简历也就罢了,最后还得自己捋起袖子慢慢面。而应聘者也许也知道招聘的也不会细细纠简历上的条目,所以什么词也都敢往上捅,反正先过了HR筛简历这关再说。从经济学角度来讲,应聘者的这种策略是正确的,没有代价(因为目前似乎没有公司会去给已经申请过的人做一个诚信数据库),但至少有可能会带来巨大的收益。应聘成了博彩。而博彩式的应聘给招聘公司带来了巨大的筛选压力。简历成了摆设。
那么招聘这个关系里面的第三者——学校——所处的位置呢?学校更关心的是毕业率和就业率,这似乎是件好事,有这个为目标,那么老师们似乎应该努力让自己的学生多学点东西。可惜就业的质量似乎不是最重要的指标,此其一。其二老师本身大多数没有丰富的业界经验,根本不知道企业整整需要的人才是什么样的,可能花了精力,但却培养不出雇主真正需要的人。另一方面,老师所起的作用很多时候甚至是一个负面的作用,例如布置大作业表面上看上去是培养学生的能力,我们姑且不说抄袭,假设每个人都做了,那么大作业本身能够衡量多少东西呢?能否衡量代码质量,能否衡量团队协作能力?能否衡量交流能力?考虑到大作业用到的东西往往都是书里面现成的,大作业甚至不能衡量学习能力。而学习能力简直算是这个行业最重要的能力没有之一了
所以,简而言之,如果把人才培养/招聘这件事情本身类比做一个项目,那么这整个项目迄今为止就是一个巨大的失败。为什么这么说呢:
  • 和需求严重脱节:作为人才需求方的雇主的需求到底是什么?绝大多数应聘者都没搞清。更严重的是,这却一点都不是应聘者的错。因为雇主是stakeholder,是雇主自己的责任得去说清楚需求是什么。结果应聘者实现的不是雇主想要的,雇主想要的应聘者没有实现。
  • 应聘者雇来培训自己的人根本不管事:学生交了学费,就相当于雇老师来培训自己,可培训者根本也不了解(或不关心)他的客户们的需求。这里,学生是需求方,老师则是实现方。弄清需求的职责在后者,可后者也弄不清。
  • 学生自己也弄不清:学生自己既是需求方(需要特定技能),也是实现方。可他们自己也弄不清需求到底是什么。
以上三点还不是最严重的,最严重的在下面:
  • 明白需求是什么的也不知道怎么实现:怎么去培养现代IT企业真正需要的人才?特别地,实战能力怎么培养?代码素养怎么培养?协作沟通能力怎么培养?学习能力怎么培养?就算这些都知道怎么培养,又怎么给在象牙塔里头,离催命之日还遥遥无期的学生提供足够的动力呢?而学生自己就算知道该学哪些技能,又怎么知道具体怎么着手?什么是最有效率的学习方法?又如何让自己保持学习的热情?
以上这些问题,就是当下人才培养/招聘的惨淡现状。简而言之,在雇主和学生之间,横梗着一条巨大的鸿沟,两头都很着急,两头都有动力,但就是没有方法,君住长江头妾住长江尾。像微软谷歌这样的,干脆和高校合作,直接插手本科或硕士的教育,从而保证到时有足够强的候选,某种程度上,这的确是根本解决之道,可一来这代价太大了,非一般企业承受得起,二来这影响面也太小了。
这一切,也许将在未来的5年发生根本的变化。
《Switch: How to Change Things When Change Is Hard》(中译《瞬变》)里面指出,表面上看来非常困难的改变,也许是因为根本就没有抓住要害。在书中作者通过大量案例分析和心理学研究,雄辩地指出以下几点促成改变的关键之处:
  • 触动内心的大象:要改变的人必须要有情感层面的动力。有一些特定的方法能够比另一些方法更能对人的情感产生触动。
  • 给出清晰、明确的目标:目标一定不能含糊,模棱两口的目标让人无所适从,导致决策瘫痪。例如最近我们组在招实习生,我在微博上发了一条招聘信息,其中提到“扎实”的系统底层知识,有同学就写信来问,怎么叫“扎实”。我傻眼了。比尔·盖茨就以目标清晰明确著称,不仅在战略制定上,“每个人桌面上都有一台PC”,而且居然还体现在招聘上——“如果你读完了TAOCP,那么就给我投简历吧”。多么清晰,明确的目标啊——虽然高了点,也许这就是比尔·盖茨至今还没被应聘邮件淹没的原因:)
  • 给前进的道路扫清障碍:人是懒惰的,只要有借口就会不想往前。如果既有明确的目标,同时道路又直直指向目标,一览无余,只等你开始往前走,那么便没有借口,一往无前。
那么让我们对照上面看看,可以做什么?
首先,内心的大象不需要触动,中国有足够多的人足够早就开始焦虑就业的事情,只是不知道往哪使劲,这部分人如果把劲头用到正确的事情上面也许足以满足现在的IT企业人才饥渴了。至于其他人,好吧,也许身边的人开始动起来他们也会被触动。
然后是清晰、明确的目标。这一点上目前雇主们的做法可谓好坏参半,好的一点是大家都强调要有实践经验,要有团队协作精神,坏的一点就在基础知识和技能的要求方面,可谓再含糊不过了:“精通XX语言”,“扎实的XX功底”,“熟悉XX技术”,甚至看上去最具量化感的描述“X年YY经验”其实都根本说明不了多少东西,在信息量方面还不如我家门口菜市场上一家卖酥油饼的店门口挂的横幅——“三天不硬、至少六层!”。
很多朋友也许注意到一个现象,现在企业对招聘者简历的要求也在变得越来越灵活变通,例如ThoughtWorks在招聘的时候就希望招聘者能给出自己的博客地址,博客对IT行业的意义也许胜过其他所有行业,一个积累多年的技术博客比任何简历都更能说明问题。台湾的郭安定也说“为什么写技术博客对新人如此重要”。可惜这个做法也有一个弊端:并不是所有技术牛人都写博客,有人就是只干不说型的,而就算写博客,乃至动手写过一阵子的,写一个常年的博客,也远比你想象的更为困难,因为很多时候,写(说)得靠谱比做得靠谱更难。所以这个过滤器很多时候用不上。
但是这的确表明了一个思考的方向,就是寻找更具鉴别力的过滤器,Stackoverflow Careers 2.0之所以强大,是因为Joel Spolsky和Jeff Atwood这两位常年混社区的资深博主创造性地将一个人在社区的活动历史浓缩成为一系列的量化数值,由于这个历史很长期,所以鉴别力非常高。但它同样也有问题,就是对于应聘者来讲相当花费时间,而且并不是花时间(在Stackoverflow上回答问题)就一定能花到点子上。
到底什么特征才是既通用,又能够有效地鉴别高低应聘者的特征呢?这个特征必须不像博客那样难以实现,同时又必须有足够的区分度
有的地方在要求填写简历的时候必须填上平时都访问哪些技术网站。恩,很不错的尝试,可区分度仍然还是不够,因为上网站上查东西毕竟只占现阶段大多数应届生的少数信息来源,特别是当我们看重得更多的是应届应聘者的系统性的知识基础的时候,网上的东西虽然丰富,但属于提高班,也更为琐碎,什么是更系统的知识来源呢?答案其实大家都知道——
书。
我一向认为,很多时候,是否好好看完一本好书,对一个人的提升往往能达到质的区别。就算不好好看完一本好书,马马虎虎看完,只要书是真的好书,也肯定会有很大的提高。我在面试的时候就经常询问对方看过哪些技术书籍,经常上哪些网站,订哪些博客。这里头尤其数书籍这一项的区分度最高。此外,好书和坏书的差别,从本质上,就是学习效率和大方向的差别。一本烂书可以浪费你半年的时间,但一本好书却可以为你带来真正扎实的基础和开阔的视野。人们常常用“内功”来形容扎实的基础,认为学好了内功以后学什么都快,其实一点没错,好的“内功”书不仅讲清楚深刻的原理,而且指明技术的本质,刻画领域的地图。好的书抓住不变量,让人能够触类旁通。好的书不仅介绍知识,而且阐释原则,介绍那些万变不离其宗的东西。读烂书浪费时间,但读好书却节省时间
象牙塔内的学生受到视野的限制,往往择书不慎,事倍功半,烂书不仅浪费时间,还会打击人的积极性,让人对知识心生恐惧,认为很难掌握,殊不知只是作者没有讲好(或者没有翻译好)。因此,为招聘头疼的公司完全可以给出“应聘俺们公司前必读的十本书”,也不一定要每个公司都不一样,在某个技术子领域有影响力的人,或者创始人们,可以来定义具有代表性的书单。
我们姑且把这个计划叫做“书单计划”,容易看到“书单计划”具备以下几个卓越的优点:
  1. 清晰、明确。完全可度量。
  2. 防伪:读没读过,随便一问便知。而正因为应聘者也知道这事不像实习经验可以忽悠,所以也不敢乱往简历上捅词。
  3. 不在乎是否“泄题”:书单完全公开的,无所谓,本来就是要你去读的。想背题?背书吧。真能背下来说明认真看了。
  4. 管你用心不用心读,只要读了,读完了,就有区别。真正的好书,你想不被吸引都难。据我观察很多人就是不知道该去读什么书。
  5. 不存在“怎么做”的障碍:所有人都知道怎么读书——一页一页读。
  6. 不需要招聘者投入精力:书单在此,就这么简单,您看着办。
  7. 评估的负担很大程度转移到了应聘者的身上:是不是认真看完了,有没有心得体会,您自己掂量。没看完别来找我们。
“书单计划”能很大程度上起到强鉴别器的作用,看了就是看了,必然能学到东西,没看就是没看。知道和不知道,区别是本质的其实很多企业内部培训,根本上其实还不就是叫员工去看之前没看过的书或者资料嘛。最后,除了鉴别作用之外,它还是一个清晰促进的目标,是完全不花精力的培养
当然,“书单计划”的背后是另一个悲剧的现实,如果不是因为这个现实,这个计划也完全没有必要,那就是,中国IT大学教育当中要求要学的书,和企业真正需要你去读的书相比,不是完全不够用,就是写的不够好,或者更悲剧的就是根本用不上,所以在这个大背景下出来的牛人都是自己淘书自己学的。微软高级开发测试工程师,《Windows用户态程序高效排错》作者熊力就在微博上说过:“我当年毕业的时候总结了一个公式:第一份工作的月薪=大学四年买过的技术书籍价格的总和。”
但是光有“书单计划”还不够,因为书籍只能管基础知识这一块,一些更难以量化衡量的实战“能力”又怎么办呢?至少目前为止,除了“练”之外好像还没有特别好的办法。可是在象牙塔里面做的项目,或大作业,真的能起到练的作用吗?前面说了,学生会知道自己最终要交差的不是雇主,而是老师,于是就以老师能够评判的标准来默认要求自己了,老师能够评判编码素养?代码风格?文档?设计?协作?甚至连著名的Joel 12条的第一条“是否用源代码管理系统”都没法通过。所以大多数时候,大作业能起到的作用近乎0。
但是如果这一切是由雇主来评判的,这个“作业”是由雇主来给出的,就完全不一样了。一想到作业是要作为简历的一部分的,能不紧张嘛。能不好好做嘛。能不学到点东西嘛?
可是这事儿能实现吗?雇主能给学生出大作业吗?也许一两个关系好的高校可以,可是中国那么多学生呢?
为什么不能呢?如果像书单那样,列出各个技术领域“推荐在学校期间尝试的项目”,至于动不动手做,那是学生自己的问题。做的,自然能够得到锻炼,面试的时候自然能得到更大的优势。
可问题是,面试的人又怎么来评估呢?这不又回到了没法有效评估的怪圈了吗?答案很简单,但这个答案,直到最近几年,才真正成为现实——
GitHub
GitHub诞生于08年春天,第一年便产生了4万6千个公共项目,大约一年半之后用户就已经达到10万用户之巨。而到今年九月份,GitHub已经迎来了百万级用户。Host超过两百万个项目。
增长的太快了!就像Twitter一样。这样疯了一般的增长只能说明一个事实——人们等待这个产品太久了
Social Coding
真实的项目,真实的流程,真实的人名,一切代码review, check-in, test, build, document, 甚至讨论,计划,brianstorming,流程,一切的一切,都是项目历史的一部分,都可以像棋局那样复盘。有经验的面试者只要稍稍扫两眼一个人的GitHub历史,挑出几个check-in历史看一看,便完全能够迅速判断这个人是否满足他的要求。不再需要费劲心机地去想题目,去观察,去揣测,去花费大量的时间的同时还只能采样到几个极为有限的点。
不像象牙塔里面大作业,这里有源代码管理系统,自动化build,有check-in,有review,有分工,有合作,最重要的是——这是一个集市,一个超出象牙塔的集市,牛人相互吸引,你可以在互联网上找到和自己拥有共同兴趣的一帮人,真正做起一点事情,而不是交差,不需要受限于几十个人的一个小班级。Here Comes Everybody
为什么我这么有信心?因为这事儿已经发生了。这个想法也完全不是我原创的
正如很多事情一样,现在在国内发生的事情,往往是美国那头的历史。今年7月中旬,纽约一家公司的工程师老大发了一篇博客文章:Github is Your New Resume。指出一个惊人但再合理不过的事实:越来越多的IT公司在招聘的时候要求应聘者给出GitHub账号。甚至已经有人为GitHub写了根据GitHub上的历史自动生成简历的工具
仔细想想,这是必然的趋势,没有比这个再合理的事情了,既然StackOverflow的历史能够作为简历,GitHub的历史不本该就是更好的简历吗:你想要具有实战经验,懂check-in懂review懂test和代码质量的重要性,懂交流和沟通的重要性,你本就应该在一个真实的项目当中去锻炼这些东西,而这些在目前已经完全可以办到。正如邹欣老师所说,你的工作就是最好的面试
这件事情放在早几年,是完全没法做到的,因为我们那时候还没有GitHub。正如没有Twitter,没有微博之前,很多事情都不会成为可能一样,你有千钧之力,缺乏一个合适的支点,也没法撬动一整个社群。无组织中的组织,具有强大的杠杆效应。
这个事情里面,我唯一提出的东西就是:在目前国内这个现状下,苦闷的招聘者应该主动行动,给出一些建议项目,正如前面提到的书单计划一样,招聘者需要给出的只是引导和清晰明确的目标,剩下的事情,应聘者自然会去完成,这些项目可以是实验项目,也可以是完全能做出点卖钱的东西的项目(如果好好做的话),唯一的不可或缺的前提是,项目不能太小,单人就能完成的项目不理想,一两个月就能完成的项目不理想,最好足够大到能够锻炼到方方面面,偏大一点倒是无所谓的,因为一个尚未完成的项目完全可以作为简历。当然,可以想见的是,真到了那个时候,学生们肯定又是不会满足于仅去做那些已经有许多人做过的项目了所以这里企业们一开始所建议的项目只是一个《Nudge》,是滚雪球之前需要的一点初始动能。后面的事情,他们自己会完成。
“GitHub计划”同样有一些明显的、甚至不可替代的优点:
  1. 清晰、明确,完全可度量。
  2. 防伪:同样不担心“泄题”。你伪造不了GitHub历史,伪造不了check-in历史,review comments,文档,交流记录…
  3. 它不但是招聘,也是不花精力的培养。善哉善哉。
  4. 评估的责任很大程度上交给了应聘者自己。
从你的GitHub旅程开始,你就已经一脚踏进了真正的企业,而企业的面试也已经开始。
书单+GitHub,就相当于一个两年左右的面试。
没有什么面试比持续两年的面试更具有信息量。
书单,加上项目,已经基本上覆盖了所需的全部技能。最妙的是,有太多的人在焦急的等待着他们未来的雇主给出明确的信号,他们想投入精力,去学习和实践,去成为企业需要的人,但是他们就是不知道往什么方向走,所谓有动力没方向。所以,雇主给出了清晰明确的要求,相信对于很多人来说反倒是一个解脱:“终于知道该干什么了”。《编程之美》为什么常居畅销榜?因为它透露了雇主眼中的需求,明确、清晰的需求,可以实现,并且知道怎么去实现的需求。
你提前两年就开始面试和培养未来的候选者,而且还不需要你花出一分精力,而且人家还很乐意,没有比这更完美的面试了。
想一想,以后那些没见过世面的公司看见你拿出GitHub账号给他看,该是多么惊讶同时又觉得多么合理。
而这一切,只是因为两个小小的改变:
  1. 由需求方(雇主)给出了清晰、明确的目标。
  2. GitHub这样的平台。
那么,学校/老师在这个事情当中的位置呢?说实话我不知道。没有哪个行业像IT行业这样特殊:没有什么东西不能够(应该)在互联网上学到的。自组织的力量完全大过传统的教育方式。而且,既然雇主都当了领路人了,我不知道还有中间开发商什么事儿。(注:这里说的是软件开发,并非计算机科学研究,后者另当别论
那么,这个改变会发生吗?多久会发生呢?当然,它在国外已经发生了,所以问这个问题多少有点无趣。但我还是预计很快就会在国内发生,毕竟,不是已经有人要求出示博客,和经常浏览的网站了吗?也许5年左右(4年本科和6年硕士的中间值?))就会深刻改变整个人才培养/招聘的格局。当然,我并不是预言家,所以不要把我的时间估计当真,我能肯定的是,这种方式是必然的大势所趋。
刚才我就收到一位同学邀请我上知乎回答一个问题“找工作的首要原则是什么?”,当然,这个问题的答案是:“弄清雇主的需求到底是什么”。

列一下我所认为的,你面试微软前必须要读的十本书:
  1. Code: The Hidden Language of Computer Hardware and Software (《编码的奥秘》)
  2. Computer System: A Programmer’s Approach (《深入理解计算机系统》) / Windows via C/C++ (《Windows核心编程》 / 《程序员的自我修养》
  3. Code Complete 2(《代码大全》)/ The Pragmatic Programmer (《程序员修炼之道》,我也把这本书称为《代码小全》)
  4. Programming Pearls (《编程珠玑》) / Algorithms / Algorithm Design / 《编程之美》
  5. The C Programming Language
  6. The C++ Programming Language / Programming: Principles and Practice Using C++ / Accelerated C++
  7. The Structure and Interpretation of Computer Programs (《计算机程序的构造和解释》)
  8. Clean Code / Implementation Patterns
  9. Design Patterns (《设计模式》) / Agile Software Development, Principles, Patterns, and Practices
  10. Refactoring (《重构》)
(注:1. 以上同一条目下用“/”隔开的表示任选,当然你也可以都读了,相信我,时间是足够的。2. 读这些书并不意味着逐字逐句从第一页读到最后一页——当然你也可以这么做。怎么是聪明高效的读法,可以参考我之前写的关于如何阅读和查找/鉴别书籍/资料的博文)
注意:以上是我个人认为你面试微软开发职位前必须要读的10本书,它不代表我的雇主的观点。它也只是一个初步的书单,肯定会受到我个人经验和眼界的限制。欢迎大家提意见。
此外,IT不同子领域的必读书单可能千差万别,所以在发布之前我把这篇文章发给了一些朋友,他们给出了自己的书单(你是不是能看到一些有趣的共同点呢):
云风(中国游戏编程先行者,前网易游戏部门资深程序员,简悦创始人):
如果面试,我会挑以下的我自己读过的书,让人选择他也读过的部分,再了解他对这些书的理解。这些书其实本质上就是两类,对所面对的东西(程序语言也好,操作系统也好,底层设施也好)本身的理解程度。以及另一类:对设计思想和原则的理解:
  1. C++编程思想
  2. Effective C++
  3. 深度探索C++对象模型
  4. C++语言的设计和演化
  5. C专家编程
  6. C陷阱与缺陷
  7. C语言接口与实现
  8. Lua程序设计
  9. Linkers and Loaders
  10. COM本质论
  11. Windows核心编程
  12. 深入解析Windows操作系统
  13. 程序员修炼之道
  14. 代码大全
  15. UNIX编程艺术
  16. 设计模式
  17. 代码优化:有效使用内存
  18. 深入理解计算机系统
  19. 深入理解LINUX内核
  20. TCP/IP 详解
冯大辉(丁香园CTO,贝塔咖啡创始人):
  1. 软件随想录
  2. 黑客与画家
  3. 重来
  4. UNIX编程艺术
  5. 编程人生
洪强宁(豆瓣技术总监):
StackOverflow上有一个程序员必读书单帖子,这里仅列出top10,更多参考这里
  1. Code Complete 2
  2. The Mythical Man-Month (《人月神话》)
  3. Code: The Hidden Language of Computer Hardware and Software (《编码的奥秘》)
  4. TAOCP (不解释)
  5. The Pragmatic Programmer (《程序员修炼之道》)
  6. Design Patterns (《设计模式》)
  7. The Structure and Interpretation of Computer Programs (《计算机程序的构造和解释》)
  8. Refactoring (《重构》)
  9. The C Programming Language
  10. Introduction to Algorithms (《算法导论》)
张峥(微软亚洲研究院副院长):
  1. Algorithms (by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani)
  2. Data Structure and Algorithms
  3. The C Programming Language
  4. The Design of the UNIX Operating System
  5. Compilers (龙书)
  6. Computer Architecture: A Quantitative Approach
  7. Flow
  8. Outliers (why hard work and luck are both important)
读好书是如此的重要,因为好书往往带领你去到更好的书,更大的世界。

2011年11月5日星期六

inline

预处理时即展开,避免函数调用开销

template

abstraction;
A template class or function can work with many different types
template<typename T>
void print(ostream& out, T data[], int count)
{
   out << "[";
   for (int i = 0; i < count; i++)
   {
      out << data[i];
      if (i + 1 < count)
         out << ",";
   }
   out << "]";
}
以上是模板函数.
另外还有模板类:
template<typename F, typename S>
class Pair
{
public:
   Pair(const F& a, const S& b);
   F get_first() const;
   S get_second() const;
private:
   F first;
   S second;
};

动态类型检查

for (int i = 0; i < department.size(); i++)
{
   Manager* m = dynamic_cast<Manager*>(department[i]);
      if (m != NULL)
         cout << "Employee " << department[i]->get_name()
            << " is a manager.\n";
   else
      cout << "Employee " << department[i]->get_name()
         << " is not a manager.\n";
}
for (int i = 0; i < department.size(); i++)
{
   if (typeid(*department[i]) == typeid(Manager))
      cout << "Employee " << department[i]->get_name()
         << " is a manager. \n";
   else
      cout << "Employee " << department[i]->get_name()
         << " is not a manager. \n";
}

friends

there are two types,friend class,and friend function

delete [] 的用法

这是用delete来删除数组。  
  delete[]   <指针名〉  
  例如:删除对象数组:  
  A   *ptr;  
  ptr=new   A[10];  
  delete[]   A;  
  删除一般数组:  
  int   *p;  
  p=new   int[10];  
  delete[]   p;  

operator overloading,难

return_type operatoroperator_symbol( parameters )
{
  statements
}
Example:
int operator-( Time a, Time b )
{
 return a.seconds_from( b )
}
 
 
 
there are two types of operator overloading,one is operator
function,another is operator member function.
as an operator function,if unary,
time operator--(time& a);
if binary,
int operator-(time a,time b);
as an operator member function,
if unary,then 
Fraction& operator++(); // Prefix form
Fraction operator++(int unused); // Postfix form
if binary,then
Fraction& operator+=(const Fraction& right);
有很多advanced topics

list and list iterator

STL包含强大的模版库,里面有各种数据结构,container,这就省去了写数据结构from scratch.
以前王自强老師讲data structure时说,这些东西在高级language会有很好的支持,果真如此.
另外,有个class 比较奇怪,就是iterator,要研究一下(iterator is nested class in STL)
list,queue,stack,set,multiset........

the software life cycle

waterfall model: impractical
spiral model:




CRC Card method



inheritance can be overused,sometimes we just need association,not inheritance.


uml graph

stream:有点难

input file stream  
ifstream input_data;input_data.open("input_data");
input_data>>.......;input_data.close();
output file stream
ofstream output_data;output_data.open("output_data");
output_data<<......;output_data.close();

cin is a derived class from istream;cout is derived from ostream;

stringstream
A very common use of string streams is to accept input one line at a time and then to analyze it further.like 9:30 pm;
先一股脑全读进来,然后转换成istringstream,慢慢处理

inheritance&polymorphism

derived class's constructor need call the base class's constructor
Derived_class_name :: Derived_class_name(expressions)
   : Base_class_name(expressions)
{
   statements
}
Example:
Manager::Manager(string name, double salary, string dept)
   : Employee(name, salary)
{
   department = dept;
}




int TravelClock::get_hours() const
{
    int h = Clock::get_hours();//extend the base class member function
    if (is_military())
       return (h + time_difference) % 24;
    else
    {
       h = (h + time_difference) % 12;
       if (h == 0) return 12;
       else return h;
    }
 }
 

To tell the C++ compiler that a particular function 
needs to be bound dynamically, the function must be tagged as virtual in the base class.
    class clock 
{
public:
   Clock(bool use_military);
   virtual string get_location() const;
   virtual int get_hours() const;
   int get_minutes() const;
   bool is_military() const;
private:
   . . .
};
And in oeder to show polymorphism, we need to use base class pointer to point to both
 base class and derived class.(note that base class pointer can point to derived class)

memory allocation and pointer

new
Employee* boss = new Employee("Lin, Lisa", 68000);
delete
delete(boss);
the uses of pointer
1.optional attribute
class Department
{
 . . .
private:
   string name;
   Employee* receptionist;
};
is better than 
class Department // modeled without pointer
{
 . . .
private:
   string name;
   bool has_receptionist;
   Employee receptionist;
};
2.sharing

c++ vector

#include<vector>
vector<double> salary(10);
salary[0]=100.01;

for(i = 0; i < salary.size(); i++)
   do something with salary[i];

可以象stack,
salary.push_back(...);
salary.pop_back();

vector as parameter    double average(vector<double> v);
vector as return value  vector<double>  function1(.....);
   

 

2011年11月4日星期五

IBM Centennial Lecture

讲座很冷清,不知道是不是因为时间安排在2点到3点。
给我们讲HARDWARE AND OS的老师George也来了,还有几个计算机系的老师。
学生大概就十个不到。
Lecturer是IBM Canada的合伙人,他说话语速非常快,也很幽默,给我们讲是88年在UBC的CS毕业,那个时候还是cobol的时代。
无论如何,讲座还是开始了。
IBM一百年了,1910——2010,如今在IT领域,IBM依旧是巨头。但是实际上,在百年前,IBM干的东西却很奇怪,IBM甚至卖过三明治切片机。
但是,lecturer讲,100年前活下来的企业凤毛麟角,IBM靠的是不断的创新,科技创新,商业模式的创新。
他给我们放了一段宣传片,讲了IBM百年的百件大事,很震撼的感觉。
还是很向往IBM的生活工作方式,这个公司投入在pure science的资金是天文数字,包括集成电路,人工智能等等的技术革命是由IBM 这个商业公司完成的,大家都知道的deep blue,还有最近的Whatson.Lecturer 跟我们讲的时候,我就在想,中国的技术创新现在都是政府支持,里面的人员也是良莠不齐,工作积极性也一般,比如中科院之类的研究机构,还有高校,所谓科学产业,只是搞钱的圈子,这很是可惜。我们现在的IT领先企业,类似百度,新浪,华为之类的,真正是不愿意投钱搞创新,所有的商业模式是抄袭的北美,技术上也拿不出手,一位老师也跟我说,华为现在市场占有率这么高,其实是因为在20年前,通信设备制造还是个高附加值的产业,所以AT&T,BELL,阿尔卡特,朗讯有兴趣玩,有钱挣,现在技术基本成熟,附加值已经不高,这些牛逼公司,其实是不跟你玩了,才有了华为的成功,说的我心凉了半截。
另外就是,IBM现在也在转型,Lecturer说,现在,越来越少的客户买硬件,软件,人家买的是solution,所谓解决方案,虽然我现在还不太理解,但是solution这个概念已经炒了很久,应该不是空穴来风。
这个manager自己本科学的CS,现在在做咨询貌似,他讲的很通俗,就是做超大规模数据的分析,给出其他人分析不出的一些结论。他还讲,IBM的whatson是不联网的机器,不是google,他的智能是数据库智能,非常强大,不比GOOGLE差,Whatson 搞出来其实不是来秀的,是有意义的,就是新技术,新方法的一个实验平台,Whatson里用的技术,会是十年后的现实。

美国引领世界科技不是盖的,有这样的公司,不可能会失败。中国还是太嫩了,一样搞资本主义,中国搞得有点太拜金了,没有long-term picture.
原本想问,IBM 把PC卖给lenovo,是什么原因,最后还是没问,其实没有问得必要了,IBM觉得,没必要再在PC制造这个附加值已经不高的圈子完了,在IBM卖360的时候,柳传志不知道在干什么呢!