IT外企那点儿事(3):奇怪的面试

Posted on

IT外企那点儿事(3):奇怪的面试

觉先

博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 :: 130 随笔 :: 0 文章 :: 544 评论 :: 0 引用 <2010年5月>日一二三四五六2526272829301234567891011121314151617181920212223242526272829303112345

公告

昵称:觉先 园龄:3年7个月 荣誉:推荐博客 粉丝:560 关注:3

+加关注

搜索

常用链接

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

推荐排行榜

IT外企那点儿事(3):奇怪的面试

外企的面试都面写啥?不同的企业也是不一样的,总的来说可以归结为以下几句话:

三类企业面实战,二类企业面基础,一类企业面算法。

在此声明,此处所谓的一二三类,绝没有轻视其他企业的意思,这里的一二三类基本上是按照本科毕业的时候起薪来划分的,一类企业指的是年薪15万以上的企业,二类企业指的是年薪10万左右的企业,三类企业指的是年薪5万左右的企业。当然按照上两次的描述大家可以知道,并不是起薪高的企业的程序员一定最好发展的最好,而进入创业企业的人最后可能后来居上,成为IT达人。当然此规律也不仅仅适用于外企。

三类企业

三类企业起薪不高,招聘的目的也相对的明确,是要找那种来了就能真枪实弹的把东西作出来的人。

他们多不太关心员工的培训和成长,不太关心员工是否对技术有浓厚的兴趣和深入的钻研,他们就是一个想法,他们要做一个东西,做这个东西需要某方面的技术,所以要找这会方面的人。

他们不知道,大多数的程序员其实喜欢做一些在自己能力以上20%的东西,也即研究研究可以做出来,但不是太熟练,而不喜欢做一些自己已经非常熟,毫无挑战的东西。

但是他们需要这样的人,所以在面试中,面试的问题比较具体,甚至具体到一个个的配置项,也有当场给你环境,让你搭一个框架,做一个东西的。

他们希望,最好你以前做过的项目和他们现在的项目十分相似,来了就能够上手。

其实很多程序员跳槽,就是因为原来的工作已经没有了挑战,想找一个更有挑战的,有更多大牛的地方,如果原来的项目我干的不亦乐乎,还来你这里干什么?

但是现在工作难找啊,所以他们总是能够找到需要的人,毕竟出来混,大家都是混口饭吃,不容易啊。

要想进入此类企业,一个最好的办法就是上手做,在学校里就可以找个实习的公司,哪怕不给钱也去(强烈谴责这种企业,剥夺劳动者的基本权利,也就在中国他们能干的出来,放到欧美罚不死他们),先混些实践经验,做些边角料的活,然后跟着lead一步一步进入核心模块,相信只要认认真真的做过,面过这类企业应该不成问题。

此类企业的流动性相对较大,往往被用作程序员的跳板,跳到二类甚至一类的企业中去。所以不幸进入此类企业的兄弟们,在实战的过程中,别忘了多看看源码,多想想背后的原理,多补充一下计算机科学的基本知识,早日脱离苦海。

二类企业

二类企业其实薪水已经非常不错了,毕业就能进入此类企业的程序员也多是学校中的优秀分子。

此类企业注重程序员的基础,认为只要基础好,他们愿意培训并培养程序员,给你机会进行学习。

此类企业招聘的时候,职位有可能是不太确定的,可能是Java,可能是C++,可能是windows,可能是Linux,他们认为只要你基础好,语言不是问题,平台不是问题,培训一下上手会很快。

记得面试一家与通信有关的欧企,面试官开始问了很多C/C++的基础知识,后来问了很多操作系统和计算机网络的基础知识,最后说,他们是需要有通信背景的,然后连问我三个有关通信方面的问题,我都说不知道,最后只有坦然承认,通信我确实一点都不懂。后来我认为我是彻底没希望了,没想到后来竟收到了他们的offer,并在入职后进行了长达两个月的通信方面的培训,后来我问我的面试官怎么回事,他说,你的C/C++,操作系统,计算机网络的面试题几乎都对了,我觉得你的基础不错。

所以要进入此类的企业,有关基础方面的书还是要认认真真,仔仔细细的看,下面推荐一部分:

  • C: 《The c programming langage》
  • C++:《Thinking in C++》,《The c++ programming language》,《effective c++》,《more effective c++》,《exceptional c++》,《more exceptional c++》,《inside the c++ object model》
  • Java:《Thinking in java》,《Core Java》,《effective java》,《Java Puzzlers》,《Java Network Programming》,《java concurrency in practice》,《深入Java虚拟机》
  • windows:《Windows核心编程》,《Windows Internals》
  • linux:《Advanced Programming in the UNIX.Environment》,《Understanding Linux Network Internals》,《UNIX Network Programming》
  • network:《TCPIP Illustrated Volume I》,《The Linux Networking Architecture》

我没有在装B,也不是看过以上所有的书,不过上述书籍的确是程序员必藏书,我也只不过是在用到的时候翻开相关章节看看。

然而给大家的建议是,在做项目的时候,千万不能够做什么就只知道什么,与此相关基础知识也应该多看一些。面试的时候也经常遇到这种情况,就是面试者号称做过socket,问到tcp/ip拥塞控制却一无所知,会简单使用socket client端和server端几个简单函数人太多了,如何保证你能够脱颖而出呢?

其实很多事情我们觉得不可能,但是这个世界上就是有牛人确实做到了,比如英语六级能够考99分(满分100),就是把答案全给我,就让我写作文,我也做不到啊,再如高考满分750分,山东的状元730+分,也就意味着数理化全对,语文140+,英语140+,我的天,也是把答案给我,就让我写语文和英语的作文,我也做不到啊。

然而读以上书籍却没有上面两个例子难的不可想象,我所知道的身边的人就有C, C++, linux, network这几个分支全读过的,而且不止一个。

能进入二类的企业,混个中层,也能过上满不错的生活了。

一类企业

一类企业薪水非常高,毕业就能进入的可以说是学校中的佼佼者了,一般会名校背景,名企实习,甚至有过获奖的才能够进入。

此类企业除了注重程序员的基础之外,更加重视程序员的思想,算法及聪明程度。

所以很多奇奇怪怪的面试题在网上都流传出来了,这些题目真可谓费尽心机。面试过程长达n轮,每轮都可能因为疏漏和状态不佳被刷掉,最后剩下的几近完美。

在面试中,程序是要当场在黑板上写出来的,很短的时间,要求很强的健壮性,面试官还会在旁边施加心理压力,你确定吗?要注意XXX。

虽然问题是经常外流的,然而新的问题却是不断的会出,可能是因为工作中有些需要解决的问题,自己想了一天多才想出的解决方案,却抽象出来考别人,让别人在很短的时间作出来,这种心理开始很爽,后来觉得很罪恶,多少有些原来自己穷,受富人欺负,后来富了又欺负穷人的味道。

有些人会质疑,这些精巧的算法在工作中真的能够用到很多吗?答案当然不是。

这其实是一个供需的问题。马克思告诉我们,商品的价格是由价值量决定的,商品应该以价值量为基础,实行等价交换。西方经济学告诉我们商品的价格会随着供需关系的变化而变化。当供需矛盾相当大的时候,商品的价格就会远离价值量。

《经济学的思维方式》一书中写到,所有的稀缺品都需要以某种方式分配,必须建立某种规则和制度,对那些要求得到稀缺品的人加以甄别,决定谁该得到多少。价格只是最常用的一种方式。

想想我们的高考吧,那些千辛万苦考上清华的学子毕业后又有多少高中的知识留在脑子里呢?学到的东西又有多少是能够在实际中用到的呢?其实很少,高考分数不过是进入清华的一个价格而已,已经由于清华只有一所,考生却有千百万这样的供需差别远远的偏离了使用价值,毕竟能够轻松看懂教科书的人太多了,他们只能够不但要全会,还要全对。

进入一类企业也是同样的,能把我上述书籍都看完的人是大有人在的,仅仅基础知识已经不能够甄别想进入一类企业的人们,所以需要奇奇怪怪的算法题。

要进入一类企业,《算法导论》这本书必不可少,要前前后后仔细的看,而且应该不止一遍。《编程珠玑》也是一本不错的书,其中的例子可以常常的回味。《编程之美》也不错,更贴近面试,更实用一些。其实更重要的是Top coder,就是多看多练。

其实考入名校基本就是一种方法,多做题,以便在考场中看到题目就能够有思路,考场的时间仅仅用于保证正确率就可以了。

进入一类企业也是一样,要想很短的时间,在很大的压力下写出健壮的程序,其实只有一种方法,就是类似的题目遇到过,思路是马上就有的,在会议室的时间仅仅用于保证健壮性就可以了。

曾经一段时间,对精巧的算法十分的崇尚,甚至引以为豪,然而后来慢慢发现,天天沉浸在算法之中,沉浸在计算机的小天地里面,又对社会做了什么贡献呢?难道自己的才能,抱负就仅仅放在这些数字的技巧当中吗?

我们不应该像孔乙己一样研究茴香豆有几种写法,而是应该如阿朱《走出软件作坊》中描述的一样,虽然方案不是完美和精巧,然而逢山开路,遇水搭桥,真正的解决一个个的问题,作出一些可以影响人们生活的软件。

先写到这里,下一章要开始写入职了。

分类: IT外企那点儿事

绿色通道: 好文要顶 关注我 收藏该文与我联系

觉先 关注 - 3 粉丝 - 560

荣誉:推荐博客 +加关注

39

0 (请您对文章做出评价)

« 上一篇:IT外企那点儿事(2):多种多样的外企 » 下一篇:IT外企那点儿事(4):激动人心的入职演讲 posted on 2010-05-03 01:05 觉先 阅读(14392) 评论(24) 编辑 收藏

评论

/#1楼 2010-05-03 09:12 杨中科

这么好的文章怎么上不了主页?

支持(0)反对(0) http://pic.cnitblog.com/face/u130406.jpg

/#2楼 2010-05-03 09:34 阿龍

很多单位都把程序员当成了挣钱的工具,培训,门都没有。就连基本的系统里面的很多设计文档都不给你看,作为公司机密。

支持(0)反对(0) http://pic.cnitblog.com/face/u23974.jpg

/#3楼[楼主] 2010-05-03 10:50 觉先

@杨中科 你好,不知道为什么,我是在windows live writer里面写的,提交上来后,原来再编辑的话可以选择发布在精华区,现在只能选择发布在候选区了。 另一点,此类的文章在博客园容易被拍啊,不是技术类文章,现在都不敢发在首页了。

支持(0)反对(0) http://pic.cnitblog.com/face/u103165.jpg

/#4楼 2010-05-03 13:05 ilovedotnet

不错,排版大有进步啊!

支持(0)反对(0) http://pic.cnitblog.com/face/u26921.jpg

/#5楼 2010-05-03 23:16 依落の守候

@杨中科 居然在这看到如鹏的老大,幸会幸会。

支持(0)反对(0) http://pic.cnitblog.com/face/u102636.jpg

/#6楼 2010-05-03 23:17 依落の守候

好文章。至少是能改变人观念的文章。谢谢lz了。

支持(0)反对(0) http://pic.cnitblog.com/face/u102636.jpg

/#7楼 2010-05-04 00:32

对我的目标信念更加的坚定 谢谢

支持(0)反对(0)

/#8楼 2010-05-04 09:06 ESON

挺好,不过我这人不太喜欢看书,应该找个时间挑战一下自己。

支持(0)反对(0) http://pic.cnitblog.com/face/u109470.jpg?id=02124325

/#9楼 2010-05-04 13:36 JacksonChina

呵呵。LZ可以直接发到首页啊。 说得很实在,不是通篇大道理,大部分人还是认可的。 非技术类没关系啊。毕竟园子很多人排斥的不是这类型 的文章,而是某个人的风格。

支持(0)反对(0)

/#10楼 2010-05-05 13:09 clound

这个系列不错 ,好文章。 LZ也很谦虚,刚看了评论,都没发到首页。

支持(0)反对(0)

/#11楼 2010-05-05 13:49 hechaner

引用觉先: @杨中科 你好,不知道为什么,我是在windows live writer里面写的,提交上来后,原来再编辑的话可以选择发布在精华区,现在只能选择发布在候选区了。 另一点,此类的文章在博客园容易被拍啊,不是技术类文章,现在都不敢发在首页了。 不是非技术的文章就会被拍砖,我觉得写的很中肯,对大家也有用,帮楼主推荐了

支持(0)反对(0)

/#12楼[楼主] 2010-05-05 14:39 觉先

@hechaner 非常感谢啊

支持(0)反对(0) http://pic.cnitblog.com/face/u103165.jpg

/#13楼 2010-05-05 15:21 lonely_rain

顶一下。

支持(0)反对(0) http://pic.cnitblog.com/face/u105358.jpg?id=24155351

/#14楼 2010-05-05 16:03 blackcat

还好。呵呵。不错。 非常生动。 有助于职业规划。

支持(0)反对(0) http://pic.cnitblog.com/face/u106668.jpg

/#15楼 2010-05-05 21:55 Caspar Jiong

好文!

支持(0)反对(0)

/#16楼 2010-05-06 08:59 elwin.wang

LZ,我对你的佩服如滔滔江水,连绵不绝啊

支持(0)反对(0)

/#17楼 2010-05-12 00:48 学飞的菜鸟

嗯,说得很有道理啊。博客园里真是高手如云啊,以后得多来拜会才是。

支持(0)反对(0)

/#18楼 2010-05-13 09:55 Yes!加菲猫

这篇标记下,虽然不进外企,但是文章提到的东西还是要多留意

支持(0)反对(0) http://pic.cnitblog.com/face/u33631.jpg

/#19楼 2010-05-13 16:11 坐井观天

这文章要顶

支持(0)反对(0)

/#20楼 2010-05-13 22:51 Likwo

文章非常好,辛苦啦

支持(0)反对(0)

/#21楼 2010-05-14 10:30 MyCoolDog

ding!!

支持(0)反对(0) http://pic.cnitblog.com/face/u32601.jpg

/#22楼 2012-11-27 23:40 我不是AI

请问, 你说的Top coder是这个么: http://www.topcoder.com?

支持(0)反对(0) http://pic.cnitblog.com/face/u271595.jpg?id=24154145

/#23楼 2012-12-05 11:10 全力以赴001

给人感悟的....真给力!

支持(0)反对(0)

/#24楼25739772012/12/10 10:17:29 2012-12-10 10:17 Mamamiya

博主的文章很能发人深省。收益良多。

支持(0)反对(0)

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录注册访问网站首页。 博客园首页博问新闻闪存程序员招聘知识库

最新IT新闻: · Facebook推出一体化数据中心管理软件 · 顺丰掌门人王卫:马云最佩服的人 · 2013年美国十大最佳科技雇主 · 这四年 Google中国落寂了 刘允尽力了 · 在线课程“慕课”来袭 专家称大学应主动参与 » 更多新闻...

最新知识库文章: · 阿里巴巴集团去IOE运动的思考与总结 · 硅谷归来7点分享:创业者,做你自己 · 我为什么不能坚持? · 成为高效程序员的7个重要习惯 · 谈谈对BPM的理解 » 更多知识库文章... Powered by: 博客园 Copyright © 觉先

android的文件系统结构及其引导过程的初步理解

Posted on

android的文件系统结构及其引导过程的初步理解

1、android文件系统的结构 android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。因此,我们可以把ramdisk.img里的所有文件复制出来,system.img和userdata.img分别解压到 ramdisk文件系统中的system和 userdata目录下。

ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。如果你您希望了解更多关于此文件的信息可以参考以下网址: http://git.source.android.com/?p=kernel/common.git;a=blob;f=Documentation/filesystems/ramfs-rootfs-initramfs.txt 以下是一个典型的ramdisk中包含的文件列表:

./init.trout.rc ./default.prop ./proc ./dev ./init.rc ./init ./sys ./init.goldfish.rc ./sbin ./sbin/adbd ./system ./data

2、分离android文件系统出来 system.img,ramdisk.img,userdata.img映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证: file ramdisk.img,输出: ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 Android源码编译后除了生成system.img,userdata.img之外还生成system和 userdata文件夹,因此不需要解压它们。Android源码编译后还生成root文件夹,其实root下的文件与 ramdisk.img 里的文件是一样的,不过这里还是介绍怎样把 ramdisk.img解压出来: 将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令 gunzip ramdisk.img.gz 然后新建一个文件夹,叫ramdisk吧,进入,输入命令 cpio -i -F ../ramdisk.img 这下,你就能看见并操作ramdisk里面的内容了。 然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system和 ramdisk/userdata下。这样就得到一个文件系统了。 3、使用网络文件系统方式挂载android文件系统 因此,我们需要建立/nfsroot目录,再建立/nfsroot/androidfs目录,把刚才的android文件系统改名为androidfs,并链接到/nfsroot/androidfs 4、android内核引导文件系统 android内核挂载/nfsroot/androidfs之后,根据init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。init.rc脚本包括了文件系统初始化、装载的许多过程。init.rc的工作主要是: 1)设置一些环境变量 2)创建system、sdcard、data、cache等目录 3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals 4)设置一些文件的用户群组、权限 5)设置一些线程参数 6)设置TCP缓存大小

adb命令详解

Posted on

adb命令详解

ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能有: / 运行设备的shell(命令行) / 管理模拟器或设备的端口映射 / 计算机和设备之间上传/下载文件 / 将本地apk软件安装至模拟器或android设备 ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.. 先说安装方法, 电脑上需要安装客户端. 客户端包含在sdk里. 设备上不需要安装, 只需要在手机上打开选项settings-applications-development-USB debugging. 对于Mac和Linux用户, 下载好的sdk解压后, 可以放~或者任意目录. 然后修改~/.bash_profile文件, 设置运行环境指向sdk的tools目录. 具体是打开~/.bash_profile文件(如果没有此文件也可以自行添加), 在里面加入一行: export PATH=${PATH}:<你的sdk目录>/tools 然后就可以使用adb命令了. 嫌安装麻烦的同学其实也可以省去上面安装步骤, 直接输入完整路径来使用命令。 对于windows xp用户, 需要先安装usb驱动 android_usb_windows.zip, 然后如果你只打算使用adb而不想下载整个sdk的话, 可以下载这个单独的adb工具包 adb_win.zip 下载后解压, 把里面 adb.exe 和 AdbWinApi.dll 两个文件放到系统盘的 windows/system32 文件夹里就可以了 现在说下ADB常用的几个命令 查看设备 / adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 安装软件 / adb install 这个命令将指定的apk文件安装到设备上. 卸载软件 / adb uninstall <软件名> / adb uninstall -k <软件名> 如果加 -k 参数,为卸载软件但是保留配置和缓存文件. 登录设备shell / adb shell / adb shell 这个命令将登录设备的shell. 后面加将是直接运行设备命令, 相当于执行远程命令 从电脑上发送文件到设备 / adb push <本地路径> <远程路径> 用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机) 从设备上下载文件到电脑 / adb pull <远程路径> <本地路径> 用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑 显示帮助信息 /* adb help 这个命令将显示帮助信息 这里还有一个英文版的: 在DOS下输入以下命令基本可以完成刷机任务,一些常用命令解释如下: adb devices - 列出连接到电脑的ADB设备(也就是手机),一般显示出手机P/N码.如果没有显示出来则手机与电脑没有连接上. adb install – 安装手机软件到手机中,如:adb install qq2009.apk. adb remount – 重新打开手机写模式(刷机模式). adb push - 传送文件到手机中,如:adb push recovery.img /sdcard/recovery.img,将本地目录中的recovery.img文件传送手机的SD卡中并取同样的文件名. adb pull - 传送手机的文件到本地目录(和上命令相反). adb shell - 让手机执行命令,就是手机执行的命令.如: adb shell flash_image recovery /sd-card/recovery-RAv1.0G.img,执行将recovery-RAv1.0G.img写入到recovery 区中. 我们刷recovery时一般按下顺序执行: adb shell mount -a adb push recovery-RAv1.0G.img /system/recovery.img adb push recovery-RAv1.0G.img /sdcard/recovery-RAv1.0G.img adb shell flash_image recovery /sdcard/recovery-RAv1.0G.img reboot 其它的自己灵活运用了. ADB命令详解: Android Debug Bridge version 1.0.20 -d  - directs command to the only connected USB device returns an error if more than one USB device is present. -e  - directs command to the only running emulator.returns an error if more than one emulator is running. -s – directs command to the USB device or emulator withthe given serial number -p – simple product name like ‘sooner’, or a relative/absolute path to a product out directory like ‘out/target/product/sooner’. If -p is not specified, the ANDROID_PRODUCT_OUT environment variable is used, which must be an absolute path. devices   – list all connected devices device commands: adb push – copy file/dir to device adb pull – copy file/dir from device adb sync [ ] – copy host->device only if changed (see ‘adb help all’) adb shell – run remote shell interactively adb shell – run remote shell command adb emu – run emulator console command adb logcat [ ] – View device log adb forward – forward socket connections forward specs are one of: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (remote only) adb jdwp  – list PIDs of processes hosting a JDWP transport adb install [-l] [-r] – push this package file to the device and install it (‘-l’ means forward-lock the app) (‘-r’ means reinstall the app, keeping its data) adb uninstall [-k] – remove this app package from the device (‘-k’ means keep the data and cache directories) adb bugreport – return all information from the device that should be included in a bug report. adb help – show this help message adb version – show version num DATAOPTS: (no option) – don’t touch the data partition -w – wipe the data partition -d – flash the data partition scripting: adb wait-for-device – block until device is online adb start-server – ensure that there is a server running adb kill-server – kill the server if it is running adb get-state – prints: offline | bootloader | device adb get-serialno – prints: adb status-window – continuously print device status for a specified device adb remount – remounts the /system partition on the device re ad-write adb root – restarts adb with root permissions networking: adb ppp [parameters] – Run PPP over USB. Note: you should not automatically start a PDP connection.

refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1 [parameters] – Eg. defaultroute debug dump local notty usepeerdns adb sync notes: adb sync [ ]

can be interpreted in several ways:

  • If is not specified, both /system and /data partitions will be updated.
  • If it is “system” or “data”, only the corresponding partition is updated.

adb命令拷贝文件

Posted on

adb命令拷贝文件

To copy dirs, it seems you can use

adb pull if you want to copy file/dir from device, and

adb push to copy file/dir to device. Alternatively, just to copy a file, you can use a simple trick:

cat source_file > dest_file .

Note that this does not work for user-inaccessible paths.

To edit files, I have not found a simple solution, just some possible workarounds. Try this, it seems you can (after the setup) use it to edit files like

busybox vi . Nano seems to be possible to use to.

用JAVA通过LDAP修改AD用户密码注意事项

Posted on

用JAVA通过LDAP修改AD用户密码注意事项 - 一事无成 - ITeye技术网站

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼

招聘 搜索

您还未登录 ! 登录 注册

lxs647

vi / vim 删除以及其它命令 **

删除一行:dd

删除一个单词/光标之后的单词剩余部分:dw

删除当前字符:x

光标之后的该行部分:d$

文本删除

dd 删除一行

d$ 删除以当前字符开始的一行字符

ndd 删除以当前行开始的n行

dw 删除以当前字符开始的一个字

ndw 删除以当前字符开始的n个字

D 与d$同义

d) 删除到下一句的开始

d} 删除到下一段的开始

d回车 删除2行

ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。 d0 删至行首。 d$ 删至行尾。 ndd 删除当前行及其后 n-1 行。 x 或 X 删除一个字符。 Ctrl+u 删除输入方式下所输入的文本。 ^R 恢复u的操作 J 把下一行合并到当前行尾 V 选择一行 ^V 按下^V后即可进行矩形的选择了 aw 选择单词 iw 内部单词(无空格) as 选择句子 is 选择句子(无空格) ap 选择段落 ip 选择段落(无空格) D 删除到行尾 x,y 删除与复制包含高亮区 dl 删除当前字符(与x命令功能相同) d0 删除到某一行的开始位置 d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符) dw 删除到某个单词的结尾位置 d3w 删除到第三个单词的结尾位置 db 删除到某个单词的开始位置 dW 删除到某个以空格作为分隔符的单词的结尾位置 dB 删除到某个以空格作为分隔符的单词的开始位置 d7B 删除到前面7个以空格作为分隔符的单词的开始位置 d) 删除到某个语句的结尾位置 d4) 删除到第四个语句的结尾位置 d( 删除到某个语句的开始位置 d) 删除到某个段落的结尾位置 d{ 删除到某个段落的开始位置 d7{ 删除到当前段落起始位置之前的第7个段落位置 dd 删除当前行 d/text 删除从文本中出现“text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容 dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容 dtc 删除当前行直到下一个字符“c”所出现位置之间的内容 D 删除到某一行的结尾 d$ 删除到某一行的结尾 5dd 删除从当前行所开始的5行内容 dL 删除直到屏幕上最后一行的内容 dH 删除直到屏幕上第一行的内容 dG 删除直到工作缓存区结尾的内容 d1G 删除直到工作缓存区开始的内容

在Vi 中移动光标

k 上 h l 左 右 j 下 ^ 移动到该行第一个非空格的字符处 w 向前移动一个单词,将符号或标点当作单词处理 W 向前移动一个单词,不把符号或标点当作单词处理 b 向后移动一个单词,把符号或标点当作单词处理 B 向后移动一个单词,不把符号或标点当作单词处理 ( 光标移至句首 ) 光标移至句尾 { 光标移至段落开头 } 光标移至段落结尾 H 光标移至屏幕顶行 M 光标移至屏幕中间行 L 光标移至屏幕最后行 0 到行首 $ 到行尾 gg 到页首 G 到页末 行号+G 跳转到指定行 n+ 光标下移n行 n- 光标上移n行 Ctrl+g 查询当前行信息和当前文件信息 fx 向右跳到本行字符x处(x可以是任何字符) Fx 向左跳到本行字符x处(x可以是任何字符) tx 和fx相同,区别是跳到字符x前 Tx 和Fx相同,区别是跳到字符x后 C-b 向上滚动一屏 C-f 向下滚动一屏 C-u 向上滚动半屏 C-d 向下滚动半屏 C-y 向上滚动一行 C-e 向下滚动一行 nz 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

进入和退出Vi命令

vi filename 打开或新建文件,并将光标置于第一行首 vi +n filename 打开文件,并将光标置于第n行首 vi + filename 打开文件,并将光标置于最后一行首 vi +/pattern filename 打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename 在上次正用vi编辑时发生系统崩溃,恢复filename vi filename ... filename 打开多个文件,依次进行编辑 ZZ 退出vi并保存 :q! 退出vi,不保存 :wq 退出vi并保存

重复操作

. 重复上一次操作

自动补齐

C-n 匹配下一个关键字 C-p 匹配上一个关键字

插入

o 在光标下方新开一行并将光标置于新行行首,进入插入模式。 O 同上,在光标上方。 a 在光标之后进入插入模式。 A 同上,在光标之前。 R 进入替换模式,直到按下Esc set xxx 设置XXX选项。

行合并

J 把下面一行合并到本行后面

Vi中查找及替换命令

/pattern 从光标开始处向文件尾搜索pattern ?pattern 从光标开始处向文件首搜索pattern n 在同一方向重复上一次搜索命令 N 在反方向上重复上一次搜索命令 % 查找配对的括号 :s/p1/p2/g 将当前行中所有p1均用p2替代,若要每个替换都向用户询问则应该用gc选项 :n1,n2s/p1/p2/g 将第n1至n2行中所有p1均用p2替代 :g/p1/s//p2/g 将文件中所有p1均用p2替换 ./*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"\"

查找的一些选项

设置高亮

:set hlsearch 设置高亮 :set nohlsearch 关闭高亮 :nohlsearch 关闭当前已经设置的高亮

增量查找

:set incsearch 设置增量查找 :set noincsearch 关闭增量查找

在Vi中删除

x 删除当前光标下的字符 dw 删除光标之后的单词剩余部分。 d$ 删除光标之后的该行剩余部分。 dd 删除当前行。 c 功能和d相同,区别在于完成删除操作后进入INSERT MODE cc 也是删除当前行,然后进入INSERT MODE

更改字符

rx 将当前光标下的字符更改为x(x为任意字符) ~ 更改当前光标下的字符的大小写

键盘宏操作

qcharacter 开始录制宏,character为a到z的任意字符 q 终止录制宏 @character 调用先前录制的宏

恢复误操作

u 撤销最后执行的命令 U 修正之前对该行的操作 Ctrl+R Redo

在Vi中操作Frame

c-w c-n 增加frame c-w c-c 减少frame c-w c-w 切换frame c-w c-r 交换两个frame

VIM中的块操作

Vim支持多达26个剪贴板 选块 先用v,C-v,V选择一块,然后用y复制,再用p粘贴。 yy 复制当前整行 nyy 复制当前行开始的n行内容 ?nyy 将光标当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 ?nyw 将光标当前行及其下n个词保存到寄存器?中,其中?为一个字母,n为一个数字 ?nyl 将光标当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 ?p 将寄存器?中的内容粘贴到光标位置之后。如果?是用yy复制的完整行, 则粘贴在光标所在行下面。这里?可以是一个字母,也可以是一个数字 ?P 将寄存器a中的内容粘贴到光标位置之前。如果?是用yy复制的完整行, 则粘贴在光标所在行上面。这里?可以是一个字母,也可以是一个数字 ay[motion] ay$ 复制光标位置到行末并保存在寄存器a中 ayft 复制光标位置到当前行第一个字母t并保存在寄存器a中

以上指令皆可去掉a工作,则y,p对未命名寄存器工作(所有d,c,x,y的对象都被保存在这里)。

剪切/复制/粘贴

所有删除的内容自动被保存,可以用p键粘贴

Vi的选项设置

all 列出所有选项设置情况 term 设置终端类型 ignorance 在搜索中忽略大小写 list 显示制表位(Ctrl+I)和行尾标志($) number 显示行号 report 显示由面向行的命令修改过的数目 terse 显示简短的警告信息 warn 在转到别的文件时若没保存当前文件则显示NO write信息 nomagic 允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan 禁止vi在搜索到达文件两端时,又从另一端开始 mesg 允许vi显示其他用户用write写到自己终端上的信息

tips

对代码自动格式化 gg=G

在vi/vim中,跳到文件首尾快捷键:

文件开始:shift + g

文件结束:g g

from:http://dsec.pku.edu.cn/~jinlong/vi/Vi.html

from:http://www.caole.net/diary/vim.html/#sec-1 分享到:

linux 中的ln命令 | Flex 中很幽灵的一个bug(2)

评论

发表评论

您还没有登录,请您登录后再发表评论

lxs647的博客

lxs647

  • 浏览: 70685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
  • 最近访客 更多访客>>

michael_roshen的博客

michael_roshen

yaoyao19851023的博客

yaoyao19851023 oneis1_gma的博客

oneis1_gma

liuhongyansn的博客

liuhongyansn

文章分类

存档分类