当下,现代化的架构世界需要聪明的程序员,程序员需要具备各种务实的技能。既然想成为程序员,首先要成为一名合格的程序员,在变身成为聪明的程序员,那么聪明程序员必知技能有哪些呢
1、集中注意力及以目标为导向
开始反思和规划自己的职业生涯。对代码应该:
保持模块化,个性化,专业化,这些方面都需要好好考虑,并且待办事项需要定期整理。
保持清洁并遵守规则,需要遵循编码规则以及自己制定的规则,并保持目标的干净和可衡量。
保持松耦合,不要将很多目标耦合到一起,保持简单和灵活才能独立地变化。
保持可衡量,保持目标基于SLA,并且每两周/每月/每季度衡量,越频繁越好。
2、推广和营销你的想法
这是最被忽略的一方面,也是最困难的一部分。你的想法需要告知他人才能被执行,而要实现这些目标,首要的是你必须将你的想法营销给他人。
讲故事是一个众所周知的用一种每个人都可以理解的方法传达思想的手段。
SapientNitro重新定义Storytelling到Storyscaping,这是一种新的讲故事的方式,它连接了体验(用于市场营销)。这也可以用于普通的讲故事中。
不断的努力&思维过程以便于想出新的&改进的做事方式。一个简单的例子就是,昌平镇电脑培训认为通过检测早期问题,Jmeter脚本来做单位级别的性能测试和降低质量成本。
与团队分享你的知识(博客或网络会议的形式),这有助于提高整个团队的工作效率,也有机会得到别人的反馈。
本篇与之前的第三篇的内存管理知识点有相似的地方
对于运行的进程来说,内存就像一个纸箱子, 仅仅是一个暂存数据的地方, 而且空间有限。如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在 外部存储 中。就像图书馆这种地方,不仅空间大,而且能够永久保存。
我们最常用的外部存储就是 硬盘 ,数据是以文件的形式保存在硬盘上的。为了管理这些文件,我们在规划文件系统的时候,需要考虑到以下几点。
第一点,文件系统要有严格的组织形式,使得文件能够 以块为单位进行存储 。这就像图书馆里,我们会给设置一排排书架,然后再把书架分成一个个小格子,有的项目存放的资料非常多,一个格子放不下,就需要多个格子来进行存放。我们把这个区域称为存放原始资料的 仓库区 。
第二点,文件系统中也要有 索引区 ,用来方便查找一个文件分成的多个块都存放在了什么位置。这就好比,图书馆的书太多了,为了方便查找,我们需要专门设置一排书架,这里面会写清楚整个档案库有哪些资料,资料在哪个架子的哪个格子上。这样找资料的时候就不用跑遍整个档案库,在这个书架上找到后,直奔目标书架就可以了。
第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有 缓存层 。这就相当于图书馆里面的热门图书区,这里面的书都是畅销书或者是常常被借还的图书。因为借还的次数比较多,那就没必要每次有人还了之后,还放回遥远的货架,我们可以专门开辟一个区域, 放置这些借还频次高的图书。这样借还的效率就会提高。
第四点,文件应该用 文件夹 的形式组织起来,方便管理和查询。这就像在图书馆里面,你可以给这些资料分门别类,比如分成计算机类文学类历史类等等。这样你也容易管理,项目组借阅的时候只要在某个类别中去找就可以了。
在文件系统中,每个文件都有一个名字,这样我们访问一个文件,希望通过它的名字就可以找到。文件名就是一个普通的文本。 当然文件名会经常冲突,不同用户取相同的名字的情况还是会经常出现的。
要想把很多的文件有序地组织起来,我们就需要把它们成为 目录 或者文件夹。这样,一个文件夹里可以包含文件夹,也可以包含文件,这样就形成了一种 树形结构 。而我们可以将不同的用户放在不同的用户目录下,就可以一定程度上避免了命名的冲突问题。
第五点,Linux 内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用 。这就好比,图书馆里会有个图书管理系统,记录哪些书被借阅了,被谁借阅了,借阅了多久,什么时候归还。
文件系统是 *** 作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。
文件系统的基本数据单位是 文件 ,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。
Linux最经典的一句话是:“一切皆文件”,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。
Linux文件系统会为每个文件分配两个数据结构: 索引节点(index node) 和 目录项(directory entry) ,它们主要用来记录文件的元信息和目录层次结构。
●索引节点,也就是inode, 用来记录文件的元信息,比如inode编号、文件大小访问权限、创建时间、修改时间、 数据在磁盘的位置 等等。 索引节点是文件的唯一标识 ,它们之间一一对应, 也同样都会被 存储在硬盘 中,所以索引节点同样占用磁盘空间。
●目录项,也就是dentry, 用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成 目录结构 ,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,不存放于磁盘,而是 缓存在内存 。
由于索引节点唯一标识一个文件,而目录项记录着文件的名,所以目录项和索引节点的关系是多对一,也就是说,一个文件可以有多个别字。比如,硬链接的实现就是多个目录项中的索引节点指向同一个文件。
注意,目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。
(PS:目录项和目录不是一个东西!你也不是一个东西(^_=), 虽然名字很相近,但目录是个文件。持久化存储在磁盘,而目录项是内核一个数据结构,缓存在内存。
如果查询目录频繁从磁盘读,效率会很低,所以内核会把已经读过的目录用目录项这个数据结构缓存在内存,下次再次读到相同的目录时,只需从内存读就可以,大大提高了 文件系统的效率。
目录项这个数据结构不只是表示目录,也是可以表示文件的。)
磁盘读写的最小单位是 扇区 ,扇区的大小只有512B大小,很明显,如果每次读写都以这么小为单位,那这读写的效率会非常低。
所以,文件系统把多个扇区组成了一个 逻辑块 ,每次读写的最小单位就是逻辑块(数据块) , Linux中的逻辑块大小为4KB,也就是一次性读写 8个扇区,这将大大提高了磁盘的读写的效率。
以上就是索引节点、目录项以及文件数据的关系,下面这个图就很好的展示了它们之间的关系:
索引节点是存储在硬盘上的数据,那么为了加速文件的访问,通常会把索引节点加载到内存中。
另外,磁盘进行格式化的时候,会被分成三个存储区域,分别是超级块、索引节点区和数据块区。
●超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等。
●索引节点区,用来存储索引节点;
●数据块区,用来存储文件或目录数据;
我们不可能把超级块和索引节点区全部加载到内存,这样内存肯定撑不住,所以只有当需要使用的时候,才将其加载进内存,它们加载进内存的时机是不同的
●超级块:当文件系统挂载时进入内存;
●索引节点区:当文件被访问时进入内存;
文件系统的种类众多,而 *** 作系统希望 对用户提供一个统一的接口 ,于是在用户层与文件系统层引入了中间层,这个中间层就称为 虚拟文件系统(Virtual File System, VFS) 。
VFS定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解VFS提供的统一接口即可。
在Linux文件系统中,用户空间、系统调用、虚拟机文件系统、缓存、文件系统以及存储之间的关系如下图:
Linux支持的文件系统也不少,根据存储位置的不同,可以把文件系统分为三类:
●磁盘的文件系统,它是直接把数据存储在磁盘中,比如Ext 2/3/4 XFS 等都是这类文件系统。
●内存的文件系统,这类文件系统的数据不是存储在硬盘的,而是占用内存空间,我们经常用到的/proc 和/sys文件系统都属于这一类,读写这类文件,实际上是读写内核中相关的数据。
●网络的文件系统,用来访问其他计算机主机数据的文件系统,比如NFS SMB等等。
文件系统首先要先挂载到某个目录才可以正常使用,比如Linux系统在启动时,会把文件系统挂载到根目录。
在 *** 作系统的辅助之下,磁盘中的数据在计算机中都会呈现为易读的形式,并且我们不需要关心数据到底是如何存放在磁盘中,存放在磁盘的哪个地方等等问题,这些全部都是由 *** 作系统完成的。
那么,文件数据在磁盘中究竟是怎么样的呢我们来一探究竟!
磁盘中的存储单元会被划分为一个个的“ 块 ”,也被称为 扇区 ,扇区的大小一般都为512byte这说明即使一块数据不足512byte,那么它也要占用512byte的磁盘空间。
而几乎所有的文件系统都会把文件分割成固定大小的块来存储,通常一个块的大小为4K。如果磁盘中的扇区为512byte,而文件系统的块大小为4K,那么文件系统的存储单元就为8个扇区。这也是前面提到的一个问题,文件大小和占用空间之间有什么区别文件大小是文件实际的大小,而占用空间则是因为即使它的实际大小没有达到那么大,但是这部分空间实际也被占用,其他文件数据无法使用这部分的空间。所以我们 写入1byte的数据到文本中,但是它占用的空间也会是4K。
这里要注意在Windows下的NTFS文件系统中,如果一开始文件数据小于 1K,那么则不会分配磁盘块来存储,而是存在一个文件表中。但是一旦文件数据大于1K,那么不管以后文件的大小,都会分配以4K为单位的磁盘空间来存储。
与内存管理一样,为了方便对磁盘的管理,文件的逻辑地址也被分为一个个的文件块。于是文件的逻辑地址就是(逻辑块号,块内地址)。用户通过逻辑地址来 *** 作文件, *** 作系统负责完成逻辑地址与物理地址的映射。
不同的文件系统为文件分配磁盘空间会有不同的方式,这些方式各自都有优缺点。
连续分配要求每个文件在磁盘上有一组连续的块,该分配方式较为简单。
通过上图可以看到,文件的逻辑块号的顺序是与物理块号相同的,这样就可以实现随机存取了,只要知道了第一个逻辑块的物理地址, 那么就可以快速访问到其他逻辑块的物理地址。那么 *** 作系统如何完成逻辑块与物理块之间的映射呢实际上,文件都是存放在目录下的,而目录是一种有结构文件, 所以在文件目录的记录中会存放目录下所有文件的信息,每一个文件或者目录都是一个记录。 而这些信息就包括文件的起始块号和占有块号的数量。
那么 *** 作系统如何完成逻辑块与物理块之间的映射呢 (逻辑块号, 块内地址) -> (物理块号, 块内地址),只需要知道逻辑块号对应的物理块号即可,块内地址不变。
用户访问一个文件的内容, *** 作系统通过文件的标识符找到目录项FCB, 物理块号=起始块号+逻辑块号。 当然,还需要检查逻辑块号是否合法,是否超过长度等。因为可以根据逻辑块号直接算出物理块号,所以连续分配支持 顺序访问和随机访问 。
因为读/写文件是需要移动磁头的,如果访问两个相隔很远的磁盘块,移动磁头的时间就会变长。使用连续分配来作为文件的分配方式,会使文件的磁盘块相邻,所以文件的读/写速度最快。
连续空间存放的方式虽然读写效率高,但是有 磁盘空间碎片 和 文件长度不易扩展 的缺陷。
如下图,如果文件B被删除,磁盘上就留下一块空缺,这时,如果新来的文件小于其中的一个空缺,我们就可以将其放在相应空缺里。但如果该文件的大小大于所
有的空缺,但却小于空缺大小之和,则虽然磁盘上有足够的空缺,但该文件还是不能存放。当然了,我们可以通过将现有文件进行挪动来腾出空间以容纳新的文件,但是这个在磁盘挪动文件是非常耗时,所以这种方式不太现实。
另外一个缺陷是文件长度扩展不方便,例如上图中的文件A要想扩大一下,需要更多的磁盘空间,唯一的办法就只能是挪动的方式,前面也说了,这种方式效率是非常低的。
那么有没有更好的方式来解决上面的问题呢答案当然有,既然连续空间存放的方式不太行,那么我们就改变存放的方式,使用非连续空间存放方式来解决这些缺陷。
非连续空间存放方式分为 链表方式 和 索引方式 。
链式分配采取离散分配的方式,可以为文件分配离散的磁盘块。它有两种分配方式:显示链接和隐式链接。
隐式链接是只目录项中只会记录文件所占磁盘块中的第一块的地址和最后一块磁盘块的地址, 然后通过在每一个磁盘块中存放一个指向下一 磁盘块的指针, 从而可以根据指针找到下一块磁盘块。如果需要分配新的磁盘块,则使用最后一块磁盘块中的指针指向新的磁盘块,然后修改新的磁盘块为最后的磁盘块。
我们来思考一个问题, 采用隐式链接如何将实现逻辑块号转换为物理块号呢
用户给出需要访问的逻辑块号i, *** 作系统需要找到所需访问文件的目录项FCB从目录项中可以知道文件的起始块号,然后将逻辑块号0的数据读入内存,由此知道1号逻辑块的物理块号,然后再读入1号逻辑块的数据进内存,此次类推,最终可以找到用户所需访问的逻辑块号i。访问逻辑块号i,总共需要i+ 1次磁盘1/0 *** 作。
得出结论: 隐式链接分配只能顺序访问,不支持随机访问,查找效率低 。
我们来思考另外一个问题,采用隐式链接是否方便文件拓展
我们知道目录项中存有结束块号的物理地址,所以我们如果要拓展文件,只需要将新分配的磁盘块挂载到结束块号的后面即可,修改结束块号的指针指向新分配的磁盘块,然后修改目录项。
得出结论: 隐式链接分配很方便文件拓展。所有空闲磁盘块都可以被利用到,无碎片问题,存储利用率高。
显示链接是把用于链接各个物理块的指针显式地存放在一张表中,该表称为文件分配表(FAT, File Allocation Table)。
由于查找记录的过程是在内存中进行的,因而不仅显著地 提高了检索速度 ,而且 大大减少了访问磁盘的次数 。但也正是整个表都存放在内存中的关系,它的主要的缺点是 不适 用于大磁盘 。
比如,对于200GB的磁盘和1KB大小的块,这张表需要有2亿项,每一项对应于这2亿个磁盘块中的一个块,每项如果需要4个字节,那这张表要占用800MB内存,很显然FAT方案对于大磁盘而言不太合适。
一直都在,加油!(゜Д゜)σ凸←自爆按钮
链表的方式解决了连续分配的磁盘碎片和文件动态打展的问题,但是不能有效支持直接访问(FAT除外) ,索引的方式可以解决这个问题。
索引的实现是为每个文件创建一个 索引数据块 ,里面存放的 是指向文件数据块的指针列表 ,说白了就像书的目录一样,要找哪个章节的内容,看目录查就可以。
另外, 文件头需要包含指向索引数据块的指针 ,这样就可以通过文件头知道索引数据块的位置,再通过索弓|数据块里的索引信息找到对应的数据块。
创建文件时,索引块的所有指针都设为空。当首次写入第i块时,先从空闲空间中取得一个块, 再将其地址写到索引块的第i个条目。
索引的方式优点在于:
●文件的创建、增大、缩小很方便;
●不会有碎片的问题;
●支持顺序读写和随机读写;
由于索引数据也是存放在磁盘块的,如果文件很小,明明只需一块就可以存放的下,但还是需要额外分配一块来存放索引数据,所以缺陷之一就是存储索引带来的开销。
如果文件很大,大到一个索引数据块放不下索引信息,这时又要如何处理大文件的存放呢我们可以通过组合的方式,来处理大文件的存储。
先来看看 链表+索引 的组合,这种组合称为 链式索引块 ,它的实现方式是在 索引数据块留出一个存放下一个索引数据块的指针 ,于是当一个索引数据块的索引信息用完了,就可以通过指针的方式,找到下一个索引数据块的信息。那这种方式也会出现前面提到的链表方式的问题,万一某个指针损坏了,后面的数据也就会无法读取了。
还有另外一种组合方式是 索引+索引 的方式,这种组合称为多级索引块,实现方式是通过一个索引块来存放多个索引数据块,一层套一层索引, 像极了俄罗斯套娃是吧๑乛◡乛๑
前面说到的文件的存储是针对已经被占用的数据块组织和管理,接下来的问题是,如果我要保存一个数据块, 我应该放在硬盘上的哪个位置呢难道需要将所有的块扫描一遍,找个空的地方随便放吗
那这种方式效率就太低了,所以针对磁盘的空闲空间也是要引入管理的机制,接下来介绍几种常见的方法:
●空闲表法
●空闲链表法
●位图法
空闲表法
空闲表法就是为所有空闲空间建立一张表,表内容包括空闲区的第一个块号和该空闲区的块个数,注意,这个方式是连续分配的。如下图:
当请求分配磁盘空间时,系统依次扫描空闲表里的内容,直到找到一个合适的空闲区域为止。当用户撤销一个文件时,系统回收文件空间。这时,也需顺序扫描空闲表,寻找一个空闲表条目并将释放空间的第一个物理块号及它占用的块数填到这个条目中。
这种方法仅当有少量的空闲区时才有较好的效果。因为,如果存储空间中有着大量的小的空闲区,则空闲表变得很大,这样查询效率会很低。另外,这种分配技术适用于建立连续文件。
空闲链表法
我们也可以使用链表的方式来管理空闲空间,每一个空闲块里有一个指针指向下一个空闲块,这样也能很方便的找到空闲块并管理起来。如下图:
当创建文件需要一块或几块时,就从链头上依次取下一块或几块。反之,当回收空间时,把这些空闲块依次接到链头上。
这种技术只要在主存中保存一个指针, 令它指向第一个空闲块。其特点是简单,但不能随机访问,工作效率低,因为每当在链上增加或移动空闲块时需要做很多1/0 *** 作,同时数据块的指针消耗了一定的存储空间。
空闲表法和空闲链表法都不适合用于大型文件系统,因为这会使空闲表或空闲链表太大。
位图法
位图是利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。
当值为0时,表示对应的盘块空闲,值为1时,表示对应的盘块已分配。它形式如下:
在Linux文件系统就采用了位图的方式来管理空闲空间,不仅用于数据空闲块的管理,还用于inode空闲块的管理,因为inode也是存储在磁盘的,自然也要有对其管理。
前面提到Linux是用位图的方式管理空闲空间,用户在创建一个新文件时, Linux 内核会通过inode的位图找到空闲可用的inode,并进行分配。要存储数据时,会通过块的位图找到空闲的块,并分配,但仔细计算一下还是有问题的。
数据块的位图是放在磁盘块里的,假设是放在一个块里,一个块4K,每位表示一个数据块,共可以表示4 1024 8 = 2^15个空闲块,由于1个数据块是4K大小,那么最大可以表示的空间为2^15 4 1024 = 2^27个byte,也就是128M。
也就是说按照上面的结构,如果采用(一个块的位图+ 一系列的块),外加一(个块的inode的位图+一系列的inode)的结构能表示的最大空间也就128M,
这太少了,现在很多文件都比这个大。
在Linux文件系统,把这个结构称为一个 块组 ,那么有N多的块组,就能够表示N大的文件。
最终,整个文件系统格式就是下面这个样子。
最前面的第一个块是引导块,在系统启动时用于启用引导,接着后面就是一个一个连续的块组了,块组的内容如下:
● 超级块 ,包含的是文件系统的重要信息,比如inode总个数、块总个数、每个块组的inode个数、每个块组的块个数等等。
● 块组描述符 ,包含文件系统中各个块组的状态,比如块组中空闲块和inode的数目等,每个块组都包含了文件系统中「所有块组的组描述符信息」。
● 数据位图和inode位图 ,用于表示对应的数据块或inode是空闲的,还是被使用中。
● inode 列表 ,包含了块组中所有的inode, inode 用于保存文件系统中与各个文件和目录相关的所有元数据。
● 数据块 ,包含文件的有用数据。
你可以会发现每个块组里有很多重复的信息,比如 超级块和块组描述符表,这两个都是全局信息,而且非常的重要 ,这么做是有两个原因:
●如果系统崩溃破坏了超级块或块组描述符,有关文件系统结构和内容的所有信息都会丢失。如果有冗余的副本,该信息是可能恢复的。
●通过使文件和管理数据尽可能接近,减少了磁头寻道和旋转,这可以提高文件系统的性能。
不过,Ext2 的后续版本采用了稀疏技术。该做法是,超级块和块组描述符表不再存储到文件系统的每个块组中,而是只写入到块组0、块组1和其他ID可以表示为3、5、7的幂的块组中。
在前面,我们知道了一个普通文件是如何存储的,但还有一个特殊的文件,经常用到的目录,它是如何保存的呢
基于Linux 一切切皆文件的设计思想,目录其实也是个文件,你甚至可以通过vim打开它,它也有inode, inode 里面也是指向一些块。
和普通文件不同的是, 普通文件的块里面保存的是文件数据,而目录文件的块里面保存的是目录里面一项一项的文件信息 。
在目录文件的块中,最简单的保存格式就是 列表 ,就是一项一项地将目录下的文件信息(如文件名、文件inode文件类型等)列在表里。
列表中每一项就代表该目录下的文件的文件名和对应的inode,通过这个inode,就可以找到真正的文件。
通常,第一项是「则」,表示当前目录,第二项是,表示上一级目录, 接下来就是一项一项的文件名和inode。
如果一个目录有超级多的文件,我们要想在这个目录下找文件,按照列表一项一项的找,效率就不高了。
于是,保存目录的格式改成 哈希表 ,对文件名进行哈希计算,把哈希值保存起来,如果我们要查找一个目录下面的文件名,可以通过名称取哈希。如果哈希能够匹配上,就说明这个文件的信息在相应的块里面。
Linux系统的ext文件系统就是采用了哈希表,来保存目录的内容,这种方法的优点是查找非常迅速,插入和删除也较简单,不过需要一些预备措施来避免哈希冲突。
目录查询是通过在磁盘上反复搜索完成,需要不断地进行/0 *** 作,开销较大。所以,为了减少/0 *** 作,把当前使用的文件目录缓存在内存,以后要使用该文件时只要在内存中 *** 作,从而降低了磁盘 *** 作次数,提高了文件系统的访问速度。
感谢您的阅读,希望您能摄取到知识!加油!冲冲冲!(发现光,追随光,成为光,散发光!)我是程序员耶耶!有缘再见。<-biubiu-⊂(`ω´∩)
Mac上程序员必备的10大软件
1、IDEA
作为一个开发者,必须使用IDEA的,以前的elipse基本很少有用了,除非那些10多年的老员工对它有太大的感情了。
2、安装JDK11或者JDK8
我觉得应该安装JDK11吧,毕竟JDK14都出来这么久了。
3、Pycharm
Python开发工具,作为程序员也许你不是做Python开发的,但是偶尔还是用Python的。
4、Git
不用多说,当你在公司开发时候,一个项目是由很多人完成的,Git就是用来版本控制的,不仅要安装还要熟悉使用。
5、VMware Fusion和Navicat
Navicat是一个数据库管理工具,值得拥有,VMware是虚拟机软件。我现在还是学生,电脑配置也不太好,我一般使用阿里云服务器,然后连接IDEA工具,感觉太方便了,写完代码可以直接 *** 作虚拟机。
6、Visual Studio for Mac
这是一款微软推出的跨平台开发工具,我一般用来写前端的。
7、Xcode
Xcode是苹果产品的,适用于ios开发工具,同时支持c++,对于学习c的同学来说值得拥有,就算做c开发,也值得安装,因为真的太强大了。
8、Google浏览器
9、ClenMyMacX
系统杀毒软件及清理垃圾等等。
10、Typora
作为一个程序员,不管学习也好总是做笔记叭,它就是一款最好的Markown,非常方便,它的语法我之前也写过一篇文章,可以抽30分钟学习即可熟练基本用法。
11、MindNode
我个人比较喜欢使用这块来做思维导图
12、Processon
在线画图工具,也可以做思维导图等,非常不错。
13、Rdm
学习Redis使用可视化工具
14、PDF Expert
Mac最好用的一款PDF
15、Xnip
个人觉得挺好用的截图工具
16、Be Focused
类似番茄土豆,时间管理工具
17、eZip
压缩解压工具
18、百度网盘
19、uPic
图床,当你发表博客时候,每次粘贴有点太耗时间了,所以使用uPic配置Typora就完美了。
20、其他工具
qq、微信、OmniFocus项目管理工具、AE、PR视频剪辑等工具,看个人爱好下载使用,还有一些工具,暂时想不出了,但是上面所提到的我基本使用。
我的回答希望对你有帮助。
用了8年的Mac电脑,个人介绍下一些常用的APP,仅供参考。
1终端iterm2
作为一名程序员,少不了需要用命令行处理事情。
通过它可以处理本地电脑的事情,也可以连接远程服务器 *** 作。
补充:当然有些朋友喜欢zshell环境,也可以使用ohmyzsh,看个人实际需求吧,我还是喜欢bash环境。
2Alfred
Alfred 是一个用键盘通过热键、关键字、自定义插件来加快 *** 作效率的工具,它不但是搜索工具,还是快速启动工具,甚至能够 *** 作许多系统功能,扩充性极强。
比如程序员经常需要查看unix时间,用这个搜索框就能快速得到答案,按下回车键即可复制结果。
3DBeaver免费开源数据库
一个免费开源的软件,支持Oracle、MySQL等数据库,但是速度相比Navicat Premium慢,但是胜在免费。
4IntelliJ IDEA 开发工具IDE
写Java代码,怎么可能少了这个软件,吃饭干活的工具。
当然有些人也会用Visual Studio,用得人也不少,只要适合自己需求就可以了。
5Android Studio安卓开发
Android Studio是一个Android开发环境,基于IntelliJ IDEA。通过这个开发工具,可以开发手机APP。
6PyCharm
人生苦短,我学Python,通过这个工具,可以快速开发,但是唯一缺点就是耗内存。
7Sourcetree管理代码工具
Sourcetree是个免费的Git客户端工具,通过它可以进行可视化 *** 作,适合对Git有基础需求的人。但是有时候一些复杂的 *** 作,个人还是喜欢命令行处理。
8Markdown文档编写工具Typora
Typora支持跨平台,配合快捷键,轻松的写接口文档、数据库表结构等文档,也可以复制粘贴进来,十分便利。
同时支持导出PDF,Word多种格式。
9Sublime Text跨平台的文本编辑器
Sublime Text 是一款流行的代码编辑器软件,支持各类插件,可运行在Linux,Windows和Mac OS X。
我经常用它来编写一些简单的Python脚本,或者看Java代码进行Review。
10WireShark抓包软件
作为程序员,有时候要分析别人提供的网络数据包文件,安装这个跨平台软件,可以直观的分析网络数据包。
其他还有很多软件,这里就写前10个常用的软件推荐给你,希望能解答到你的问题。
作为一名前端,来推荐几个自己一直用的软件。
Visual Studio Code
vs code 是微软开发的良心编辑器,功能强大而且插件多,主要是启动速度还挺快,是原来的Eclipse开发团队的大佬来开发的,就是好用。
链接 >
Linux内核作者Linus早就开始使用Mac了(虽然面对记者表现的很扭捏)。Gnome的作者更是理直气壮叛逃Linux投奔Mac。如你所知,MacOSX是开发者们的最爱。因为它一方面有非常棒的用户体验,一方面是基于Unix,尽得shell的益处,又避免了Linux下种种繁琐。
看看MacTalk是怎么说的。
工欲善其事,必先利其器。这里分享下我的Mac应用和配置。
基于原则:
+ 尊重软件版权,能购买正版的,请尽量购买正版
+ Don’t Shave Yaks, 不要因为花太多时间配置工具而浪费工作的时间
+ 奥卡姆剃刀,如果一项功能需求只是偶尔用一下,就别配置了。
应用&效率Dropbox大名鼎鼎的Dropbox,无需赘述。是居家旅行,出门必备同步神器。Dropbox较之Google Drive更轻量级,更快,适合在多平台同步正在编辑的文档或者代码。记得Google Drive是没有Linux版客户端的,而Dropbox有!而且,Dropbox的文件分享链接是直接指向文件的,对于在remote terminal上工作且尚不熟悉scp和rsync的同学来说是福音(rsync --daemon效果可以媲美Dropbox)。相比之下,Google Drive 更适合来存放资料,因为它能搜索文档内关键词。
我见过最好的MarkDown编辑器,简洁,漂亮,可配置,支持MathJax公式编辑。
Evernote
笔记软件,我主要用它在收藏平时看到的好的RSS文章,Prime版的多人协作,幻灯片功能也很赞。
众多的ReadItLater软件中的一个,推荐Pocket是因为它的文本抽取出来的格式比较好,在移动端上的App做的也很出色。
Kaleidoscope
比较多文档之间的差异。一个命令行党应该忠诚的效忠用diff来比较文件,但是Kaleidoscope真的太好用了,关键是它不仅能逐行比较,还能一块块匹配着比较,还能两个文件夹比较,还能Merge文件。
Alfred 2
这
是一个神奇的快速启动软件,就为了它,你就值得买个Mac。MacTalk里谦虚的称它为“神兵利器”。你可以用它来: 打开任何应用 查找文件 执行shell命令 当计算器用 直接写email 在Google/Amazon/Wikipedia上搜索条目 ,以上只是它的普通功能,只有这些还不足以称之为伟大。Alfred之牛掰,在于其可编程的第三方workflow插件机制,这样可以在Alfred里搜豆瓣图书,搜Github仓库,查看天气或PM25,搜索自己的Evernote笔记,查API文档,一切能想到的,都可以实现。
TextExpander
文本自动补全的插件,自定义好触发的关键词,每次输入这些关键词的时候,biu~,想打的字就全d出来了。把自己的电话,邮箱,或者写邮件的模板存进去,能避免很多重复的劳动。
Popclip
文字选中d出扩展。每次选中文字后,可以快速的把选中文字进行复制,粘贴,查找,加入笔记本等等。
RescueTime (Time sink)
默默的运行在后台,告诉你你的时间都浪费在哪儿了。每周发邮件告诉你你在哪个软件,哪个网站上花了多少时间,这一天/周的效率有多高。你可以定义什么是有效率的行为(比如用Evernote写笔记,用Emacs写代码)加分,哪些是偷懒的行为(看美剧,刷豆瓣)扣分。
LimeChat
IRC应用,选它是因为其他的IRC应用都太难用了!
AppCleaner
删软件清理残余。
Moom
还在像傻帽一样花半天找到窗口边框笨手笨脚地缩放大小么?用Moom吧,能快速排好窗口,自定义想要的窗口大小。
The unarchiver
普通解压用tar命令,但如何有非UTF-8的中文编码,还是用unarchiver比较方便(命令行下得用find + iconv写一长串,太虐心)
编程&配置Dash
查文档利器。作者在新版本对它收费$20,丧心病狂,但从长远考虑,还是值得的。能配合Alfred用,省心。
Textmate
bundle功能很好用,方便快速掌握一门语言。写前端代码很方便。其他时候,还是用Vim/Emacs吧。
TotalCommander
命令行党都有过每天得把Terminal拖来拖去的苦恼。TotalCommander正是这样一款下拉式的终端,类似Gnome下的Guake,也支持多窗口,强烈推荐。
iTerm2
不管你用bash,zsh还是tcsh,有一个好用的Terminal软件是十分必要的,iTerm2就正是一个优秀的终端。好看,配置性极强,有很多方便的功能,戳这篇文章。
Homebrew
Mac下的包管理器,和ports平分天下。想装什么东西,尽管brew install 就好。
Z shell (tmux及配置文件)
基于bash的shell,被誉为The Last Shell。配置当然很复杂,不过不要紧,拿来主义一下,用oh-my-zsh一行代码安装。
z/autojump
每天还在为输各种cd而浪费时间?z 是个极为方便的小配置,它把用户访问过的目录存在记录里,每次输入z <访问过的目录的关键词>,就biu的一声到了。autojump也是类似的工具。
以上就是关于聪明的程序员必知的技能全部的内容,包括:聪明的程序员必知的技能、程序员必备知识( *** 作系统5-文件系统)、程序员用Mac都有哪些必备的app等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)