实用为王——IDEA精选插件推荐系列3
工欲善其事,必先利器,源码IDE是说说程序猿最常使用的工具,虽然IDEA自身已经相当便捷了,多说多评但某些地方还是评论安全组源码会存在一些繁琐的操作、重复性劳动,源码降低效率,说说而插件,多说多评就是评论解决这方面问题的利器,因此打算开一个专栏,源码将自己收集整理的说说实用插件,一一呈现出来。多说多评
虽然市面上有很多类似的评论推荐,但动不动就是源码搞什么什么大全,里面的插件质量参差不齐,特别实用性方面有限,花里胡哨,还是需要进行二次筛选,自己动手摸索尝试,特别是部分插件需要一些注意点,才能正常运行发挥作用。
因此,我是将实用作为第一要素,会在插件推荐中,描述应用的场景,要解决的问题,主要的使用方式,需要注意的问题等,欢迎收藏、交流。
也欢迎大家在评论中推荐自己喜欢的实用插件。
对于软件质量,往往是令人头大的管理问题。代码的质量是重要影响因素,代码评审的成本还是比较高的。代码规范的自动化扫描检查是低成本高产出的重要方式。 阿里开放并不断更新的java开发规范,其影响力不多说了。同时,还提供了配置的IDE插件,把规则也配置好了,相当于开箱即用,强力推荐。up量化指标源码
安装插件后在需要进行代码规范扫描的对象(整个工程、模块或某个目录、类)上选择右键菜单“编码规约扫描”即可。
该代码扫描工具侧重于开发人员在开发阶段自用,不具备像SonarQube这样的服务端统计和报表功能。
快捷键的使用,可以提升不小的开发效率,但是记忆众多的快捷键则不是那么容易,一般常用的可以记住,这里有一款辅助记录快捷键的插件Key Permoter X。
首先,悬停在IDEA工具栏上的按钮时,会提示对应的快捷键
其次,在右侧会有专门的窗口,会自动统计近期哪些操作有快捷键但未使用的情况,这样更有利于记录。
小功能,但实用性可以,可以在日常开发中潜移默化中辅助记忆常用操作的快捷键。
有了maven,使得java开发中jar包的管理变得简单了很多。但不得不说,jar包之间的依赖关系和版本号不可避免的还是会错综复杂,往往也会由于使用了不同版本的jar包引发兼容性问题带来的冲突。程序运行时会提示某个方法不存在或参数不正确,特别是原来运行正常的程序,因为引入了新的jar包,因为包冲突导致了其他地方报错,这时候,我们就需要一款能方便查看包依赖关系的插件了。
打开pom文件,切换到依赖分析标签,可查看依赖关系树
选择冲突,可查看哪些jar存在多个版本,并且可以通过右键菜单,快速跳转到pom文件的位置,或者排除掉该包。
该插件还能查看冲突、快读定位、排除依赖等,查看和解决jar包依赖问题的利器,强烈推荐。
源码管理,小荣远程源码svn已不再是主流,git后来居上。虽然在操作系统层面,有TortoiseGit这种图形化界面的工具来解决命令行低效、需记忆和易出错的问题,但在开发环境下,如果切换到windows窗口,去进行代码的提交、拉取、创建分支、合并,尤其是查看日志、代码比较,还是会降低不少效率。 而git这个插件,就可以实现IDE中内置git操作。
安装后,会在工具类显示一排常用按钮(不同的IDEA版本和Git插件版本会略有差异)
以push操作为例,会自动显示下图,本地有哪些提交,涉及到了哪些改动,是不是很直观?
如果常用按钮不够用,那么可以通过右键菜单,显示完整命令清单。
显示历史记录
进行版本比较
以上只是常用操作的部分示例,很多实用功能可以自行摸索,会有惊喜。 将源码管理工具git功能集成到IDEA中,避免在IDE和操作系统间进行切换,非常实用,强烈推荐。
Golang源码剖析panic与recover,看不懂你打我好了
哈喽,大家好,我是asong,今天与大家来聊一聊go语言中的"throw、try.....catch{ }"。如果你之前是一名java程序员,我相信你一定吐槽过go语言错误处理方式,但是这篇文章不是来讨论好坏的,我们本文的重点是带着大家看一看panic与recover是如何实现的。上一文我们讲解了defer是如何实现的,但是群强制分享源码没有讲解与defer紧密相连的recover,想搞懂panic与recover的实现也没那么简单,就放到这一篇来讲解了。废话不多说,直接开整。
Go 语言中panic 关键字主要用于主动抛出异常,类似 java 等语言中的 throw 关键字。panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的 defer;
Go 语言中recover 关键字主要用于捕获异常,让程序回到正常状态,类似 java 等语言中的 try ... catch 。recover 可以中止 panic 造成的程序崩溃。它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥作用;
recover只能在defer中使用这个在标准库的注释中已经写明白了,我们可以看一下:
这里有一个要注意的点就是recover必须要要在defer函数中使用,否则无法阻止panic。最好的验证方法是先写两个例子:
运行我们会发现example2()方法的panic是没有被recover住的,导致整个程序直接crash了。这里大家肯定会有疑问,为什么直接写recover()就不能阻止panic了呢。我们在 详解defer实现机制(附上三道面试题,我不信你们都能做对)讲解了defer实现原理,一个重要的知识点**defer将语句放入到栈中时,也会将相关的值拷贝同时入栈。**所以defer recover()这种写法在放入defer栈中时就已经被执行过了,panic是发生在之后,所以根本无法阻止住panic。
通过运行结果可以看出panic不会影响defer函数的使用,所以他是安全的。
这里我开了两个协程,一个协程会发生panic,导致程序崩溃,但是只会执行自己所在Goroutine的延迟函数,所以正好验证了多个 Goroutine 之间没有太多的关联,一个 Goroutine 在 panic 时也不应该执行其他 Goroutine 的延迟函数。
其实我们在实际项目开发中,经常会遇到panic问题, Go 的 runtime 代码中很多地方都调用了 panic 函数,对于不了解 Go 底层实现的新人来说,这无疑是挖了一堆深坑。我们在实际生产环境中总会出现panic,但是我们的程序仍能正常运行,这是cci底背离源码因为我们的框架已经做了recover,他已经为我们兜住底,比如gin,我们看一看他是怎么做的。
我们先来写个简单的代码,看看他的汇编调用:执行go tool compile -N -l -S main.go就可以看到对应的汇编码了,我们截取部分片段分析:
上面重点部分就是画红线的三处,第一步调用runtime.deferprocStack创建defer对象,这一步大家可能会有疑惑,我上一文忘记讲个这个了,这里先简单概括一下,defer总共有三种模型,编译一个函数里只会有一种defer模式。在讲defer实现机制时,我们一起看过defer的结构,其中有一个字段就是_panic,是触发defer的作用,我们来看看的panic的结构:
简单介绍一下上面的字段:
上面的pc、sp、goexit我们单独讲一下,runtime包中有一个Goexit方法,Goext能够终止调用它的goroutine,其他的goroutine是不受影响的,goexit也会在终止goroutine之前运行所有延迟调用函数,Goexit不是一个panic,所以这些延迟函数中的任何recover调用都将返回nil。如果我们在主函数中调用了Goexit会终止该goroutine但不会返回func main。由于func main没有返回,因此程序将继续执行其他gorountine,直到所有其他goroutine退出,程序才会crash。
下面就开始我们的重点吧~。
在讲defer实现机制时,我们一起看过defer的结构,其中有一个字段就是_panic,是触发defer的作用,我们来看看的panic的结构:简单介绍一下上面的字段:上面的pc、sp、goexit我们单独讲一下,runtime包中有一个Goexit方法,Goext能够终止调用它的goroutine,其他的goroutine是不受影响的,goexit也会在终止goroutine之前运行所有延迟调用函数,Goexit不是一个panic,所以这些延迟函数中的任何recover调用都将返回nil。如果我们在主函数中调用了Goexit会终止该goroutine但不会返回func main。由于func main没有返回,因此程序将继续执行其他gorountine,直到所有其他goroutine退出,程序才会crash。写个简单的例子:运行上面的例子你就会发现,即使在主goroutine中调用了runtime.Goexit,其他goroutine是没有任何影响的。所以结构中的pc、sp、goexit三个字段都是为了修复runtime.Goexit,这三个字段就是为了保证该函数的一定会生效,因为如果在defer中发生panic,那么goexit函数就会被取消,所以才有了这三个字段做保护。看这个例子:
英语好的可以看一看这个: github.com/golang/go/is...,这就是上面的一个例子,这里就不过多解释了,了解就好。
接下来我们再来看一看gopanic方法。
gopanic的代码有点长,我们一点一点来分析:
根据不同的类型判断当前发生panic错误,这里没什么多说的,接着往下看。
上面的代码都是截段,这些部分都是为了判断当前defer是否可以使用开发编码模式,具体怎么操作的就不展开了。
在第三部分进行defer内联优化选择时会执行调用延迟函数(reflectcall就是这个作用),也就是会调用runtime.gorecover把recoverd = true,具体这个函数的操作留在下面讲,因为runtime.gorecover函数并不包含恢复程序的逻辑,程序的恢复是在gopanic中执行的。先看一下代码:
这段代码有点长,主要就是分为两部分:
第一部分主要是这个判断if gp._panic != nil && gp._panic.goexit && gp._panic.aborted { ... },正常recover是会绕过Goexit的,所以为了解决这个,添加了这个判断,这样就可以保证Goexit也会被recover住,这里是通过从runtime._panic中取出了程序计数器pc和栈指针sp并且调用runtime.recovery函数触发goroutine的调度,调度之前会准备好 sp、pc 以及函数的返回值。
第二部分主要是做panic的recover,这也与上面的流程基本差不多,他是从runtime._defer中取出了程序计数器pc和栈指针sp并调用recovery函数触发Goroutine,跳转到recovery函数是通过runtime.call进行的,我们看一下其源码(src/runtime/asm_amd.s 行):
因为go语言中的runtime环境是有自己的堆栈和goroutine,recovery函数也是在runtime环境执行的,所以要调度到m->g0来执行recovery函数,我们在看一下recovery函数:
在recovery 函数中,利用 g 中的两个状态码回溯栈指针 sp 并恢复程序计数器 pc 到调度器中,并调用 gogo 重新调度 g , goroutine 继续执行,recovery在调度过程中会将函数的返回值设置为1。这个有什么作用呢? 在deferproc函数中找到了答案:
当延迟函数中recover了一个panic时,就会返回1,当 runtime.deferproc 函数的返回值是 1 时,编译器生成的代码会直接跳转到调用方函数返回之前并执行 runtime.deferreturn,跳转到runtime.deferturn函数之后,程序就已经从panic恢复了正常的逻辑。
在这里runtime.fatalpanic实现了无法被恢复的程序崩溃,它在中止程序之前会通过 runtime.printpanics 打印出全部的 panic 消息以及调用时传入的参数。
这就是这个逻辑流程,累死我了。。。。
结尾给大家发一个小福利,哈哈,这个福利就是如果避免出现panic,要注意这些:这几个是比较典型的,还有很多会发生panic的地方,交给你们自行学习吧~。
好啦,这篇文章就到这里啦,素质三连(分享、点赞、在看)都是笔者持续创作更多优质内容的动力!
在哪里能申请到免费的网站 要好即一点的 多说几个 说的好的话 把分全给
网站是没有免费的,你可以在网上收集资料是可以达到 免费的
1、你要找到免费的空间。我推广免费的空间是主机屋 的免费空间
2、域名这个是肯定需要钱买的,当然也有网站可以申请到一些三级域名,你可以百度一下具体我也不记得了。
3、还有就是你必需找到网站源码。这里我告诉你去哪里找在chinaz论坛里有个网站建设资源区你可以到里面找,里面的资源很丰富的。
如何用源代码建立一个网站?
如何用源代码建立一个网站用源代码建网站是最简单的方法之一。在这里写作不容易
我大概会写一个步骤给你参考;
准备工作:
域名、主机、源代码和ftp工具
Ps:选择主机的时候,一定要知道主机类型asp/php/。网等。,以及是否支持源代码安装。
1.将域名解析为主机ip,并将域名与主机绑定
2.使用Ftp工具将源代码上传到主机网页的根目录。
3.访问域名进行网站安装和配置。
具体细节不做过多描述。
手击不是很方便。
如果你有什么不明白的。
试着联系我。
问:一,二,三,试试骑恶魔战士。
如何零基础建网站,傻瓜式建站?
零基础可以选用模版建站,网站开发平台给你提供现成的免费自助建站系统源码或建站模板,新手直接套用模板,再稍加编辑就能快速搭建一个网站。
新手如何建站?
现在建站的方式已经越来越多了,包括使用自助建站系统、找团队定制开发、自己源代码开发?不过其中更适合纯小白的,还是模版建站,也是目前较多个人和中小企业所选择的建站方式。
模版建站到底是什么?
简单来说,就是网站开发平台给你提供现成的免费自助建站系统源码或建站模板,新手直接套用模板,再稍加编辑就能快速搭建一个网站。
如何利用自助建站快速搭建一个自己的网站?
怎样快速搭建一个自己的网站,作为一名新手小白,该如何入手?随着互联网越来越发达,越来越多的人都意识到拥有一个网站的重要性,网站是一种信息的展现渠道,同时也能带来一定的商机,那么新手小白打算建个网站,该如何入手?下面我就来告诉你如何新手建设网站的方法。
1、首先申请一个域名,第一步你已经完成,这里就不多说了。
2、空间,也就是虚拟主机,或者叫服务器,服务器一般用来运行较大的系统,普通人做个人站点选虚拟主机就行,1-块就可以搞到一个。前提推荐大家现在本机把网站调试好、玩透彻,然后再考虑去购买虚拟主机。
3、网站,如果你具备开发制作网站的能力,就不用多说了。如果不会的话,可以选择一些主流的个人建站程序,然后下载源代码,安装到服务器上,配置好域名,设置好后台就可以通过域名访问了。
当然,这里有一个大的前提就是网站需要做备案,这个也不难,在服务器供应商那里,按照流程操作,一般都可以很顺利的拿到备案。以上就是我总结的新手怎么建站的内容,但是,如果真的想要做好一个网站,并且为了网站在后期有一个非常好的发展方向,最好在一开始就找专业、正规的网站建设公司进行制作以及优化才是最好的方法。在这里我推荐阿里云的云速成美站和云企业官网,低至元新手小白就能完成一个网站,他们在此行业拥有着多年的网站搭建及网站优化经验,帮助了很多人解决网站的相关问题,现在建站还可以领取优惠券
米拓源代码详细讲解?
源代码是构成网站的核心,即网站程序代码,包括网站文件及目录结构,拥有源代码才拥有网站的全部。
源代码决定网站的所有权,传统自助建站因其SAAS模式无法开放源代码,用户实质上是每年支付租金租用放在平台网站的使用权,哪一天不交租金了,网站也就没有了;而开放源代码的建站是用户拥有网站的所有权,是买卖关系而不是租用关系,用户可以将网站程序(源代码)安装到自己指定的服务器,而不受平台限制。
某种意义上,可以通过是否开放FTP来确定是否开放源代码,开放FTP意味着可以随时拿到网站源代码程序。
开放源代码就是提供网站程序的所有代码给用户,用户获得源代码后可以自行进行二次修改(也可以找其他专业的公司进行修改),同时可以将网站安装到任意具备系统运行环境的服务器(如米拓企业建站系统,需要PHP+MYSQL运行环境)。开放源代码可以让网站更具有自主性,未来的改版、网站推广、服务器选择等非常方便,对于专业建站而已,开放源代码是非常必要的。
米拓建站定位为中高端建站,拥有自助建站、模板建站的快捷方便性,同时又拥有定制网站的纯手工制作特征和开放源代码;米拓建站可以“用租房的价格买房”搭建网站,相信消费者的眼睛是雪亮的。
dedecms 如何加入当前文章评论?源代码中可看到.
你想嵌入源码中,增加优化效果吗?我认为这样做收效甚微。
1、文章的标题,要比内容重要
2、评论在收录时是不存在的,就算后期更多的评论,对收录的影响也不大
3、评论的质量难以保证,反而不如ajax读取不会影响收录情况
4、性能消耗更大,现在更流行类似“多说”的社会化评论插件
2024-11-30 13:01
2024-11-30 12:57
2024-11-30 12:38
2024-11-30 11:57
2024-11-30 11:24