在虚拟机中也一样啊,用向左的方向键就可以在命令行后退了,按向上键可以选择之前执行过的命令。
用History命令可以查看之前用过的命令,具体看些命令的手册。
在Linux系统中,您可以使用终端窗口来输入命令。终端窗口是一个文本界面,您可以在其中输入Linux命令。以下是在Linux下输入命令的步骤:
1. 打开终端窗口。您可以按下Ctrl+Alt+T组合键,或者在应用程序菜单中找到“终端”并单击打开。
2. 在终端窗口中,您可以看到一个命令提示符(通常为$或#符号)。这意味着您已经可以开始输入命令。
3. 输入您想要执行的命令(例如ls命令),然后按Enter键执行它。Linux将返回命令输出,并且将等待下一个命令。
4. 如果您不确定要执行的命令,您可以键入“man”命令,后跟命令名称,以获取该命令的手册页。
5. 如果您想退出终端窗口,可以输入“exit”命令或在窗口的右上角单击“关闭”按钮。
请注意,在Linux中输入命令时,大小写字母是有区别的,因此请确保您输入的命令的大小写是正确的。此外,Linux命令通常是短的单词或缩写,您可以通过键入“man pages”来查看命令的手册页以了解更多详细信息。
学习类网站有很多,但是你能找到质量高,还免费的课程资源吗?现在知识付费很火,市场良莠不齐,有些课程需要付费,质量却不见得高。
今天,小趣结合自己的经历,为大家挑选了13个高质量的免费自学网站,课程资源都很丰富,不仅能提高学习效果,还能节省人民币。
1、综合学习
中国大学MOOC作为国内优质的学习平台,MOOC拥有上千门课程,计算机、心理学、法学、英语、艺术设计……每一门课程的质量都很高,可以满足系统化学习的需求。
MOOC与国内613所高校有合作,我们可以直接搜索想学的课程,也可以按学校来搜索,进入某个学校页面,就能看到该学校在MOOC开设的全部网络课程了。
Courseracoursera是由斯坦福大学教授创办的大型公开课平台,形式类似MOOC,汇集了国内外顶尖高校的网络公开课,国内的有北京大学、复旦大学、上海交通大学等,国外的包括斯坦福大学、华盛顿大学等著名学府。
课程种类丰富,涵盖计算机科学、语言学习、艺术、人文社科等,coursera面向全世界学生开放,授课语言以英文居多。
注册后,Coursera上的课程可以免费观看学习,如果想获得结课证书则需要支付一定费用。证书可以在申请工作、研究生、交换生等情况时提供一定程度的帮助。
哔哩哔哩不久前央视发了一篇文章《知道吗?这届年轻人爱上B站搞学习》,B站现在已经不仅仅是一个二次元网站了,它有大量优质学习类视频,各个领域的up主分享自己的知识积累。
我们可以在B站上看知名大学公开课、TED演讲、纪录片,可以学习高数、外语、编程等各领域知识,也可以根据自己的兴趣爱好,学舞蹈、健身、美妆、摄影……想要什么样课程,这里都有。
译学馆译学馆是一个跨语言的知识聚合平台,很多译者将国外精彩视频翻译成中文发布,上面既有“大部头”的学术型课程,如MIT、耶鲁等大学的公开课,也有有趣又能学到知识的短视频。
视频质量很高,内容还被整理成了中英对照文本,供用户参考学习,在学知识的同时能顺便提高英语水平。
2、互联网技能
慕课网慕课网是一个IT技能学习网站,号称“程序员的梦工厂”, 以独家视频教程、在线编程工具、学习计划、问答社区为特色,有海量的免费课程,提供丰富的移动端开发、php开发、web前端、html5教程以及css3视频教程等课程资源。
多贝网多贝网的课程以互联网、IT技术、营销、职场技能这几方面为主,适合工作党或者打算从事互联网行业的人,页面简单干净,一般一套课程分为多个课时,可以系统深入地学习知识,加入小组后还能与同行交流经验。
实验楼实验楼是IT在线编程及实训学习平台,课程分为基础课和项目课,内容涵盖了Linux、Python、Java、C语言、Ruby、Android、IOS开发、大数据、信息安全等IT技术领域。
一些刚入行的朋友会比较迷茫,实验楼有一个“学习路径”功能,你想从事某个岗位,平台已经帮你规划好了实现目标的详细规划和步骤,对新手很友好了。
3、外语学习
China Daily中国日报网China Daily大家都知道,是国内最大的英文资讯门户,集新闻信息、娱乐服务为一体的综合性新闻网站。在China Daily上阅读新闻,可以锻炼我们的阅读和翻译能力,还能了解国内外最新消息。
TEDTED的宗旨是“传播一些值得传播的创意”,这里有非常多的演讲视频,学外语的同时还能增长知识。视频来自各界人士,内容五花八门,基本上都是纯英文演讲,可以锻炼你的英语听力。
忆术家忆术家是一个外语学习网站,我们可以在上面学习英语(英式/美式)、日语、韩语、法语、德语、阿拉伯语等多种语言。
它的特色是可以定制学习计划,选择自己的语言、想学的语言和级别,平台会为你匹配合适的课程,还可以通过游戏的方式记忆,让语言学习变得简单有趣。
Lang-8Lang-8是一个多国语言学习互动平台,在这里平台上我们可以尝试用外语写作,会有外国人帮你修改文章,也许你可以找到外国笔友帮你修改语法、发音,每天坚持写日记,语言水平会提升得很快。
4、职场技能
Word联盟职场中无论什么职位都免不了与Office三件套打交道,熟练掌握Word技巧让工作事半功倍,一份高大上的PPT能够让人眼前一亮。Word联盟这个网站有免费的Word、Excel、PPT、WPS教程,还有丰富的案例和模板,职场人士必备。
优优教程网优优教程网包含了PS教程、AE教程、AI教程、C4D教程、手绘教程、摄影后期教程,从新手入门到深入学习都能满足。这里还有各种神器分享,包括脚本插件、设计素材、万能模板字体库、图库等。
以上就是小趣找的高质量自学网站,希望可以帮到大家,学习贵在持之以恒,坚持下去就会有收获,一起加油吧!关注@趣玩好应用,获取更多技能。
一般来说,没有人能够记住所有的Linux命令。Linux系统中的命令数量庞大,而且随着新版本的更新和增加,命令也在不断增加。因此,没有人能够记住所有的命令。
但是,常用的一些命令是可以熟练掌握的,比如用于文件管理、软件安装、系统管理等常见操作的命令。对于这些常用命令,通过不断地使用和实践,可以逐渐熟练掌握。
对于其他的命令,可以通过查阅相关文档、手册或者在线资源来了解和使用。在Linux系统中,很多命令都有详细的帮助文档,可以通过输入命令加上“--help”参数来查看帮助信息。此外,还可以通过搜索引擎、在线论坛和社区等途径来查找和使用不熟悉的命令。
总之,对于Linux命令的学习和使用,需要不断地积累和实践,而不是试图一次性记住所有命令。通过不断地学习和实践,可以逐渐提高自己的技能水平,从而更好地使用Linux系统。
下面是之前写的一篇文章:《如何快速阅读源码》
本文探讨在需要了解一个开源项目时,如何快速的理清开源项目的代码逻辑!
以下是个人认为行之有效的方法:
先「跑起来」自顶向下拆解深入细节延伸改进本文以Mybatis为例来进行演示!
先“跑起来”程序界有个老传统,学习新技术时都是从「Hello World」开始的!无论是学习新语言时,打印「Hello World」;还是学习新框架时编写个demo!那为什么这里的「跑起来」要打个引号呢?
实际上,当你想要阅读一个开源项目的源码时,绝大部分情况下,你已经能够使用这个开源项目了!所以这里的“跑起来”就不是写个「Hello World」,也不是能跑起来的程序了!而是能__在你的脑子里「跑起来」__!什么意思?
Mybatis你会用了吧?那么请问Mybatis是如何执行的呢?仔细想想,你能否用完整的语句把它描述出来?
这里是Mybatis的官方入门文章!你是如何看这篇文章的?读一遍就行了吗?还是跟着文章跑一遍就够了吗?从这篇文章里你能获得多少信息?
我们来理一下:
安装如何在项目中引入Mybatis?Mybatis的groupId是什么?artifactId又是什么?目前最新版本是多少?从 XML 中构建 SqlSessionFactorySqlSessionFactoryBuilder可以通过xml或者Configuration来构建SqlSessionFactory,那是如何构建的呢?xml配置了哪些信息?既然使用了xml,那肯定有xml解析,用什么方式解析的?xml里的标签都是什么意思:configuration,environments,transactionManager,dataSource,mappers。以及这些标签的属性分别是什么意思?SqlSessionFactory的作用是什么?不使用 XML 构建 SqlSessionFactoryBlogDataSourceFactory,DataSource,TransactionFactory,Environment,Configuration这些类的作用是什么?*Mapper的作用是什么?为什么提供基于XML和Java的两种配置方式?这两种配置方式的优缺点是什么?从 SqlSessionFactory 中获取 SqlSessionSqlSession的作用是什么?selectOne和getMapper的执行方式有什么区别?探究已映射的 SQL 语句*Mapper.xml的配置是什么?命名空间,id的作用是什么?*Mapper.xml是如何和*Mapper.java进行匹配的?匹配规则是什么?基于注解的映射配置如何使用?为什么提供基于XML和基于注解的两种映射配置?有什么优劣?作用域(Scope)和生命周期SqlSessionFactoryBuilder应该在哪个作用域使用?为什么?SqlSessionFactory应该在哪个作用域使用?为什么?SqlSession应该在哪个作用域使用?为什么?Mapper实例应该在哪个作用域使用?为什么?回答出了上面这些问题!你也就基本能在脑子里把Mybatis「跑起来」了!之后,你才能正真的开始阅读源码!
当你能把一个开源项目「跑起来」后,实际上你就有了对开源项目最初步的了解了!就像「书的索引」一样!基于这个索引,我们一步步的进行拆解,来细化出下一层的结构和流程,期间可能需要深入技术细节,考量实现,考虑是否有更好的实现方案!也就是说后面的三步并不是线性的,而是__不断交替执行__的一个过程!最终就形成一个完整的源码执行流程!
自顶向下拆解继续通过Mybatis来演示(限于篇幅,我只演示一个大概流程)!我们现在已经有了一个大概的流程了:
SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类虽说每个点都可以往下细化,但是也分个轻重缓急!
我们是先了解怎么构建SqlSessionFactory呢?还是了解如何获取SqlSession呢?还是了解SqlSession如何执行sql的呢?很明显,SqlSession去执行 sql才是Mybatis的核心!我们先从这个点入手!
首先,你当然得先下载Mybatis的源码了(请自行下载)!
我们直接去看SqlSession!它是个接口,里面有一堆执行sql的方法!
这里只列出了一部分方法:
SqlSession就是通过这些方法来执行sql的!我们直接看我们常用的,也是Mybatis推荐的用法,就是基于Mapper的执行!也就是说「SqlSession通过Mapper来执行具体的sql」!上面的流程也就细化成了:
SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类SqlSession获取对应的Mapper实例Mapper实例来执行相应的sql那SqlSession是如何获取Mapper的呢?Mapper又是如何执行sql的呢?
深入细节我们来看SqlSession的实现!SqlSession有两个实现类SqlSessionManager和DefaultSqlSession!通过IDE的引用功能可以查看两个类的使用情况。你会发现SqlSessionManager实际并没有使用!而DefaultSqlSession是通过DefaultSqlSessionFactory构建的!所以我们来看DefaultSqlSession是如何构建Mapper的!
它直接委托给了Configuration的getMapper方法!
Configuration又委托给了MapperRegistry类的getMapper方法!
在MapperRegistry类的getMapper中:
通过type从knownMappers中获取对应的MapperProxyFactory实例如果不存在则抛出异常如果存在则调用mapperProxyFactory.newInstance(sqlSession)创建对应的Mapper在这里knowMappers是什么?MapperProxyFactory又是什么?mapperProxyFactory.newInstance(sqlSession)具体做了什么?
其实很简单,knowMappers是个Map,里面包含了class与对应的MapperProxyFactory的对应关系!MapperProxyFactory通过newInstance来构建对应的Mapper(实际上是Mapper的代理)!
快接近真相了,看mapperProxyFactory.newInstance(sqlSession)里的代码:
这里干了什么?
通过sqlSession,mapperInterface和methodCache构建了一个MapperProxy对象然后通过Java的动态代理,来生成了Mapper的代理类将Mapper方法的执行都委托给了MapperProxy去执行如果是Object里的方法则直接执行否则执行MapperMethod的execute方法最终实际还是委托给了sqlSession去执行具体的sql!后面具体怎么实现的就自行查看吧!
延伸改进现在我们的流程大概是这样的一个过程:
SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类SqlSession获取对应的Mapper实例DefaultSqlSession.getMapperConfiguration.getMapperMapperRegistry.getMappermapperProxyFactory.newInstance(sqlSession)通过sqlSession,mapperInterface和methodCache构建了一个MapperProxy对象然后通过Java的动态代理,来生成了Mapper的代理类Mapper实例来执行相应的sql将Mapper方法的执行都委托给了MapperProxy去执行如果是Object里的方法则直接执行否则执行MapperMethod的execute方法最终还是委托给sqlSession去执行sql现在我们大概知道了:
为什么Mapper是个接口了Mybatis基于这个接口做了什么那么,
什么是动态代理(基础哦)?为什么使用动态代理来处理?基于动态代理有什么优点?又有什么缺点?除了动态代理,还有其它什么实现方式吗?比如说cglib?如果是其它语言的话,有没有什么好的实现方式呢?......这个问题列表可以很长,可以按个人需要去思考并尝试回答!可能最终这些问题已经和开源项目本身没有什么关系了!但是你思考后的收获要比看源码本身要多得多!
再循环一轮结束后,可以再次进行:
自顶向下拆解深入细节延伸改进不断的拆解->深入->改进,最终你能__通过一个开源项目,学习到远比开源项目本身多得多的知识__!
最重要的是,你的流程是完整的。无论是最初的大致流程:
SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类还是到最终深入的细枝末节,都是个完整的流程!
这样的好处是,你的时间能自由控制:
你是要花个半天时间,了解大致流程还是花个几天理解细节流程还是花个几周,几个月来深入思考,不断延伸你都可以从之前的流程中快速进行下去!而不像debug那样的方式,需要一下子花费很长的时间去一步步的理流程,费时费力、收效很小,而且如果中断了就很难继续了!
总结本文通过梳理Mybatis源码的一个简单流程,来讲述一个个人认为比较好的阅读源码的方式,并阐述此方法与传统debug方式相比的优势。
还没有评论,来说两句吧...