工欲善其事,必先利其器——学会不将就,让自己事半功倍!

最后更新于:2022-04-02 00:36:20

工欲善其事,必先利其器。磨刀不误砍柴工。这些成语、俗语都告诉我们做事情前,先把用到的工具打理好,用起来才会得心应手,工作起来才会事半功倍!古代如此,在信息化的今天更是如此。 作为一个程序员,每天的工作就是敲代码,合理的配置我们所用的IDE,会让我们的工作事半功倍。有的人可能会说,现在的IDE都非常的智能了,不需要我们自己手动配置了。的确现在的工具真的是越来越好用,几乎所有的常用开发工具都有智能提示、自动补全代码等贴心功能,为我们的工作带来了很大的方便,但仍有一些重复的工作需要我们手动来完成。像我们在新建类的时候,经常会需要加入自己或公司的信息、版权、以及创建时间等信息,而这些东西一般都是固定的,所以我们就可以建一个模板,每次新建类的时候这些信息就会自动生成。不光是类,接口、CSS文件、等等都可以。而且不光是在写代码的时候可以用到这种方法,在平时的工作中同样适用,例如我们经常会发邮件,而工作中的邮件通常格式是比较固定的,所以我们就可以建一个模板等等,还有什么Word等Office产品都可以通过类似的设置,让我们的工作变得轻松。 其实最重要的是这种不将就的思想,如果一件事情重复做了两遍以上,那么我们就应该想想,是不是有什么方法可以让我们不再重复。一般情况下是会有的。好了切入正题吧,用具体的例子来进一步说明这种思想的好处吧。 1.打开安装目录下Class.zip所在的目录: 32位 C:\ProgramFiles\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Code\2052 64位 C:\ProgramFiles(x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Code\2052 将Class.zip里面的Class.cs文件修改成自己需要的内容,下面是我自己修改的类: ~~~ /********************************** * 创建人:刘水镜 * 时间:$time$ * 说明: * 博客:http://blog.csdn.net/liushuijinger ***********************************/ using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ >= 3.5)using System.Linq; $endif$using System.Text; namespace $rootnamespace$ { public class $safeitemrootname$ { } } ~~~ 其中以“$xxx$”为模板变量,例如上面的$time$在新建类的时候就会显示当前的系统时间,具体的变量说明会在下面进一步说明。 接下来的工作就是将修改的类注册一下,好让VS能够识别:  2.打开Visual Studio 2010 命令提示(单击“开始”,指向“所有程序”、“MicrosoftVisual Studio 2010”和“Visual Studio Tools”,然后单击“Visual Studio 命令提示(2010)”),执行 “devenv/InstallVsTemplates”。等待一小会儿,就可以打开VS2010,然后创建一个项目,添加一个类看看就知道结果了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/5aceb44c334d1bbba279e5c71b559fc1_237x389.png) 貌似红框里的四个都可以,我用的是第四个,有兴趣可以试试其他的。 下面是模板中所能识别的参数以及说明:

Parameter

说明

clrversion

公共语言运行时 (CLR)的当前版本。

GUID [1-10]

用于替换项目文件中的项目 GUID GUID。 guid1))。

itemname

用户在添加新项对话框中提供的名称。

machinename

当前的计算机名称(例如,Computer01)。

projectname

用户在新建项目对话框中提供的名称。

registeredorganization

HKLM\Software\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization中的注册表项值。

rootnamespace

当前项目的根命名空间。 此参数用于仅在要添加到项目中的项中替换命名空间。

safeitemname

用户在“添加新项”对话框中提供的名称,名称中移除了所有不安全的字符和空格。

safeprojectname

用户在“新建项目”对话框中提供的名称,名称中移除了所有不安全的字符和空格。

time

DD/MM/YYYY 00:00:00格式表示的当前时间。

userdomain

当前的用户域。

username

当前的用户名。

webnamespace

当前网站的名称。 在 Web窗体模板中使用此参数以确保类名称是唯一的。 如果网站位于 Web服务器的根目录下,则此模板参数将解析为 Web服务器的根目录。

year

YYYY格式表示的当前年份。

**注意:模板参数区分大小写!** 郑重声明:写这篇博客主要不是为了教大家如何自定义类模板,而是通过这件事情跟大家说明一个道理,就是不将就的精神。如果单纯的写如何自定义类模板,那一点意义都没有,因为这个东西随便在网上都能找到。而我们缺少的往往是这种思想,有了思想的指引,行动起来方向才会更加明确,才会让我们更加有效率。 不将就,我们才能提高,才能不断超越自己,如果安于现状,我们只会停滞不前,甚至倒退。俗话说:学如逆水行舟,不进则退嘛。所以要想不断进步,不断超越自己这种不将就的精神是必不可少的。看过这篇博客后大家跟我一起不将就,一起进步,一起提高吧!
';

PV操作简单理解

最后更新于:2022-04-02 00:36:17

进程通常分为就绪、运行和阻塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/69be931e11fabca03b73985957400d0a_370x249.jpg) 进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。 **信号量** 信号量是最早出现的用来解决进程同步与互斥问题的机制。  信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程。信号量的值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。 注意,信号量的值只能由PV操作来改变。      **关于PV操作容易产生的一些疑问:** **1,S大于0那就表示有临界资源可供使用,为什么不唤醒进程?** S大于0的确表示有临界资源可供使用,也就是说这个时候没有进程被阻塞在这个资源上,所以不需要唤醒。 **2,S小于0应该是说没有临界资源可供使用,为什么还要唤醒进程?** V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使S加1,以通知其它的进程,这个时候如果S<0,表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“转手”该类资源。比如,有两个某类资源,四个进程A、B、C、D要用该类资源,最开始S=2,当A进入,S=1,当B进入S=0,表明该类资源刚好用完, 当C进入时S=-1,表明有一个进程被阻塞了,D进入,S=-2。当A用完该类资源时,进行V操作,S=-1,释放该类资源,因为S<0,表明有进程阻塞在该类资源上,于是唤醒一个。 **3,如果是互斥信号量的话,应该设置信号量S=1,但是当有5个进程都访问的话,最后在该信号量的链表里会有4个在等待,也是说S=-4,那么第一个进程执行了V操作使S加1,释放了资源,下一个应该能够执行,但唤醒的这个进程在执行P操作时因S<0,也还是执行不了,这是怎么回事呢?** 当一个进程阻塞了的时候,它已经执行过了P操作,并卡在临界区那个地方。当唤醒它时就立即进入它自己的临界区,并不需要执行P操作了,当执行完了临界区的程序后,就执行V操作。 **4,S的绝对值表示等待的进程数,同时又表示临界资源,这到底是怎么回事?** 当信号量S小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目.S大于0时表示可用的临界资源数。注意在不同情况下所表达的含义不一样。当等于0时,表示刚好用完。 以上就是我对PV操作的一些肤浅理解,还请多多指教。
';

页面置换、作业调度、进程调度小剖析

最后更新于:2022-04-02 00:36:15

页面置换、作业调度和进程调度他们之间有很多相似的地方,作业跟进程调度之间尤为相似,之前一直搞不清他们之间的区别跟联系,你是不是也跟我有一样的感受呢?看完这篇文章或许会让你对他们有更清晰的认识。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/cb18e0127957b3e9c8979996c69739cc_546x299.jpg) **页面置换算法:** 1,先进先出:淘汰最早进入cache的信息块。 2,最近最久未使用:淘汰近期使用频率最低的信息块。 3,随机替换:用随机数发生器随机产生一个信息块号,然后淘汰掉。 4:优化替换:此方法必须先执行一次程序,然后根据cache替换情况对接下来的信息块进行替换。 5:最佳置换:淘汰规则是将以后永远不会用到或者最长时间不会用到的信息块淘汰掉。此方法能够最大限度的减少缺页率,但是这是一种理想的方法,现实是无法实现的,只能作为其他置换算法的一个衡量标准。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a2e3eb311657216d339d65ddded13a01_542x299.jpg) **作业调度:** 1,先来先服务:按作业的到达时间进行调度,先到达先调度。 2,最短作业优先:优先执行所需时间最短的作业。 3,优先数:优先执行优先级高的作业。 4,最高响应比优先:优先执行响应比高的作业。响应比=(等待时间+计算时间)/计算时间。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/b32485fd2034487bbfe7edf75fba3368_531x299.jpg) **进程调度:** 1,先进先出:跟作业调度的先来先服务差不多,先执行最先进入就绪队列的进程。 2,最短优先:跟作业调度的短作业优先差不多,优先执行所需时间最短的进程。 3,最高响应比:跟作业调度的最高响应比差不多,优先执行响应比高的进程。响应比=(等待时间+要求服务的时间)/要求服务的时间。 4,优先级:跟作业调度的优先级算法差不多,优先执行优先级高的进程。 5:,时间片轮转:按照先进先出的规则给进程分配时间片,时间片结束后不管有没有执行完,都将执行下一进程。 看到这里,大家会发现作业调度跟进程调度是如此的相似,那么他们之间到底有什么关系呢?一起看下面这张图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3c18c7e9786bf8b6f8a90da6147b858a_584x250.jpg) 由上图可以看出,作业调度跟进程调度是密切相关的,首先进行作业调度将使之进入就绪队列,然后进行进程调度,或者进程执行完毕继续下面的进程,或者挂起等待下一轮的调度。下面结合生活中的例子分析一下两级调度。 第一级的作业调度是会将一批作业同时装入内存,以淋浴公共澡堂为例,里面可能只有1个水龙头,但可以一次让三四个人一起进去洗,因为洗澡的人并不是总要占着水龙头,只要相互错开就行了。那么澡堂就可以规定一次进三个人,三个洗完,再进三个。 第二级调度就是进程调度了,三个人同时用水龙头,那这个水龙头就相当于CPU,当然也可以多个水龙头,那就是多处理器了。洗的过程中,三个人可能有的在搓澡,有的在帮别人搓澡,也有可能都打完香皂就等冲水了,那让谁用水龙头呢?一般就是排先后,先申请的先用原则,但也不一定,比如有一个人说给我十秒钟冲一下就洗完了,那就是个短作业,不妨让他先用,洗完他就走了,这样大家的平均等待时间会缩短,也算是提高了效率;再就是有一个人可能在洗的过程中突然被洗发水迷了眼,所以需要赶紧冲一下,这就是高优先级的作业了,不同优先级之间,先可着高优先级的进行调度,这也是一种原则。所以总的来说,进程调度是在多个就绪进程中按一定的策略选出当前应执行的进程,合适与否,是按一定的策略遴选出来的。 我的理解大概就这些,不知道看完以后是不是对你有帮助,大家有什么更好的理解希望不吝赐教!
';

深入浅出说编译原理(一)

最后更新于:2022-04-02 00:36:13

个人认为编译原理对于一个程序员来说很重要,可能你认为编程的时候用的都是C++、C#、Java等高级语言,至于编译原理懂与不懂并无大碍。其实不然,所谓万变不离其宗,所有高级语言的诞生都是基于最根本的编译原理的。搞懂了编译原理,对于一个程序员的能力提升有着很大的帮助。因为它会让你对编程有更加深刻的理解,有助于你写出质量更高的代码。好废话不多说,切入正题! 本文主要说一下编译原理里的文法、正规式、有穷自动机和语法推导树。 **文法** 文法就是计算机语言的一个严格的规范,有点类似人类语言的语法。就像形容词修饰名词,副词修饰形容词跟动词类似,只不过计算机的文法的标准和规范更加的严格而已。 文法的表达式:G=(Vn,Vt,P,S)  Vn是非终结符的集合,Vt是终结符的集合,P是推导式的一个集合,S是开始符。 文法中有三种符号和四种文法类型: 三种符号为:开始符——S;非终结符——A、B、C、AB等;终结符——a、b、c等。其实说白了开始符就是Start的缩写,非终结符就是大写字母或大写字母的组合(开始符S也是非终结符),终结符就是小写字母或小写字母的组合。 文法共分为四种,即0型文法——短语文法;1型文法——上下文有关文法;2型文法——上下文无关文法;3型文法——正规文法。 四个文法类的定义是逐渐增加限制的,即每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是短语文法。称0型文法产生的语言为0型语言。上下文有关文法、上下文无关文法和正规文法产生的语言分别称为上下文有关语言、上下文无关语言和正规语言。 **注意:除0型文法以外,每一种文法都必须符合上一种文法。** **0型文法:** 书中的定义:设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈( VN∪VT )*且至少含有一个非终结符,而β∈( VN∪VT )*,则G是一个0型文法。 通俗的解释:即产生式左边至少有一个大写字母,右边随意。 **1型文法:** 书中的定义:设G=(VN,VT,P,S),若P中的每一个产生式α→β均满足|β|≥|α| ,仅仅S→ε除外,则文法G是1型文法。 通俗的解释:即产生式右边的字母个数必须大于等于左边的字母个数。 **2型文法:** 书中的定义:设G=(VN,VT,P,S),若P中的每一个产生式α→β满足:α是一非终结符,β∈( VN∪VT )*则此文法称为2型文法。 通俗的解释:即产生式左边必须完全都是大写字母。 **3型文法:** 书中的定义:设G=(VN,VT,P,S),若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a是终结符,则G是3型文法。 通俗的解释:即所有产生式右边要么没有大写字母,如果有必须全部在小写字母右边或者全部在小写字母左边也就是要保持线性一致。 **正规式** 正规式是由正规文法转换而来,它们之间的转换规则共有三条: 规则1:正规文法(A—>xB,B->y ),正规式(A=xy)。这点很简单,用小学的数学知识就可以解决!如:A=xB,B=y,那么A=xy。 规则2:正规文法(A—>xA|y),正规式(A=x*y)。这是一个递归,它其实是——正规文法(A—>xA,A—>y),因为A—>xA,而右边的A又可以有A—>xA,所以就可以无限循环下去,最终还是要有结尾的,要不就没法表示了,所以有A=x*y,表明有无穷个x并以y结尾。 规则3:A—>x,A->y。那么A=x|y。这个就很简单了,不过多解释了。 其实上面说的那些话完全可以用下面一个表来代替,简单而又明了,哈哈! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/1f0ece29ddc85c77b4ce5dd29f088586_416x158.jpg) 有穷自动机跟语法推导树留到下一篇博客再为大家讲解吧!敬请期待!
';

深入浅出说流水线

最后更新于:2022-04-02 00:36:11

![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/68c1e1df18c83fb7edb10f9f149ab0a5_723x134.png) 注意:1 是准并行,不是真正的并行。2 流水线提高的是部件的利用率和指令的平均执行速度,单个指令执行的速度没有提高。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0d48dbd24cd67454298e5a56b9b1aff0_448x80.png) 流水线指令的特点:用流水线执行的指令都是相同的操作指令,而且它们可以分成如上图一样若干相同的步骤。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a194708809c0e8a44158dd76f0267774_485x259.png) 由上图可以清楚的看出,在未使用流水线的情况下,三条指令之间的那些蓝色空白设备都处于空闲状态,这些时间就都浪费掉了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/80dd89b404f0e0709905f615405125e4_477x300.png) 而采用流水线以后,所用时间由原来的9t缩短到5t,节省了进一半的时间。很大的提高了设备的利用率,缩短了整体的时间,不过此时单个指令执行的时间还是3t。因为流水线不能改变单个指令的时间。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6141bcd0c2a6450135aee12b31aebdfb_560x213.png) 其中Δtj为流水线周期。 上图所示就是流水线运行时间的计算公式,看起来很复杂其实非常简单。就是:执行一条指令的时间+(指令条数-1)×流水线周期。还有一种计算方法,是用一条指令所分的段数×流水线的周期+(指令条数-1)×流水线周期,软考中一般做题的时候首先按照公式去求,如果选项里面没有再按第二种方法去求。选项里面不会同时出现这两种方式计算出的结果。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9e6452e1f8128df917723134c5ef8406_416x177.png) 第二种方法把一条指令每一段的执行时间都当成了流水线的周期来计算,可以看成一种粗略的计算方式。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/fecbad5df6019d1899d7ce0eb59bed87_507x248.jpg) 而公式法是计算的每一段的具体时间,相对第二种方法来说更加的准确,所以默认先用公式求解。 了解了这些流水线也就解决了,其他什么吞吐率、加速比就太简单了。不在此赘述了。
';

你知道为什么计算机中的数据使用补码来表示和运算吗?

最后更新于:2022-04-02 00:36:08

总所周知,计算机内部的所有数都是以二进制的形式存在的。而二进制在计算机里又有多种编码方式——原码、反码、补码等。而在这些编码方式里面用得最多的不是最简单、最直接的原码而是补码。这是为什么呢?想搞懂这个问题首先得明白什么是原码、反码以及补码,如果你对他们还不太了解,那就先看看我另一篇博客——[原码、反码、补码其实很简单](http://blog.csdn.net/liushuijinger/article/details/7429197)。如果你对他们已经很熟悉,那么我们继续往下看。 A、B、C三种相似的东西,选C而不选A和B,那么C肯定具有其他两者所没有的优势。那么补码究竟有什么优势让他备受青睐呢?下面我们具体的分析一下: **原码:** 原码的特点就是编码简单直观,与真值转换非常方便。既然原码这么好,那为什么不选他而选补码呢?接下来就是不选他的关键所在,虽然原码非常的简单直观,但是当用原码表示0的时候就会出问题。0用原码表示分为+0和-0,当机器字长为8时, **[+0]原=00000000,[-0]原=10000000。** 这就有问题了,同一个数却有两种表示,产生了二义性,从而给机器判断0带来了麻烦;二是用原码运算时,符号位需要单独处理,而且运算规则很复杂。例如加法运算,若两个数异号,则先要让绝对值大的数减去绝对值小的数,然后把绝对值大的数的符号付给结果。还有就是,借位操作如果用计算机硬件实现起来是很困难的。正是因为原码有这些不足之处,才促使人们研究其他的编码方法。 **反码:** 反码很少会被用到,他主要的用途就是作为原码与补码的一个桥梁。他和原码一样对0有两种表示方法, **[+0]反=00000000,[-0]反=11111111。** 不采用反码的原因跟原码差不多,就不赘述了。 **补码:** 说到补码,就不得不引人另一个概念——模数。模数从屋里意义上讲是某种计量器的容量。这里我们经常举的一个例子就是钟表,其模数为12,即每到12就重新从0开始,数学上叫取模或求余(mod),java、C#和C++里用%表示求余操作。例如: **14%12=2** 如果此时的正确时间为6点,而你的手表指向的是8点,如何把表调准呢?有两种方法:一把表逆时针拨两个小时;二是把表顺时针拨10个小时,即 **8-2=6** **(8+10)%12=6** 也就是说在此模数系统里面有 **8-2=8+10** 这是因为2跟10对模数12互为补数。因此有一下结论:在模数系统中,A-B或A+(-B)等价于A+[B补],即 **8-2/8+(-2)=8+10** 我们把10叫做-2在模12下的补码。这样用补码来表示负数就可以将加减法统一成加法来运算,简化了运算的复杂程度。 采用补码进行运算有两个好处,一个就是刚才所说的统一加减法;二就是可以让符号位作为数值直接参加运算,而最后仍然可以得到正确的结果符号,符号位无需再单独处理。 以上就是我对原码、反码、补码的一些肤浅理解,希望对大家有所帮助,同时欢迎各位高手不吝赐教!感激不尽! [](http://blog.csdn.net/liushuijinger/article/details/7429197)
';

原码、反码、补码和移码其实很简单

最后更新于:2022-04-02 00:36:06

最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义如下(n是机器字长): 原码: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/35e9d99bcd84e1893427c52adbeb3da1_681x173.png) 反码: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/b1eb9447bb8a0568629d3487ade72df7_645x149.png) 补码: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c887c3b658e55407fc331db1a7330f2a_725x168.png) 移码: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3640126b5145b4a053d049f572bdd518_709x66.png) 看完这些定义以后,我的脑袋瞬间膨胀到原来的二倍!这样变态的公式不管你记不记得住,反正我是记不住!还好以前对它们有所了解,否则看到这一堆公式恐怕我早就放弃参加软考的念头喽。 其实没必要弄得这么麻烦,它们完全可以用一两句话就描述的很清楚。 **原码:** 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。 例如: X=+101011 , [X]原= 00101011    X=-101011 , [X]原= 10101011  位数不够的用0补全。 PS:正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。 **反码:** 知道了什么是原码,那反码就更是张飞吃豆芽——小菜一碟了。知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码,为什么呢?因为反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。 例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100 **补码:** 补码也非常的简单就是在反码的基础上按照正常的加法运算加1。 例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101 PS:0的补码是唯一的,如果机器字长为8那么[0]补=00000000。 **移码:** 移码最简单了,不管正负数,只要将其补码的符号位取反即可。 例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101 **PS:非常感谢12楼对负数补码的补充** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/5154b5d2a07aaffde2f0eb7aa641dadc_735x115.jpg) **以上内容只适合初学者参考,高手勿喷,有说的不对的地方欢迎指出,感激不尽!**
';

献给和我一样的Java初学者——用UltraEdit代替“笨重”的IDE,实现轻巧编程!

最后更新于:2022-04-02 00:36:04

本来下半年才会学习Java,不过因为提前参加软考,所以从前一阵子开始接触Java。学习一门语言,敲代码自然是必不可少的工作了。众所周知,eclipse是一款非常好用的Java编译器,But杀鸡焉用牛刀,对于初学者而言,本人感觉eclipse不是非常适合,当然这只是个人感觉而已。所以今天向大家介绍一款非常轻巧的编辑器—— UltraEdit。 编写Java程序需要建立Java开发环境,其中Sun的Java SDK是必不可少的。可以去Sun的官网下载,在此不再赘述。安装好SDK后需要简单配置一下环境变量: 1.右击我的电脑,选择属性(或者按 “Win+Pause Break”) 2.选择高级 3.选择环境变量(系统变量) 以下变量名如果没有就点新建,有就点编辑(两个路径之间用英文分号隔开),变量值是引号里面的内容: 4.新建 变量名:JAVA_HOME  变量值:“C:\Program Files (x86)\Java\jdk1.7.0” 5.新建 变量名:PATH  变量值:“C:\Program Files (x86)\Java\jdk1.7.0\bin;%JAVA_HOME%\bin ” 6.新建 变量名:CLASSPATH  变量值:“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar” 配置好以后就要测试一下是否成功 1:WIN+R 组合键弹出命令运行窗口(或则“开始->运行”) 2:输入命令 CMD  回车  3: 在弹出的 DOS 窗口内输入:java -version 会出现版本信息,输入: javac出现 javac 的用法信息 (有很多用法)如果如下图所示则表示配置成功,反之则配置失败 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/4e58c35c9e742f436cfb3d8e0a083716_639x610.png) 配置完环境变量以后就该设置UltraEdit了: 首先将UltraEdit下载并安装, ### 一、定义“编译java程序” 如图: 1、打开 高级->工具栏配置  ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c57eca9bfadc7566d0988ce87cddfd44_377x371.png) 2、我们先定义编译java的工具,先点击“插入” 按钮 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/5dabd4d7eb393c1b67ba96fde0983cb7_449x398.png) 3、在“菜单项目名称”上输入“编译java程序”(显示在菜单上的名称) 4、在“命令行”里输入javac %n%e(%n为文件名不带扩展名,%e为扩展名)  5、在“工作目录”上填 %p (表示文件所在目录,工具栏位图可以不添)  6、切换到“输出”项 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ef11868a3dff1cd2e7f8ed31d6dc13ae_449x398.png) 7、选择“输入到列表框”,表示讲命令的结果输出到列表框上,选择“捕获输出”复选框,表示讲执行的结果捕获,输出到下面的输出框里  8、点击“应用”按钮,“确定”,一个编译的菜单就做好了  下面都大同小异就不上图了 ### 二、定义“运行java程序”  同样的方法可以做运行java的菜单:  1、在“菜单项目名称”上输入“运行java程序”(显示在菜单上的名称) 2、在“命令行”里输入 java %n (%n为文件名不带扩展名,%e为扩展名) 3、在“工作目录”上填 %p (表示文件所在目录)   余下步骤和第一个配置一样 现在你打开高级菜单,发现最下面多了二个你刚才定义的菜单;  ### 三、定义“编译+运行java程序”  根据上面的方法,你还可以定义其他工具比如定义一个把编译和运行合在一起的菜单,做一个批处理的文件run.bat,放在C:盘(其他地方也可以),内容如下  javac %1.java  java %1  然后按照上面的方法:  1、在“菜单项目名称”上输入“编译+运行java程序”(显示在菜单上的名称) 2、在“命令行”里输入 C:\run.bat %n (%n为文件名不带扩展名,%e为扩展名) 3、在“工作目录”上填 %p (表示文件所在目录)  余下步骤和第一个配置一样 ### 四、自动完成  一般软件上都有自动完成的功能,UltraEdit也可以实现  1、先讲java中的关键字,各种类名,方法等名称写到一个文本文件上,以如下方式  class  private  public  ...........  然后存为文本,命名为“java.txt” 2、选择菜单“高级->配置”,在“编辑器”中选中“自动完成”,把“自动显示自动完成对话框”打上勾选中“自动换行/制表符设置”,在“自动完成文件”中选择存放文本java.txt的路径,这是当你在输入单词的时候会自动弹出你所自定义的单词,很方便。。。。。。。 同样UltraEdit也可以为自定义的菜单设置热键, 高级-》配置-》热键映射 找到 高级-用户工具1和用户工具2,自己可以分配自己喜欢的热键了。 就写这么多吧,UltraEdit还有很多很强大的功能,如果你喜欢研究,不将就那你就去探索吧!肯定会有意想不到的惊喜,祝各位像我一样的菜鸟们学习进步!
';

Windows 8 傻瓜式安装教程

最后更新于:2022-04-02 00:36:02

29号晚上将Windows8-ConsumerPreview下载下来了,由于太晚了所以没有安装,所以今天晚上将win8安装一次! 首先去微软官网将ISO文件下载下来,分为32bit跟64bit两个版本,因人而异,根据自己的需要下载。传送门[Windows8镜像下载](http://windows.microsoft.com/en-US/windows-8/iso) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/5dea4adfef317758fbad652cefc222b9_840x197.gif) 下载完以后解压(解压到一个盘的根目录下,而且这个盘必须是非Win8安装盘,就是说你不打算把Win8安到这个盘里),然后下载一个引导文件[Win6Ins_v1.2.0.62](http://download.csdn.net/detail/liushuijinger/4116230) ,然后将此引导文件跟解压出的放到之前Win8解压的目录下。然后双击,如下图 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d3b6838dfd822127042fb180c6ce61e0_440x415.gif) 点击“安装”按钮,如下图 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a21f46864684b66ab11be725bb2cdf3b_440x415.gif) 按照提示,重启电脑。之后系统会提示你是进入原来的系统还是从硬盘启动另一个系统。大概写的是“windows xp,vista,7 from hard disk”之类的话。总之一看就明白了! 接下来我们可以做的主要就是等待了... ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/64c320d672f8d24f79eb7219823970ab_1024x768.gif) 下面的界面我们很熟悉了,跟Win7相差不大... 直接下一步! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c5c97e3a0996c9e0893a77f42f57a3ed_1024x768.gif) 输入密钥——WNP7G-QRYW7-RPCJP-P234C-W2JX8 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/afb7d7643275658b67de006595c15d32_1024x768.gif) 下面该选择将要安装Win8的磁盘了,这一步跟WIn7几乎一样,我就不过多说了 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e4007fd174dc2f66ea3a3b825e0a5e77_1024x768.gif) 静静的等待... ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/7fe64ccc0b3a5d1ae5d30de784aed726_1024x768.gif) 重启后准备桌面! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/551e433933fd9dd7b6c54ddab9fe2fad_1024x768.gif) 设置背景跟计算机名 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/10be4d36fc6fc94cea627093ffd4e6d3_1024x768.gif) 一些常规设置,自己看着来 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0370c75e6df10b09ff5f9308fa49dda8_1024x768.gif) 欢迎界面,激动人心的时刻! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/292ede3b6c781191b0ce6d40914f07c4_1024x768.gif) 终于来到了我们期盼已久的Metro界面了!好了可以尽情享受了! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9ccfb582d280a28eb54f7b2e8070751c_1024x768.gif) 当然如果你不适应Win8的Metro界面还以按“Win”键切换回传统界面 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/56791f131e354b91c6e6a0f8601021bf_1024x768.gif) 当然传统界面也有了一些变化,例如取消了“开始”按钮,资源管理器做了一些整合等等,自己慢慢去探索吧!相信Win8不会让你失望的! PS:安装过程中会重启数次,等着就行了...
';

软工写文档熟练使用word很重要——自动生成编号

最后更新于:2022-04-02 00:35:59

**软工在写文档的时候经常会写成类似下图这种格式** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/4efa1168675e0a2d580d92ff6ed0f72b_574x503.gif) **这样看起来既美观有整齐 如果自己手动敲那些序号的话 一容易丢啦 二容易格式不统一从而造成排版混乱  我只能说word是个奇迹! 至于你信不信 反正我是信了!** **只需轻轻点击几下 我们的word就会帮你完成这繁琐的工作 下面让我们一步步来** **我用的是2010所以这里就以他为例 其他版本大同小异** **首先在word的开始中看到如下图的菜单** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/02d4ce97bdb1fd1d4ecbcde8de56d6c0_640x127.gif) **点击红框里最右边那个小小的倒三角 会出现下图的下拉菜单** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/82d624b17e0b7c81089282c89e0dd7ce_365x627.gif) **然后再选择你想要的具体格式就好了** **小技巧:** 写完一行按回车在下一行生产同级编号 按Tab转换为下一级编号 按Shift+Tab转换为上一级编号 空编号状态下(就是只有编号没有内容时)按回车也可转换成上一级编号 **PS:除了这种方式还有一种比较好的方法——那就是使用Word的大纲视图 大纲视图写出来的文档非常的有层次感**
';

如何设置word的默认输入法——搜狗输入法

最后更新于:2022-04-02 00:35:57

可开Word时 默认的是微软的输入法 把微软输入法删了 默认的成了英文了 怎么改成搜狗啊 大家是不是有这个困惑呢 其实这个事情很好解决 只需简单几步就可以把word的默认输入法改成你想要的 我用的是office2010  2007的设置基本一致 我用的输入法是搜狗拼音 所以这里就以它为例 首先要把系统的默认输入法设置为搜狗(怎么设置就不用我多说了吧)然后随便打开一个word文档 或新建一个word文档 然后单击左上角的“**文件**” (07是单击“office”按钮)然后单击“选项”如图 **![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a726ceb8bded6b0144298c174b011fa4_370x466.gif)** **此时弹出一个对话框 如图** **![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/7f61c27073486652f8cd6409d838de1c_498x405.gif)** **单击“选项” 看到下图** **![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9cce931687132c5a67ab35ca85a2a059_825x560.gif)** **将“输入法控制处于活动状态”前面的勾去掉 然后一路 “确定” 然后重新启动word 再看看屏幕右下方的是不是已经变成下面这个样子了呢** **![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/f4bba5756f55ce2fbb882939e295f76a_366x231.gif)**
';

前言

最后更新于:2022-04-02 00:35:55

> 原文出处:[程序员基本功](http://blog.csdn.net/column/details/mybasic.html) 作者:[刘水镜](http://blog.csdn.net/liushuijinger) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # 程序员基本功 > 作为一个程序员必须掌握的知识,例如计算机组成、编译原理、各种计算机配置与设定、操作系统常识、数据结构、网络等
';