首页> 标签> 领域建模
"领域建模"
共 193 条结果
全部 问答 文章 公开课 课程 电子书 技术圈 体验
架构设计00-架构师知识体系07-架构师关注那些东西
架构设计系列文章,请参见连接。背景技术人员在做到一定阶段之后总会遇到对技术的迷惘,对个人发展的迷失。是不是要进行抉择,选择继续走技术的路线,还是转行做PM,还是转行做其他?我认为选择一个自己喜欢的、愿意为之付出的工作,并且一直坚持下去。这样就是对自己的最大的成全与鼓励。关注内容作为架构师,他是需要为业务与技术实现之间架起一座稳固、可靠桥梁的人。所以,架构师需要对业务、技术、实施、运营等都有深入的理解与规划的能力。我们最主要的目标是为业务提供对技术实现的信心,为技术人员提供整体规划的目标,为运维人员提供可管理的软件系统。为了满足这些要求,架构师需要明确自己的工作重心与工作目标。这样才能在纷繁复杂的职责要求、工作内容中找到自己的一条路。我认为的工作重心:1. 关心业务模型从业务分析(BA)的招聘信息来看,人们对BA的认识还是很低。没有系统化的业务分析方法,不知道怎么分析。要不就是UML中的用例图、流程图,这些图将用户需求割裂为一小块一小块的。无法整体看到完整的用户需求,无法分析某一个功能对用户提供的价值的高低。所以就现在的需求分析、建模水平,需要一个专业的人员将交错的、割裂的需求整理成一个通畅的业务流,并将业务流中的业务实体分析出来形成技术实体。并且作为架构师,也应该对业务有一定的坚持。因为这个是体现架构师价值的点,如果只关心技术,那就是一个纯粹的开发人员。业务人员将不能满足要求的需求过来时,架构师连基本的判断都没有那就会导致整个项目的混乱。2.关心技术架构在领域建模活动中,问题域指构成你所分析业务的那些过程、实体和约束条件。领域建模,也称领域分析,就是要识别出领域中所有的重要元素以及它们之间的协作关系。问题域的分析模型是用解答域提供的工具和手段实现出来的。而解答域就是我们的技术工具或方法论。架构师需要通过合理的使用方法论和工具,实现简单、可靠、完整、有效的架构。除了对产品/项目的技术架构设计之外,架构师还需要为公司建立一套独立的技术体系,并在这个技术体系上建立公司的软件基础设施。帮助公司建立完善的内部基础设施,之后公司更快速的发展就是基于这些基础设施进行。另外架构师的执业发展是需要有自己专注的方向的。因为吾生也有涯,而知也无涯。 以有涯随无涯,殆已!--《庄子·内篇·养生主第三》所以,需要在技术方面有自己的特长方向。3.关心运维大学里有一门课叫:《软件工程》。这门课里面一个很重要的概念就是在软件生命周期中,软件处于维护期的时间要远大于其他阶段的事件。而业界对运维的态度都是找个人看着,不要报个什么错都找我就行。更不用提怎样进行线上问题定位?怎样进行线上性能分析?怎样进行线上快速伸缩?所以,作为一个架构师,我最关心的运维。4.其它除了上面这些重要的事项外,还有很多公司内外的事项需要架构师参与与解决。不过这里不像让这些事情喧宾夺主,所以,不对商务,管理,过程,运营等事情进行说明。不过针对这些事项架构师还是要投入一定的精力进行关注的。总结技术在不断的发展,我们需要不断的努力才能跟上技术的步伐。所以在这个过程中会发现非常累。但每个人工作、生活、学习中不可能总是一帆风顺的。在自己选择的领域内不断的学习,不断的成长,不断的发展。总是可以得到自我满足感的。
文章
运维  ·  架构师  ·  测试技术  ·  领域建模  ·  uml
2023-01-03
【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(视窗、选择篇)
扔掉鼠标,提高效率。本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏你好,我是方向盘(YourBatman)前言时隔两月,好久不见,回来继续。说到上篇文章,还要追溯到2022-02-01春节那天发的:【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(IDEA导航篇),介绍了IDEA导航相关快捷键,熟练使用后可快速定位代码位置,从而提高工作效率。本文继续,聊聊IDEA在视窗和选择方面的快捷键操作。所属专栏【方向盘】-IntelliJ IDEA相关下载【本专栏源代码】:https://github.com/yourbatman/FXP-java-ee【技术专栏源代码大本营】:https://github.com/yourbatman/tech-column-learning【女娲Knife-Initializr工程】访问地址:http://152.136.106.14:8761【程序员专用网盘】公益上线啦,注册送1G超小容量,帮你实践做减法:https://wangpan.yourbatman.cn【Java开发软件包(Mac)】:https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit版本约定Mac OS 12.4iTerm2 3.4.15(zsh 5.8)IntelliJ IDEA 2022.1.3✍正文视窗(view):内容的载体选择(selection):操作的目标IntelliJ IDEA快捷键视窗在图形化界面里,视窗的重要性不言而喻。方便快捷的调出、隐藏、操作视窗,亦能有助于效率的提升。下面笔者根据自身经验,介绍几个常用的视窗快捷操作。最近打开的文件Action NameKeyRecent Filescommand + e文件:包括.java、.class、.properties等一切文件类型。如果只想看最近编辑过的的文件,那就再按一次该快捷键即可(当然喽,你用鼠标点击勾选上也是可以的):最近所处的位置Action NameKeyRecent Locationscommand + shift + e上篇文章 里知道了回到“快速回到上次编辑处”的快捷键是command + shift + delete。这个快捷键就“更厉害”了,它可以显示最近所处的位置(光标路过哪些地方),可以辅助command + shift + delete一起来达到快速定位的目的:同样的,如果只想查看最近所处的编辑过的位置,再按一次本快捷键即可。实话说,这个快捷键笔者并不太经常用,因为个人习惯喜欢用前进后退方式,但有时候饶的弯多了还是会用一下的。它对不同人的帮助效果可能是不一样的,因人而异,自行拾取喽。(偏好)设置Action NameKeyPreferencescommand + ,IDEA的设置项基本都在该视窗里这个快捷键不用多说,使用的频率贼高。而且,在Mac操作系统里,软件的(偏好)设置快捷键的都是它,(几乎)没有例外。打开/隐藏Project视窗Action NameKeyProjectcommand + 1要说IDEA里哪个视窗最常用,除了编辑窗口外,那绝对就是Project视窗了。由于“屏幕”显示面积有限,我们经常需要隐藏/打开此视窗,该动作很明显属于高频动作,所以特别适合用有个快捷键来“代替”,提高开发效率。至于其它视窗(如Maven视窗、Run视窗、Debug视窗),都有(或者可以有)对应的快捷键。根据自己习惯需要,各取所需。显示/隐藏所有非编辑器窗口Action NameKeyHide All Tool Windowscommond + shift + f12首先得来个名词解释:什么叫编辑窗口?看图就明白了:编辑器窗口是每个IDE最重要的窗口,查看内容、编辑等都在其中,其它视窗一般都只是辅助具有“暂时性”。那么如上图所示,当打开的视窗比较多了,已严重干扰到编辑器窗口的“显示面积”时,怎么办?忍。不乏少数,编辑器视窗一行只能显示几十个字符了、共只能显示十几行了,依旧能继续干逐个关闭。这才是常规思维,把不需要的关掉,释放区域给编辑器视窗一键隐藏所有非编辑器窗口。当目标非常明确时,使用此快捷键可快速达到目的实话说,该快捷键笔者用的频率还是比较高的,因为不受干扰的沉浸式编程效率貌似确实高不不少,不信你也可以试试。聚焦到/返回到编辑器Action NameKeyFocus Editoresc当你习惯了用键盘操作时,该快捷键可让焦点回到编辑器里。比如正在Project视窗里查看项目时,就可以使用此快捷键(将光标、焦点)快速回到编辑区域喽。Tips:esc是让焦点回到编辑器,语义别和command + shift + delete混淆选择修改名称、批量修改、列编辑、选中查找的项...,这都是开发过程中的非常常见的“需求”嘛。下面一起来看一下按行选择Action NameKeyUp with Selectionshift + ↑Down with Selectionshift + ↓以焦点/光标位置为起点,向上/下逐行选中。它的特点是:没有“感知”能力,不会有跳跃性,老老实实的按照行逐行选中。说明:左右逐字选中,使用的是shift+←/→按模块选择Action NameKeyExtend Selectionoption + ↑Shrink Selectionoption + ↓相较于按行选择,它显得更“智能”:能读懂上下文,感知到什么叫模块,然后可以一个模块的快速选中,不管多长都可一步到位,十分高效。显然,这里需要补充一个小知识点,这里指的模块有哪些:一条语句,如:instances.add(instance)一个代码块:if(xxx) {xxx} 或者 try{xxx} catch(){xxx}等一个方法:private void fun(){ xxx }...这种感知选择的规则还蛮有意思:即保证了模块的层级性,又尽快的选中模块,好像能懂你一样,这也是强类型语言的魔力?Tips:这里上下箭头不是存粹的代表方向,而代表了增/减量。比如,当没有选择任何模块时,按option + ↓是无效的,即使下面还有代码块也不会向下选中查找上/下一个Action NameKeyFind/Move to next Occurrencecommand + gFind/Move to previous Occurrencecommand + shift + g该快捷键的底层是common + f,只不过它无调起查找窗口,使用起来更为便捷。毕竟文件内查找是非常常用的功能,所以IDEA提供了此便捷操作。而功能上,匹配的方式,完全由最近一次的common + f来决定。比如上图中,笔者将common + f功能限制为大小写敏感:再次按command + g会发现getKey中的Key就不再会被选中了。笔者使用该快捷键的频率很高,因为它比呼起查找窗口来得更方便快捷,而且能满足我大部分时候的查找要求,毕竟大部分情况下咱都是精确查找嘛。重复选择重复选择下一个,重复选择所有。这个功能在批操作时超级超级超级好用~和上面的功能区别:上面永远只会选中一个,而这里会选中多个,能进行批量编辑Action NameKeyAdd Selection for Next Occurrencecontrol + gUnselect Occurrencecontrol + shift + gSelect All Occurrencecontrol + command + g说明:该匹配规则为:文本全部匹配,和common + f无关。三个光标,代表可以批量编辑喽。control + g会以第一个文本为基础,继续选择下一个同名的文本(control + shift + g是取消选择),如上图所示,可以非常方便的批量修改,即使它们不在同一列、处在不同地方、不都是代码(有注释),可大大提高操作的效率。同时,因为进入了“多光标”模式,也可以“批量移动光标”,再做你喜欢的操作。比较常见的operation有:在对应行的所有行头/尾加/减内容。tips:请注意此功能和rename这种功能的定位区别,切忌混淆使用而导致写bug啦。该功能有个典型的应用场景,举个例子,有如下一串内容:为了节约篇幅,这里只例举10个数字,实际可能很长10| 7| 68| 13| 18| 121| 25| 100056| 32| 100|要求将上面纵向排列的数字内容,改为:横向排列数字之间改为使用逗号分隔(本来是使用|的嘛)对于这个case,有了这个快捷键就变得相当容易了,操作步骤如下:选中一个|符号按control + command + g选中全部|符号,就像这样:输入,替换掉|使用快捷键回到(所有行)行首,按delete键,将列变为行。大功告成:10,7,68,13,18,121,25,100056,32,100,一般来讲:对于上面这种简单文本的编辑笔者会使用sublime text,恰巧此功能快捷键同IDEA。看来,很多主流IDE的快捷键都是遵循“规范”的,开发者切换起来也够方便。最后想强调一点:此快捷键虽好,请务必注意使用哦。此项操作属于纯文本操作,需特别注意选中编辑的范围,避免误伤。特别在使用control + command + g全选时,一定要检查清楚喽(很长的单词误伤概率较小,短单词要更加注意)切换到列模式列编辑模式,特殊场景特殊用处。Action NameKeyColumn Selection Modecommond + shift + 8使用该快捷键进入列模式后,界面不会有任何变化。那如何知道当前处在列模式or not呢?看右下角:若多出了它,就说明编辑窗口当前处在列模式下,拖动鼠标/方向键就是按列编辑。注意:按esc是无法退出列模式的,退出方式是:再按一次commond + shift + 8一般来讲列模式只需要在某些瞬间开启就行,不需要长期存在。所以IDEA提供了一种快捷方式:按住option键,然后竖向拖动光标,即可达到同样的列编辑的效果,优点比较明显:随用随走。列编辑模式笔者使用的频率还是比较高的,比如一个非常非常典型的应用场景:批量修改访问修饰符:该怎么快速完成所有属性访问修饰符protected -> private的修改,这里就不做说明了。留作作业,自己动手尝试一下?总结本文继续介绍了IDEA 视图和选择相关的快捷键,希望在文本编辑、代码编辑的道路上能够帮助到你来提高开发效率。还是补上那句话:快捷键没有任何技巧性,练就完了!下篇继续介绍Intellij IDEA的实用快捷键。那,咱们下篇再见!推荐阅读【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(IDEA导航篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇)【方向盘】超爱的IDEA提效神器Save Actions,卸载了【方向盘】利用IDEA代码审查能力,来保证代码质量【方向盘】是如何高效的使用IntelliJ IDEA我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签2013.07 清考、毕业答辩3次未通过、延期毕业2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作️️2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》序号专栏名称简介01【方向盘】-程序人生程序人生,人生程序02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈......新特性03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石07【方向盘】-Spring staticstatic关键字在Spring里的应用08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类13【方向盘】-ServletServlet规范、Web相关内容专题14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间15【方向盘】-工具/提效开发工具、软件工具,目标是提效16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功.........99源代码库大多数专栏均配有源代码,都在这里源代码库地址:https://github.com/yourbatman/tech-column-learningCSDN主页:https://blog.csdn.net/f641385712掘金主页:https://juejin.cn/user/430664289367192博客园主页:https://www.cnblogs.com/yourbatman个人博客主页:https://yourbatman.cn个人网盘主页:https://wangpan.yourbatman.cn
文章
IDE  ·  架构师  ·  Java  ·  程序员  ·  领域建模  ·  开发工具  ·  Maven  ·  开发者  ·  Windows  ·  Spring
2022-12-10
【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)
扔掉鼠标,提高效率。本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏你好,我是方向盘(YourBatman)前言本系列上篇文章介绍了IDEA里关于视窗、选择方面的快捷键,熟练掌握可以快速找到、定位到自己想要的代码。本文将继续IDEA在Run运行、Debug调试方面的快捷键。所属专栏【方向盘】-IntelliJ IDEA相关下载【本专栏源代码】:https://github.com/yourbatman/FXP-java-ee【技术专栏源代码大本营】:https://github.com/yourbatman/tech-column-learning【女娲Knife-Initializr工程】访问地址:http://152.136.106.14:8761【程序员专用网盘】公益上线啦,注册送1G超小容量,帮你实践做减法:https://wangpan.yourbatman.cn【Java开发软件包(Mac)】:https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit版本约定Mac OS 12.4iTerm2 3.4.15(zsh 5.8)IntelliJ IDEA 2022.1.3✍正文IntelliJ IDEA快捷键Run/Debug在运行方式下,程序执行,但不会暂挂或检查执行在调试方式下,程序执行,但可暂挂执行和继续执行、可检查变量,还可对表达式求值Run运行Action NameKeyRuncontrol + rRun current filecontrol + shift + rRun...control + option + r运行(main方法)。运行是个通用概念,这里专指Java语言里的main方法(或者单元测试里的@Test)。运行好理解,这里的重中之重是搞清楚这三个 Run的区别是什么:control + r:运行上下文里当前的入口,也叫运行上次运行过的入口。也就是当前这里显示的入口:它的优点是可以在Project的任意地方直接运行此入口来启动项目,非常非常的方便,也是笔者最为常用的运行方式,毕竟一般来讲一个应用(不管是Spring Boot应用or传统war应用)只会有一个入口的嘛control + shift + r:运行当前文件里的main方法。它的特点是:当前文件若有main方法,它会自动找到它运行,不管你文件有多长;当然喽,若当前文件没有main方法,那按下此快捷键将无反应它的典型使用场景是:自己写main方法测试某些东西的时候,按下快捷键运行将非常高效值得注意的是:当你按下此快捷键后,这里(如下图)也会切换哦,所以此时若再按下control + r执行的的可是“它”了control + option + r:它不会执行运行,而是调出Run的窗口,让你选择入口,如下图所示:实话说,这个快捷键笔者用得很少,毕竟大多数情况下就1-2个入口嘛,前两个快捷键足够用了,各位自取所需Debug调试Action NameKeyRuncontrol + dRun current filecontrol + shift + dRun...control + option + d逻辑含义完全同Run,这里就不做过多解释了。有个小技巧:Run/Debug窗口选择入口时,按shift是可以互相切换的:Tips:debug也是一种运行态,从状态来讲二者都属于运行范畴,都可以stop停止Stop停止Action NameKeyStopcommand + f2Disconnectcommand + f2Cancel Querycommand + f2...command + f2停止正在运行的(进程)。比如:main方法进程、SQL连接、Http请求、执行SQL的进程...当然喽,在IDEA里用的最多还是停止main方法进程,也就是这个按钮:值得注意的事,若当前有多个线程正在运行,那么按下此快捷键时会弹出窗口,交由你决策(效果同鼠标点击右上角的停止按钮):调试快捷键正所谓三分开发,七分调试,所以熟练掌握常用的debug调试快捷键,也是用处大大滴。常用按钮位置分布如图:对了,之前发过一篇“很强悍”的调试技巧,可结合本文一起参阅效果更佳:最好的IDEA debug长文?看完我佛了Step OverAction NameKeyStep Overf8单步执行、单步调试。是使用最频繁的调试快捷键,没有之一。它的特点是: 遇到子函数时不会进入子函数内,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。Step IntoAction NameKeyStep Intof7也叫单步执行、单步调试。和Step Over的区别是:遇到子函数时会进入子函数内。Step OutAction NameKeyStep Outshift + f8当已经单步执行到子函数内时,使用此功能可以一次性执行完子函数余下部分,并返回到上一层函数(停住)。Force Step IntoAction NameKeyForce Step Intooption + shift + f7顾名思义:强制进入。Force Step Into和Step Into的区别是:前者可进入任何方法,后者只能进入自定义方法or三方库方法,官方库(如JDK库)是不能进入的。如下的toString()方法使用Step Into是进不去的,若想进入只能使用Force Step Into老实说,大多数情况下Step Into就够用了,Force Step Into其实比较少用到。Force Step OverAction NameKeyForce Step Overoption + shift + f8当在使用Step Over的时候,执行到函数时若内部有断点,则会停住。而若使用Force Step Over的话,无论此函数里面是否有断点,略过直接执行到下一行。Tips:由于此功能不太常用,所以debug面板里没按钮,若需要就用快捷键触发喽Run to CursorAction NameKeyRun to Cursoroption + f9或者force touch这个快捷键笔者巨喜欢,非常非常方便。功能含义就是字面意思:程序执行到光标位置暂停。它绑定了两个快捷键,笔者习惯用后者:使用Mac的force touch简直不要太香,所见即所得,体验完美。什么是force touch?点击前往EvaluateAction NameKeyEvaluate Expression...option + f8调试过程中,代码中的变量值可以在窗口中直接看到,但是,有些是看不到的,比如:中间变量、表达式计算值。这时候就得祭出这个神器了:Evaluate Expression。有一定开发经验的小伙伴一定都用过这个功能,既然这么常用,以后能用快捷键来提效吗?哦对了,当你在输入框里写好语句想要执行时,也无需使用鼠标点击右下角的Evaluate按钮,按common + enter即可执行(效果同点击右下角的Evalute按钮)说明:common + enter在Mac里是个常见快捷键组合,在很多场景里都代表Run、执行、确定的含义Quick EvaluateAction NameKeyQuick Evaluate Expressionoption + command + f8或者option + click快速执行(光标选中的)表达式,就像这样:实话讲,该快捷键在实际工作中比更常用。根据笔者的经验,调试过程中大多数情况是执行源代码里已经存在的表达式的值来查看,而需要自定义表达式的场景是比较少的,所以这个快捷键要记牢喽。说明:该功能绑定有两个快捷键,各位按需食用,哪个顺手就用哪个呗Resume ProgramAction NameKeyResume Programoption + command + R或者f9继续执行程序,直到遇到下一个断点。换句话讲,若后面再无断点就执行结束。该快捷键,笔者常用,有“放行”之意。丢帧功能键:Drop FrameAction NameKeyDrop Frame暂无功能直译:丢(栈)帧。使用此功能:可以回退到之前的堆栈,就像将当前栈帧给丢掉不要了一样,效果就是如果调试过程中“错过”了某个步骤想重来一次,使用它就可以重新进入执行。在debug视窗里,可以看到当前线程的调用堆栈:说明:只有堆栈的数量>1时,Drop Frame按钮才可使用,否则是灰色的。这时点击一次该按钮,就会将栈顶的这帧丢弃掉,就像这样:这样子若想再执行一次stringSize这帧就非常方便了,似乎有时光机的效果。值得关注的是,Drop Frame这个功能IDEA默认并没有给快捷键,我觉得原因有二:此功能使用上需要当心,时光机可能也倒回不了真实的现场用技术语言解释为:若丢掉的那一帧对上下文状态(如全局变量、发送了消息、DB持久化了数据等等)做了更改,这种是不会撤销的。而这,很可能导致再次执行时的路径不一样,所以需要谨慎为之基于1的特点,IDEA觉得该功能使用的频率不会太高,了解的程度也因人而异,所以默认就不给绑定快捷键喽实话讲,笔者使用该功能也很少,毕竟大多数情况下重新启动新的线程来调试也不费多大事,但环境是干净有保障的。其它功能键IDEA作为强大的集成开发环境,对于debug调试的支持更是强大,比如:丢帧功能、lamda表达式调试、stream流调试等等。现在已是2022年,基本你想要的功能它都有,只是有些(不太常用)的默认没有绑定快捷键。这些Action一般可通过右键、顶部菜单栏调出来,如下图:可根据个人习惯,觉得哪些是常用就绑定为自己习惯的快捷键组合就可以了。总结本文继续介绍了IDEA Run运行和Debug调试相关的快捷键,希望在调试的路上能助你节约时间,提高逼格,离“高手”之路更近一步。还是补上那句话:快捷键没有任何技巧性,练就完了!下篇继续介绍Intellij IDEA的实用快捷键。那,咱们还是下次再见!推荐阅读【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(视窗、选择篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(IDEA导航篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇)【方向盘】超爱的IDEA提效神器Save Actions,卸载了【方向盘】利用IDEA代码审查能力,来保证代码质量【方向盘】是如何高效的使用IntelliJ IDEA我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签2013.07 清考、毕业答辩3次未通过、延期毕业2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作️️2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》序号专栏名称简介01【方向盘】-程序人生程序人生,人生程序02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈......新特性03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石07【方向盘】-Spring staticstatic关键字在Spring里的应用08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类13【方向盘】-ServletServlet规范、Web相关内容专题14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间15【方向盘】-工具/提效开发工具、软件工具,目标是提效16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功.........99源代码库大多数专栏均配有源代码,都在这里源代码库地址:https://github.com/yourbatman/tech-column-learningCSDN主页:https://blog.csdn.net/f641385712掘金主页:https://juejin.cn/user/430664289367192博客园主页:https://www.cnblogs.com/yourbatman个人博客主页:https://yourbatman.cn个人网盘主页:https://wangpan.yourbatman.cn
文章
SQL  ·  架构师  ·  Java  ·  程序员  ·  测试技术  ·  领域建模  ·  开发工具  ·  iOS开发  ·  MacOS  ·  Spring
2022-12-10
【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(代码补全篇)
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏你好,我是方向盘(YourBatman),坐稳扶好,开始发车。TitleLink所属专栏【方向盘】-IntelliJ IDEA源代码https://github.com/yourbatman/FXP-java-ee程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法https://wangpan.yourbatman.cnJava开发软件包(Mac)https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit女娲工程http://152.136.106.14:8761版本约定[Mac OS 12.3],[iTerm2 3.4.15(zsh 5.8)],[IntelliJ IDEA 2021.3.3]前言本系列上篇文章介绍了IDEA里关于Run运行、Debug调试相关的快捷键,熟练后使用起来逼格更高了有木有。如你所知,IDEA非常的“智能”,能给与你代码提示、问题智能修复等帮助。本文将继续介绍IDEA在代码补全方面的快捷键,加快你的编码过程。✍正文IntelliJ IDEA快捷键Code Completion涵盖了各种上下文感知的代码完成技术,使你能够加快你的编码过程。BasicAction NameKeyBasiccontrol + space自动代码补全。比如i.toS敲打后:按下control + space快捷键,将自动补全i.toString(),这就是代码自动补全功能。值得注意的是,若此时IDEA有多个补全选项,也就是说无法帮你决策如何补全代码,这时就会列出所有可能选项,交由你来做选择决策,正如下图所示:这不就是津津乐道的代码提示、代码补全功能吗。快捷键就是control + space。Tips:control + space快捷键在某些场景按两次,有时候你能得到惊喜哦Show Quick Fixes/Context ActionsAction NameKeyShow Quick Fixes/Context Actionsoption + 回车也叫它万能键:在提示报错的地方按下此快捷键,IDEA根据上下文总能给你一些修复提示,达到快速修复问题的目的。这个快捷键的使用频率也贼高,基本原则是:哪里报错点哪里。Complete Current StatementAction NameKeyComplete Current Statementcommand + shift + 回车完成当前语句。形容很抽象,功能很强大:当前还未完成的语句,此快捷键可快速帮你完成。那么,(Java中)什么是Statement:表示某种操作, 但是没有返回值Integer i = 100;if语句break语句...此时按下此功能快捷键,将快速补全if语句:老实说,笔者使用该快捷键频率很高,但绝大多数情况下只用于补全语句末尾的;。若让自动补全if、while等这种逻辑语句的时候,有时候会出现逻辑问题,所以你使用的时候也要小心。Delete LineAction NameKeyDelete Linecommand + deletedelete按键是一个个删除(或者删除选中的区域),而很多时候我们需要按行删除,这时该快捷键就非常好用了,它可以按行删除:没有任何选中时,删除光标所在行有选中区域时,删除选中区域所有行如图所示,按下此快捷键时18-23共6行将全部被删除。Duplicate Line or SelectionAction NameKeyDuplicate Line or Selectioncommand + d请注意该功能命名和上面的差异:Line or Selection可知它即可复制一行,又可复制选中部分,是或者的关系。对比,上面有且仅针对行Line进行操作,这是不一样的,具体表现在:没有任何选中时,按行复制,复制光标所在行到下一行当有选中时,这时就按内容复制了,和行没有关系:选中多少复制多少,然后将复制的内容放到选中区域尾部按两次command + d的效果为:最后再强调一下,可认为该快捷键具有两个功能:复制1行,或者复制选中内容到选中区域末尾。后者的典型使用场景是:横向内容快速拷贝。Duplicate Entire LinesAction NameKeyDuplicate Entire Linescontrol + command + ↓这个快捷键我贼喜欢,相较于command + d我更喜欢这个。它的含义是:复制全部行。若没有任何选中or只选中一行,效果同command + d;若有Selection,那么它复制的是选中区域的所有行,语义更加清晰,使用更加便捷。按两次control + command + ↓的效果为:这种效果用起来更方便有木有,有木有?使用此快捷键再结合下面介绍的移动快捷键,将可以发出更大威力,可谓加强版CV。Tips:IDEA默认并没有给该功能绑定快捷键,笔者觉得这个比command + d更好用而自定义的(和其它键无冲突)快捷键,各位酌情取之哈Move Statement Up/DownAction NameKeyMove Statement Up/Downcommand + shift + ↑/↓将Statement作为一个整体进行移动,重点是整体移动,所以不会存在缺胳膊少腿不完整现象,它更像自动挡,由IDEA帮你决策移动哪些行、以及智能放到合适的位置。如图例子,若要向上移动System.out.println(v)这个Statement的话,“合适的位置”在图中已标出,只有三处。Tips:只能向上移动3次,因为Statement不可能出现在stream之间,也不能出main方法嘛。这便就是自动挡的“好处”Move Line Up/DownAction NameKeyMove Line Up/Downoption + shift + ↑/↓该移动方式就是手动挡喽:具体移动哪些行自己定(单位:行)具体移动到哪里自己定(一行一行的移动)如图例子,移到哪里去完全自由,且没有边界。实话讲,笔者个人还蛮喜欢使用这种移动方式的,更为常用。Reformat CodeAction NameKeyReformat Codeoption + command + l格式化代码,IDEA(根据格式化模板)帮你整理空格、换行等格式,让代码看起来更整洁,建议经常使用。Tips:默认会格式化当前文件的所有内容。若只想局部格式化,那就选择区域后格式化,只会作用于选择的那部分代码另外,在IDEA 2021.0.1版本新增了特性,有个新工具Actions on Save:可勾选Reformat code选项,这样在保存的时候就自动格式化啦Reformat FileAction NameKeyReformat File...option + command + l它的目标也是格式化,当按下此快捷键时会弹出对话框:解释这些选项:Scope:格式化范围Only changes uncommitted to VCS:只格式化为提交的文本Selected text:只格式化选中区域的文本Whole file:整个文件Options:格式化选项Optimize imports:优化导包(删除无用的导包)。常用Rearrange code:重新排列代码。根据code style代码样式对代码重新排列。不常用Code cleanup:代码清理。删除掉未被使用的变量、方法等。不常用Do not keep line breaks:不保留换行,也就是仍按照code style方式去格式化。不常用言而总之,它是option + command + l的加强版:可对格式化定制化。但老实讲,实际使用大都还是直接使用上面的option + command + l完成格式化,方便快捷。Optimize importsAction NameKeyOptimize importscontrol + option + o一键整理导入语句,删除没有使用过的导入,非常使用。不过实话讲,这个快捷键笔者很少使用,原因是我会开启IDEA的自动处理设置,所以就不用我再手动处理啦。如下图所示(也建议你这么干):Override/Implements MethodsAction NameKeyOverride Methods...control + oImplements Methods...control + i这两个快捷键放在一起,因为它俩功能很“相似”:都是复写/实现方法。举个例子:public class Demo implements InitializingBean { }该类实现了InitializingBean接口但没复写其方法,编译肯定报错的。这时我们可以借助IDEA快捷键帮我们快速生成相关代码,有多种快捷键方式:control + i:它的语义是实现。在类内部任意位置按下此快捷键,会弹出还未实现的接口方法,如下图所示:值得注意的是,这里只会列出还未实现的接口方法,若已没有符合条件的方法(比如你都已经实现了,或者真的没有接口方法待实现了)就会弹出如下提示:control + o:它的语义是复写。在类内部任意位置按下此快捷键,会弹出父类可以复写的所有方法,另外它还会附带把还未实现的接口方法带出来,也能达到实现接口方法的目的。如下图所示:从这个case相信你能感受到control + o和control + i的区别了吧。然而,你是否还联想到咱前面讲过一个个“万能修复”快捷键呢?是的,就是option + 回车快捷键。按下此键,得到如下窗口:这时点击Implement methods这项,将会生成实现接口所有的还未实现的方法,注意是所有哦。这三组快捷键看似都可以完成接口方法的实现问题,但各有各自最适合的场景,使用时因地制宜。笔者这三个快捷键使用得都挺多的。除此之外,针对复写/实现这种场景,笔者还有一个常用的“小技巧”,手动书写出需要复写/实现的方法名然后调出提示:这就相当于半自动挡喽,使用的前提是你需要知道你想复写的方法的大致名称,这样IDEA才能提示你。我喜欢使用该方式的主要原因:焦点可快速定位到我想要的地方,方法的位置自己也可控。GenerateAction NameKeyGenerate...command + n或者control + 回车自动生成构造器、get/set方法、toString()方法、测试用例等等,非常好用的一个快捷键。在lombok越来越流行的今天,这个快捷键笔者其实已经很少使用了。Line/Block CommentAction NameKeyComment with Line Commentcommand + /Comment with Block Commentcommand + optino/shift + /或者 optino + shift + /快速生成代码行注释/块注释,这个太简单也太常,就不赘述了。总结本文继续介绍了IDEA 代码补全相关的快捷键,感受到IDEA在上下文感知的代码完成技术上的强大,希望在编码的过程中,能加快你的进程,提升你的出活效率。还是补上那句话:快捷键没有任何技巧性,练就完了!下篇继续介绍Intellij IDEA的实用快捷键。那,咱们还是下次再见!推荐阅读【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(视窗、选择篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(IDEA导航篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇)我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签2013.07 清考、毕业答辩3次未通过、延期毕业2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作️️2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》序号专栏名称简介01【方向盘】-程序人生程序人生,人生程序02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈......新特性03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石07【方向盘】-Spring staticstatic关键字在Spring里的应用08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类13【方向盘】-ServletServlet规范、Web相关内容专题14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间15【方向盘】-工具/提效开发工具、软件工具,目标是提效16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功.........99源代码库大多数专栏均配有源代码,都在这里源代码库地址:https://github.com/yourbatman/tech-column-learningCSDN主页:https://blog.csdn.net/f641385712掘金主页:https://juejin.cn/user/430664289367192博客园主页:https://www.cnblogs.com/yourbatman个人博客主页:https://yourbatman.cn个人网盘主页:https://wangpan.yourbatman.cn
文章
架构师  ·  Java  ·  程序员  ·  测试技术  ·  领域建模  ·  开发工具  ·  计算机视觉  ·  iOS开发  ·  MacOS  ·  Spring
2022-12-10
【方向盘】超爱的IDEA提效神器Save Actions,卸载了
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏你好,这里是Java方向盘,我是方向盘(YourBatman),坐稳扶好,开始发车。TitleLink所属专栏【方向盘】-IntelliJ IDEA源代码https://github.com/yourbatman/FXP-java-ee程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法https://wangpan.yourbatman.cnJava开发软件包(Mac)https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit女娲工程http://152.136.106.14:8761版本约定[Mac OS 12.3],[iTerm2 3.4.15(zsh 5.8)],[IntelliJ IDEA 2021.3.3]前言一切工具,都是为了提效。效率的提升一般来讲并不改变事务的本质,但足够高的效率也能引起质变,这和程序员熟悉的量变引起质变道理一样。IDEA作为Javaer的必备神器,几乎每个开发者都在使用。作为(公司内)IDEA的布道者,笔者分享的每篇IDEA相关文章都能受到喜爱,比如最近的两篇:【方同学】是如何高效的使用IntelliJ IDEA【方同学】利用IDEA代码审查能力,来保证代码质量工具好,也要用得巧。虽说每个Javaer都在用着同一个工具(IDEA),但对工具的使用效率上往往差异较大,可以翻看的文章,看看自己是否在低效率的使用它!本文给你安利一个提效神器:Save Actions,再向你解释下笔者为什么要卸载它!✍正文代码风格一致性开发过程中,当遇到痛点时总希望去寻找相应的工具解决。在开发项目时,一般都是多人维护一个项目。代码写下去只需要1次,但会被人看几十上百次,所以保持一致的代码规范、代码展示变得非常重要。但是,当团队内多人开发一个项目时,由于每个人的编码习惯、思维习惯、水平、觉悟都高低不一具有多样性,那么如何保证“所有人”的代码风格一致呢?这个时候就得使用规则了。相信很多团队各自都有自己的代码规范模板,模板一般是取最大公约数定出来的,比较容易达成一致。毕竟漂亮的东西趋同,只会丑得千奇百怪。定好代码的规范模板后,组员如何能高效的实施呢?这个时候一般要求提交代码之前必须(按照规范模板)格式化处理,进而达到抹平差异,去除掉个人风格,达到统一的目的。问题又来了:IntelliJ IDEA是自动保存的,因此很多时候你修改了代码之后就出现:代码没有格式化、出现无用的import、无用的变量等一些列“不规范”的问题就保存了/提交了,怎么破? 针对这类痛点,作为开发神器的IDEA怎能想不到。因此它也针对性的提供了相应方案。✌代码审查嗯,方式方法都在这里:【方同学】利用IDEA代码审查能力,来保证代码质量优点:全局扫,大而全缺点:项目太大时候可能慢。另外,毕竟还是手动的,忘记了就没辙了✌commit前执行Action在IDEA的commit窗口栏里,点击如图红色框框里的设置按钮:每个选项都代表什么功能,单词你都认识,所以不用多余解释了。优点:在提交前集中式卡点,可做到没有漏网之鱼缺点:阶段过于靠后。若需要修改,留给RD修改的时间太少了。所以经常会出现妥协式提交PS:如果你平时提交代码用黑窗口、Smart Git而非IDEA,那就享受不到此“福利”喽就我个人习惯而言,我不喜欢使用commit这种方式,工作中也很少使用。我认为应该将此动作提前:编辑每个文件保存时就及时触发相应动作,并且是自动的(无需人为干预)。所以,接下来就引入本文主角:Save Actions。Save Actions是什么?直译:保存动作(们)。翻译为保存时触发的动作更为合适~它其实也就是IDEA的一个插件而已:简介为:支持可配置的、类似Eclipse的保存操作,包括“优化导入”、“重新格式化代码”、“重新排列代码”、“编译文件”和一些Java快速修复程序,如“添加/删除“this”限定符”,等等。当文件在磁盘上同步(或保存)时,插件将执行配置的操作。惊不惊喜?这不正是我们需要的功能吗?是的,有了它,再也不用担心团队成员提交没有“处理”过的代码了。我的常用配置如下截图:如果你乐意,还可以勾选多个Java检查快速修复功能点(Java Inspection and Quick Fix),我一般不勾。为何卸载Save Actions?既然Save Actions这么好用,笔者为何要卸载它呢?一切都要从IDEA的迭代发展说起~并不是笔者不重视这块了,而是有更好的方式取而代之。笔者从2017年底开始使用IDEA到现在,见证了它的迭代,最近几个版本都有写新特性的文章哦:IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效IntelliJ IDEA 2020.1发布,你要的都在这!IntelliJ IDEA 2019.3发布,有哪些新特性?随着IDEA的发展,硬核功能点越来越完善。举个例子:lombok自2015年起逐渐流行开来,因此在IDEA上安装lombok插件也就成了必备动作。既然如此,IDEA在其2020.3便将lombok插件设为内置,开发者无需再手动安装:同理,IDEA眼瞅着使用者对自动代码格式化/自动代码检查的需求这么高,索性就将此功能也内置了。值得注意的是:从2021.2版本起才内置哦。此功能并非以插件形式内置,位置在这: Preferences/Settings | Tools | Actions on Save以上(勾选的)动作在保存时会自动触发。有了它,我似乎没有理由再留着Save Actions插件,这便是笔者卸载它的根因。下面对最常用的3个功能进行简述:✌Reformat code格式化代码,推荐勾选☑️ 。格式化代码范围:Whole file:整个文件。这是默认选项Changed lines:只格式化修改的行(们)。保守点的话,你可以使用此选项Configure scope:配置范围。支持书写glop patter语法)来自定义需要格式化的代码范围;支持通过@formatter:off/on等方式来控制某段代码不允许/允许格式化。这个自定义的功能怎么说呢,绝大多数情况下用不着这么去自定义,毕竟大大提高了复杂度。格式化MyBatis的xml文件里的SQL时有时会出问题,这时可以通过加上@formatter:off/on注解来禁止格式化(需要先开启此功能)✌Optimize import重新排列import导包。作用:将import按照顺序重新排列(比如static静态导入会放到最后)删除掉无用的import推荐勾选☑️ 。✌Rearrange code重新排列代码,推荐勾选☑️ 。关于这个功能可能有的同学不太了解,拿Java举个栗子吧。源代码:/** * 在此处添加备注信息 * * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> * @site https://yourbatman.cn * @date 2021/8/20 15:06 * @since 0.0.1 */ public class Demo { private String name; public int fun1(){return 0;} private void fun0(){} private static void funStatic0(){} private int age; public static void funStatic(){} }代码保存(触发Optimize import动作)后:/** * 在此处添加备注信息 * * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> * @site https://yourbatman.cn * @date 2021/8/20 15:06 * @since 0.0.1 */ public class Demo { private String name; private int age; private static void funStatic0() { } public static void funStatic() { } public int fun1() { return 0; } private void fun0() { } }这就是重新排列的含义。自上而下排序规则:属性 -> 静态方法 -> 实例方法。开发工具保持使用最新版在编程界,坐在第二排看戏被公认不失为一种很好的升级策略:既保证不会过于陈旧享受不到新技术红利,又在稳定性上有所保证。比如:JDK版本不要当小白鼠追新Spring Boot、中间件版本不要一味追求最新版...根据我的从业经验,对此观点有所改变,分享出来供你参考:和数据打交道的基础设施层面(如JDK、Spring Boot、MQ、Redis...),尽量保守点,毕竟稳定压倒一切开发工具类(如IDEA、DataGrid、Navicat...)推荐保持最新版,享受新功能特性带来开发效率上的提升,原因有三1、享受新红利:可能是性能上提升、也可能是新功能来辅助你提升开发效率。毕竟对于软件来讲,新不如旧的可能性极低极低2、keep update能让你对升级不再恐惧。毕竟若从2017年版本一步升级跨入2021年版本,对兼容性方面心里都会打鼓3、开发工具即使出现(重大)bug,对数据不会造成任何影响,况且这个概率极低极低即使是开发工具升级切勿盲目。至少你得看看升级的feature,是否存在阻断式更新等等...当然,据我了解,以IDEA为例,同学们不升级到最新版的最大阻碍是:无法破解。这个笔者就不多说什么了(毕竟正版IDEA确实比较贵...),是否购买正版自行选择喽~✍总结本文旨在输出一个观点:一切工具旨在提效,工具好也要用得巧。正所谓同样一把菜刀,握在米其林餐厅厨师手中和握在街边小炒厨师手中的功效的完全不一样的。如果你还想了解IntelliJ IDEA什么内容可留言告诉我互相交流学习哈。当然喽,对于那些“IDEA如何破解?”、“IDEA插件推荐”这类话题,笔者无感的so推荐阅读【方同学】利用IDEA代码审查能力,来保证代码质量【方同学】是如何高效的使用IntelliJ IDEA【方向盘】IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德【方同学】女娲Knife-Initializr工程可公开访问啦【方向盘】轰动从未停止,感动从未消失。他,是周杰伦【方向盘】阿里巴巴入选的JCP最高执行委员会,何方神圣?我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签2013.07 清考、毕业答辩3次未通过、延期毕业2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作️️2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》序号专栏名称简介01【方向盘】-程序人生程序人生,人生程序02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈......新特性03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石07【方向盘】-Spring staticstatic关键字在Spring里的应用08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类13【方向盘】-ServletServlet规范、Web相关内容专题14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间15【方向盘】-工具/提效开发工具、软件工具,目标是提效16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功.........99源代码库大多数专栏均配有源代码,都在这里源代码库地址:https://github.com/yourbatman/tech-column-learningCSDN主页:https://blog.csdn.net/f641385712掘金主页:https://juejin.cn/user/430664289367192博客园主页:https://www.cnblogs.com/yourbatman个人博客主页:https://yourbatman.cn个人网盘主页:https://wangpan.yourbatman.cn
文章
架构师  ·  Java  ·  程序员  ·  数据库连接  ·  领域建模  ·  开发工具  ·  Android开发  ·  开发者  ·  Spring  ·  mybatis
2022-12-10
【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(重构篇)
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏你好,这里是Java方向盘,我是方向盘(YourBatman),坐稳扶好,开始发车。TitleLink所属专栏【方向盘】-IntelliJ IDEA源代码https://github.com/yourbatman/FXP-java-ee程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法https://wangpan.yourbatman.cnJava开发软件包(Mac)https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit女娲工程http://152.136.106.14:8761版本约定[Mac OS 12.3],[iTerm2 3.4.15(zsh 5.8)],[IntelliJ IDEA 2021.3.3]前言本系列上篇文章介绍了IDEA里关于代码补全相关的快捷键,感受到了IDEA强大的代码智能补全功能了吧,对比eclipse就知晓二者的差距,IDEA的成功是有原因的。在敲代码过程中,代码总是被改来改去的,不免会经常出现提取变量、抽取方法、重命名、移动位置等等动作,这时若利用好Java强类型语言的特性,再加上本文将要介绍的快捷键,可事半功倍。✍正文很多时候我们去优化代码,不是因为不会,而是不想动、不敢动。怎么打破这种局面,根本的方法就是利用好工具,借助它的能力来帮我们确保一些正确性,减少不必要的重复劳动,进而提升效率和质量。熟练使用本文介绍的快捷键,可能可以让你更愿意去解决代码坏味道,提升代码可读性,产生价值。IntelliJ IDEA快捷键✌Extract抽取你有没有吐槽过:这段代码里的0代表什么意思?1代表什么意思?20代表什么意思?这时,代码需要优化、需要对某些值抽取为变量,以增加代码可读性,方便维护。下面介绍这些实用的快捷键。Introduce VariableAction NameKeyIntroduce Variablecommand + option + vlocal variable. 引入变量/抽取变量。注意:这里引入/抽取的变量指的本地变量、局部变量。这个快捷键还是比较常用的,典型的应用场景:将魔法值抽取成有语义的变量这里的2和2+3语义就不明确,属于魔法值需要尽量避免的。通过该快捷键就可以抽取本地变量进行描述,如下:将多次出现的值(比如字符串)抽取成为变量,方便阅读和维护Introduce FieldAction NameKeyIntroduce Field...command + option + ffield variable. 引入成员变量,也叫属性。值得关注的是:从static静态方法引入变量,那么成员变量就是static的从实例方法引入变量,那么成员变量就是非static的Introduce ConstantAction NameKeyIntroduce Constant...command + option + cconstant. 引入常量。该快捷键就非常非常常用喽,毕竟一般来讲魔法值大都可以改为常量来描述,语义更加明确。Introduce ParameterAction NameKeyIntroduce Parameter...command + option + pparameter. 抽取为参数(方法入参)。当你发现方法内的某个值不能写死,而是需要通过方法入参传进来的时候,使用此快捷键抽取就非常方便了。选中nums后按下此快捷键,即可将其提取到方法参数里,效果如下:Extract MethodAction NameKeyExtract Method...command + option + mmethod. 抽取方法,显而易见这个快捷键太有用了:将功能抽取为私有方法,增加代码可读性。inlineAction NameKeyinline...command + option + n将分步的代码使用的内联的方式放在一起。和上面抽取是反向的。举例:觉得fromIndex不需要定义,直接使用2这个值就成:选中fromIndex这个变量,按下此快捷键,效果为:再看方法inline。觉得getSubList()方法没必要独立出来,希望把逻辑内联聚合在一起:选中getSubList方法,然后按下此快捷键,效果为:若方法只有一个地方使用,inline后其实就可以remove掉嘛。点击Refactor确定后效果为:老实讲,这个快捷键用得其实是比较少的。毕竟大多数情况下,抽取出来独立声明都是会更好些的。但也难免有些为了抽取而抽取,毫无章法、无依据可言的做法,这时“合并”一些代码此快捷键就是一把利器了。✌Refactor重构正所谓重构一时爽,出错火葬场。即使它的“风险性”比较高,但相信“有追求”的程序员依旧乐此不疲。其实Java语言对重构是非常友好的,这是强类型语言的最大优势之一。虽然说重构有风险,但只要让风险相对可控,这件事情是非常有必要去做的。接下来就介绍重构方面的常用功能快捷键。RenameAction NameKeyRename...shift + f6重命名。变量(本地变量、成员变量、静态全局变量)重命名方法重命名类重命名...结合Java强类型语言的特性,重命名在Java里非常非常非常好用。重命名文件,也是这个快捷键。由于Java文件一般和class类名一样,因此重命名文件对应的类名也会随着变化。Change SignatureAction NameKeyChange Signature...command + f6改变方法签名。鼠标焦点停留在方法签名上,按下此快捷键:可以看到这里也可以改变方法名称(重命名),除此之外还有入参、返回值、访问权限、异常声明等等。Tips:据我了解,不少同学不知道方法签名指的什么,包含哪些要点内容。通过上面这张截图应该了然于胸了吧MoveAction NameKeyMove...f6移动静态方法、移动静态全局变量,将它从类A移动到类B。注意:移动的对象必须是static静态的。比如:希望将getSubList这个静态方法移动到另一个类里面。选中该方法,按下此快捷键:填好To目的地的类名,即可完成移动。Tips:静态成员都可移动,即使访问修饰符是privateCopyAction NameKeyCopy...command + ⌦Tips:键盘上的delete是⌫,而⌦是:fn + delete安全删除。这对很多人来讲可能是一个全新名词,什么是安全删除:确保删除该元素(变量、方法等),不会对程序产生编译错误的影响。比如我要安全删除getSubList方法,按下此快捷键就会弹出如下窗口:点击ok,若没有其它地方使用了,就删掉了;倘若检查到该方法别的地方还有使用,就会继续弹窗告知你,然后让你再做决策,防止误删:如果你是在做一个比较重要、敏感的删除动作(比如修改线上代码分支),那么就不要怕麻烦,使用安全删除确实会更安全一些,也自然而然的会提高你的重视程度。不过,一般来讲,使用普通删除即可,方便快捷。✍总结本文继续介绍了IDEA 重构相关的快捷键,结合Java强类型语言的特性,正确的使用IDEA提供的重构功能,能够控制风险,大大降低重构的“难度”呀。在我认为,一个coder需要提升,就应该“多多重构”自己的or别人的代码,这时本文的这套快捷键你值得拥有。还是补上那句话:快捷键没有任何技巧性,练就完了!下篇继续介绍Intellij IDEA的实用快捷键。那,咱们还是下次再见!推荐阅读【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(代码补全篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(视窗、选择篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(IDEA导航篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇)【方向盘】超爱的IDEA提效神器Save Actions,卸载了【方向盘】利用IDEA代码审查能力,来保证代码质量【方向盘】是如何高效的使用IntelliJ IDEA我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签2013.07 清考、毕业答辩3次未通过、延期毕业2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作️️2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》序号专栏名称简介01【方向盘】-程序人生程序人生,人生程序02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈......新特性03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石07【方向盘】-Spring staticstatic关键字在Spring里的应用08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类13【方向盘】-ServletServlet规范、Web相关内容专题14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间15【方向盘】-工具/提效开发工具、软件工具,目标是提效16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功.........99源代码库大多数专栏均配有源代码,都在这里源代码库地址:https://github.com/yourbatman/tech-column-learningCSDN主页:https://blog.csdn.net/f641385712掘金主页:https://juejin.cn/user/430664289367192博客园主页:https://www.cnblogs.com/yourbatman个人博客主页:https://yourbatman.cn个人网盘主页:https://wangpan.yourbatman.cn
文章
安全  ·  架构师  ·  Java  ·  程序员  ·  领域建模  ·  开发工具  ·  Android开发  ·  iOS开发  ·  MacOS  ·  Spring
2022-12-10
【方向盘】升级到IDEA 2022.1版本后,我把Maven Helper卸载了
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏你好,这里是Java方向盘,我是方向盘(YourBatman),坐稳扶好,开始发车。TitleLink所属专栏【方向盘】-IntelliJ IDEA源代码https://github.com/yourbatman/FXP-java-ee程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法https://wangpan.yourbatman.cnJava开发软件包(Mac)https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit女娲工程http://152.136.106.14:8761版本约定[IntelliJ IDEA 2022.1.1]之前有追写过多篇IDEA新特性的文章,每篇都能被CSDN官方首页推荐/公众号转载:IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效IntelliJ IDEA 2020.1正式发布,你要的Almost都在这!IntelliJ IDEA 2019.3正式发布,给我们带来哪些新特性?IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line每次IDEA发布新版本,我都是第一时间升级。现在为啥不追着写篇文章介绍了呢?主要有两个原因:明显感觉从2020年后的升级,新特性就比较小了。毕竟IDEA已非常成熟疲了,也追不动了所以每次,自己默默升上去就好:Tips:每次升级IDEA后都能看到全新的启动图,还蛮有新鲜感的。✍正文本文并不是介绍IDEA 2022.1版本的新特性,而是只着眼于笔者对此次版本升级“最感兴趣”的部分:IDEA依赖分析器。顺道简单介绍下Maven,以及笔者卸载掉的Maven Helper插件。MavenMaven是Apache开源组织奉献的一个开源项目。Maven这个单词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需做一些简单的配置,就可以批量完成项目的构建、报告和文档的生成工作。它是跨平台的,这意味着无论是在Windows上,还是在Linux或者Mac上,都可以使用同样的命令。说了这么多,本文只着眼于Maven的一项功能:依赖管理。这是开发者和Maven打交道最多的功能,也是Maven的核心能力之一。✌Maven依赖管理早期的Java开发者,依赖需要手动管理,是个大问题。你造的,这种事不仅费时费力,而且还容易出错。Ant缓解了这个问题,但还是直到Maven的出现,才真正彻底解决了依赖管理这个问题,让开发者可以全心投入到开发中去。要理解好Maven的依赖管理,得先了解相关概念。说明:本文并非Maven文章,只对Maven依赖管理方面的概念做简单科普。依赖的Scope依赖的scope决定其生效的范围,依赖的生效范围共计三种:build生效test生效runtime生效scope有多种取值:compile : scope缺省值。三种范围都生效,参与打包。例如:spring-coreprovided : build生效,test生效,runtime不生效,不参与打包。例如:servlet-apiruntime : build不生效、test生效,runtime生效,参与打包。例如:mysql-connector-java(JDBC驱动)system : build生效,test生效,runtime不生效,不参与打包。不是从maven仓库引入,而是在本地目录的下的jar,十分不推荐使用test: build不生效,test生效,runtime不生效,不参与打包。例如:JUnit、Mockitoimport :仅仅在dependencyManagement内部才有这个值,它对范围都不生效。用于引入外部依赖,进行依赖管理知识点:runtime不生效的,都不会参与打包,不参与打包就不会参与传递,因为在打包阶段,使用的是运行classpath。小插曲:provided和optional的区别<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>从结果来看:二者是一样的。都不会被打入包中,依赖不会传递给上层。所以它哥俩的区别在于使用场景上。optional:表示该依赖是可选的,它的侧重点是强调这个依赖是可选的,不会被打入jar包内,也不会传递。注意:即使不传递、不打入jar包的内,运行时也不能报错optional更强调一种规范使用,表示可选,但即使没有该依赖也不影响程序运行,所以一般是需要程序进行一些额外的判断逻辑来保证程序的健壮性。provided:表示这个依赖是必须的,但是呢这个依赖通常在运行期不需要或者已经被提供了,比如lombok运行期不需要,servlet-api运行期已提供,所以都适合用provided而不适合用optional最后,分享一个比喻,将二者的区别道出来,我觉得特别好,分享给你:optional:吃面时候,酱油、辣椒等就是可选的(强调可选性),加不加都不会影响面的正常食用(强调结果正确性,运行期不会报错)provided:吃面时候,筷子、碗是必须的(强调必须性),不过这些一般是店家给顾客备好,不需要顾客自带(强调结果正确性,运行期只是不需要有而已)依赖传递机制如图,Maven的依赖传递机制,大大地减少了人工维护间接依赖的复杂度。至于哪些依赖可以向下继续传递,上个part已经有结论了:参与打包的就可以传递依赖,runtime生效的scope才会参与打包,也就是只有compile和runtime这两个scope能够传递依赖。依赖仲裁Maven管理传递依赖时,绝大部分时候我们无需关心依赖是哪儿来的。只有当依赖出问题时(比如希望是xx版本,但实际进来的是yy版本),才需要搞清楚此依赖是哪条路径进来的,为什么是这条路径。所以,当一个间接依赖来自多个路径时,了解Maven的依赖仲裁策略非常重要,是解决此问题的关键。Maven依赖仲裁其实也比较简单,总结一下就两个原则:路径最短者优先先声明者优先优先使用第1原则,当第1原则无法解决时,则通过第2原则决定。举个简单的例子辅助理解一下:项目A的依赖如下,问:A最终依赖Z的版本号是多少?A -> B -> C -> D -> Z(1.0) // 路径长度4 A -> X -> Y -> Z(2.0) // 路径长度3 答:2.0。原因:Z(1.0)的依赖路径长度为4,而Z(2.0)路径长度是3,根据路径最短者优先原则,最终Z的版本号为2.0。那么,问题来了。在实际生产项目中,这种间接依赖的场景会非常非常多,怎样高效的定位问题所在呢?maven提供了相关依赖分析命令:查看依赖列表:mvn dependency:list查看依赖以树状展示:mvn dependency:list依赖分析:mvn dependency:analyze虽然命令有了,但分析起来还是不够直观,那么破?在集成开发环境时代,这种棘手问题肯定早已被解决,它就是:Maven Helper。Maven Helper它是IDEA的一个插件,可以通过 UI 界面的方式来查 Maven项目的依赖关系,很是直观。由于Java项目大都使用Maven进行管理,所以Maven Helper几乎可以说是必装插件。在IDEA 2022.1发布之前,笔者一直使用它。看插件的评分,是我见过的评分最高的插件,非常优秀。✌功能:依赖分析和解决冲突安装好插件后,打开pom.xml文件,可以看到左下角靠右边多了个Dependency Analyzer:点击此tab进入Maven Helper的功能区:如上图所示,commons-lang和jackson-core存在冲突,这里以jackson-core为例解释冲突的原因以及为何最终仲裁为2.9.9版本。原因:此依赖存在多个路径,且版本号还不一样:pom里显示引入(直接依赖),版本号为2.9.9通过jackson-databind间接引入,版本号为2.11.3(jackson-databind的版本号为2.9.9)结果解释:直接依赖的路径长度是1,通过jackson-databind间接依赖的路径是2,按照路径最短者优先原则最终仲裁出来的版本号为2.9.9。有时候,若就想要2.11.3这个版本生效,或者想解决所有conflicts避免隐患怎么办?这个时候就可以借助exclude来做,使用Maven Helper提供的图形化界面操作非常的方便,在想要排除的地方右键:点击Exclude后的效果为:自动帮你把exclusion部分加上去了。然后刷新刚才的视窗,发现此冲突完美解决:依赖分析和解决冲突是Maven Helper最常用的功能,甚至没有之一。✌功能:快速执行maven命令这个用处,其实没那么的大。毕竟IDEA提供的Maven视窗已足够好用,就算偶尔手敲两个命令也不算麻烦。还有其它功能比如展示依赖关系图、在当前位置快速启动命令行等,我觉得实用性都不算高,就不做过多介绍了。那么问题来了,笔者作为Maven Helper的忠实用户,它也确实很好用,为何还将其卸载呢?一切只因IDEA 2022.1发布了。IDEA 2022.1JetBrain在2022年4月26日,正式发布了IntelliJ IDEA 2022.1。本次属于大版本升级,对使用者来讲最大的改变就是引入了 Dependency Analyzer,依赖分析器。✌功能:Dependency AnalyzerDependency Analyzer,用于以UI方式管理依赖项和解决冲突。我去,咋一看这就是冲着Maven Helper来的呀,几乎完全重叠有木有。在IDEA的maven视窗里点击依赖分析按钮,进入依赖分析窗口,如下图所示:此窗口顶部有多个选项区域,逐个解释:选择maven模块:对于多模块的项目,这里可以选择按模块处理依赖关系选择Scope:默认选择所有是否显示GroupId:多数情况下GroupId都不用显示,所以默认情况下此选项也是没有被选中的是否只显示有冲突的依赖:下面重点看看IDEA在冲突上的显示和处理能力,和Maven Helper还是有点不一样的:请注意理解这个视窗,它和Maven Helper的Conflicts是有明显区别的。IDEA的是:坐标表示已经解决的依赖们。换句话讲:列出来的依赖是有问题的(和实际生效的版本冲突的、没有存在意义的),这样开发者可以非常有针对性的解决左边这些依赖们右边窗口显示的是左边光标选中的依赖的一个使用情况(是谁把你带进来了,依赖路径有多长)注意对比下面窗口列表和的不同,这里表示最终生效的版本号:笔者个人认为,这种显示方式是优于Maven Helper的,很是直观。真可谓JetBrain出品,必属精品。奈何,有个小小缺陷:当我想要通过exclusion方式去解决冲突的jar时,它并不能“一键”帮我完成,而只能导航到问题处自己手动解决:你觉得IDEA后续会把“该功能”加上来吗?使用IDEA自带的依赖分析器,打开的pom.xml文件时并不会和Maven Helper一样多出一个tab,而是保持原样:最后,值得一提的是:IDEA的Dependency Analyzer功能不仅适用于Maven,还适用于Gradle。最后,值得一提的是:IDEA的Dependency Analyzer功能不仅适用于Maven,还适用于Gradle。最后,值得一提的是:IDEA的Dependency Analyzer功能不仅适用于Maven,还适用于Gradle。✍总结新版IDEA提供的Dependency Analyzer依赖分析功能,笔者认为不输Maven Helper。重点是前者是原生自带的(且还支持Gradle),后者还得额外安装插件,孰优孰劣高下立判。所以,我头也不回的卸载了Maven Helper,相忘于江湖。赶紧升级到最新的IDEA 2022.1版本吧,一起体验它的依赖分析工具,以及something else new~本专栏上下文【方向盘】工具提效:Sublime Text 4的常用快捷键合集【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(Git&Other&完结篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(Live Template&Postfix Completion篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(重构篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(代码补全篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(视窗、选择篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(导航篇)【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇)推荐阅读【方向盘】蚂蚁金服上市了,我不想努力了【方向盘】每人送1G超小容量,“BAT网盘”免费助你做减法【方向盘】因“双减”失业,厉经9面,终获美团外卖L8的Offer我是方向盘(YourBatman):前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖...是我不可抹灭的黑标签2013.07 清考、毕业答辩3次未通过、延期毕业2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作️️2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍《Spring奇淫巧技》序号专栏名称简介01【方向盘】-程序人生程序人生,人生程序02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈......新特性03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石07【方向盘】-Spring staticstatic关键字在Spring里的应用08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类13【方向盘】-ServletServlet规范、Web相关内容专题14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间15【方向盘】-工具/提效开发工具、软件工具,目标是提效16【方向盘】-Spring技术栈新特性 Spring Framework、Spring Boot、Spring Cloud、Spring其它技术17【方向盘】-基本功 每个Javaer,都需要有扎实的基本功.........99源代码库大多数专栏均配有源代码,都在这里源代码库地址:https://github.com/yourbatman/tech-column-learningCSDN主页:https://blog.csdn.net/f641385712掘金主页:https://juejin.cn/user/430664289367192博客园主页:https://www.cnblogs.com/yourbatman个人博客主页:https://yourbatman.cn个人网盘主页:https://wangpan.yourbatman.cn
文章
架构师  ·  Java  ·  程序员  ·  数据库连接  ·  领域建模  ·  Apache  ·  Maven  ·  开发者  ·  Windows  ·  Spring
2022-12-10
serverless 入门与实践39 | 学习笔记: 华为 Serverless 核心技术与实践
本文是 serverless 入门与实践 的第39篇学习<华为 Serverless 核心技术与实践>, 计划: 1篇前言 + 10篇/章 + 1篇总结翻译服务Serverless架构多视图的软件架构是软件架构设计文档中的重要组成部分。它不仅是一种架构归档的方法,还是一种架构设计的思维方法。按照视图划分软件,通常采用4+1视图方式,即逻辑视图、开发视图、部署视图、运行视图和用例视图。对于翻译服务,逻辑视图非常重要,我们需要按照业务功能进行领域建模。领域建模的方法非常多,可以基于业务经验进行建模,也可以利用一些标准的领域驱动设计技术,如DDD按照架构分层设计的理念,我们首先完成翻译服务的零层和一层架构设计,然后结合DDD的设计方法,完成翻译服务的领域对象设计、限界上下文和业务子域划分,最后根据业务子域和限界上下文划分函数。功能架构翻译服务零层架构翻译服务一层架构函数划分策略结合业务特点,利用领域建模的方法对翻译函数进行划分划分方法-函数的划分总体上遵循“高内聚、低耦合”的原则,同时结合翻译服务的业务特点,以及团队人员技能等因素综合确定划分方法:按照角色进行划分,每个角色对应1个或多个函数。按照业务领域划分,每个限界上下文和业务子域对应1个或多个函数。按照性能、可靠性等进行拆分,通常的划分维度包括:批量操作或单个操作,内部使用的运营管理类功能或面向用户的业务功能等。按照功能重要性进行划分,将核心业务和非核心业务分开,保障服务SLA和可靠性。函数划分方法主流程梳理开发者业务主流程翻译服务商业务主流程平台管理员业务主流程进行领域建模时,事件风暴是一个比较实用的工具,通常包含产品需求、场景分析等领域建模-翻译服务业务域划分示例技术架构翻译服务领域模型示例关键架构质量属性设计: 性能设计准则通过在距离函数最近的位置提供本地缓存同步编程接口调用编程比较简单,串行化编程比较容易理解,但是其缺点也比较明显。业务线程利用率低纠结的超时时间雪崩效应可以通过异步调用来解决同步调用导致的阻塞和资源使用率低的问题,异步调用会在一定程度上增加编码和问题定位的复杂性,因此推荐在适用的场景下使用异步调用。通过缓存、异步等技术可以将单点的性能优化到极致云数据库弹性扩容架构关键架构质量属性设计: 可靠性设计准则业务域的可靠性主要依托云函数服务自身的可靠性来保障。双云双活,ELB/SLB自动切换流量。函数平台基于微服务构建,微服务无状态,可随意启停替换,不影响业务函数实例对外服务。业务函数实例故障,函数平台负责自动重启实例。函数间容器隔离,故障互不影响。心跳检测机制,基于健康检查结果,请求只分发健康的实例。关键架构质量属性设计: 安全性设计准则提供的主要安全能力包括以下几个方面接入安全:App、用户和服务三重认证;基于角色的权限管理;不同的租户使用不同的Database,保证数据隔离。数据安全:云端数据存储自动加密;端云全密态数据管理。攻击检测与系统韧性:防SQL注入;过载检测与流量控制;系统审计。
文章
SQL  ·  缓存  ·  安全  ·  数据管理  ·  Serverless  ·  测试技术  ·  领域建模  ·  数据安全/隐私保护  ·  微服务  ·  容器
2022-12-03
Android 需要哪些架构手段(一)
前置知识已入门 Android了解过一些设计原则前言关于 Android 的架构问题,想必大家都听说过 MVC、MVP 和 MVVM ,且当下又出现了更新的 MVI。诸如此类的这些架构,都是我们日常所在使用的。这是我们代码设计中,对于业务开发会经常要用到的。但是除却业务开发呢?我们需要将系统分为更多层的时候需要怎么办呢?要了解哪些东西呢?我们不妨将视野放宽,看看 Android 本身的架构,或者是其他客户端手段的架构,亦或是前端后端的架构,学习他们的架构手段,我们也能收获很多设计的思想。所以本文将会简单的讲一下一些值得我们学习的架构手段。架构的作用我们经常说一个架构帮助我们解耦,让我们开发得更顺畅。那么架构的作用,其出现的根本原因只是帮助我们解耦吗?当然,架构能帮助我们进行解耦这是其出现的一个重要原因;但事实上更重要的是,它能够帮助我们解决特定领域在不同阶段发送的业务问题。它是伴随着一整个软件的生命周期而存在的,继而也要对应的解决每个生命周期中出现的问题。我们软件周期包括:新生期、稳定期和老年期。在新生期,架构要适应业务的不断膨胀问题;而在稳定期,架构则要让业务不断地重构和优化;最后到了老年期,架构要做的是如何让项目老得更慢,不要让过分臃肿的代码影响业务的正常运作。我们可以有理想的架构,一开始就设定好来解决这些个问题,但实际上,理想总归是理想,我们要接受现实的骨感。事实上,我们很难存在一个理想的架构,因为业务是不断在变化的,变化才是软件唯一的不变点,所以架构也只能随着变化而变化,不断去解决出现的问题。Android 的架构设计我们可以看一下 Android 的架构设计,看看它的设计是如何解决出现的问题的。下面的图大家都很熟悉了,这里不做详细介绍,只做简单的罗列。APP 层:业务代码层,在这一层实现自己的业务FrameWork 层:应用框架层,开发者对系统的 UI 编写,对数据的使用和调用接口,使用的都是这一层的 APIBinder IPC:由于 Android 是有进程隔离的,所以使用 Binder 来跨进程高效通信系统服务层:提供窗口、音视频、相机等能力。往下是对硬件能力的封装,往上是可以通过 Binder 暴露给其他人HAL 硬件抽象层:其屏蔽底层驱动的差异,使得系统服务层可以快速匹配到不同的硬件设备LINUX 内核层:CPU 、内存等重要的驱动服务在这一层实现。由此,我们可以看出,Android 内部架构的设计是很有逻辑性的,底层为高层服务,越高层使用的越是定制化的内容。不同领域的架构设计由下图,我们可以看出在不同的端侧,其使用的语言、框架和平台都是不同的。但是在他们身上是可以找出共同点的,这些共同点是经过长期积累,抽象出来的方法论,是很值得我们学习的点。公共的点包括:编程思想:OOP、IOP、IOC 等问题分解:按业务和技术分解领域建模:接口设计、DSL 等服务治理:模块化、组件化、容器化等流程机制:敏捷开发模型、软件测试手段等架构标准:公约文档,数据监测等所以说,对于架构的设计,我们应当知晓它是不断随着需求和出现的问题不断变更优化的,且不同的架构虽有差异,但是差异之外的共同点很值得我们去学习。值得学习的架构手段了解了架构的作用之后,我们需要学习一些架构手段,以便解决软件生命周期中出现的各种问题。设计模式要做好架构设计,首先逃不掉需要学习的点及时设计模式,而设计模式又是基于设计原则来进行拓展的。学习设计模式,其最重要的就是学习其设计思想了。设计模式 - Yj家的孺子牛的专栏 而就如前文中讲过的 volatile 和 synchronize ,synchronize 中瘦锁容易被打断变成胖锁;而使用了 volatile 关键字之后就不会被打断。所以,我们认为使用了 volatile 关键字的单例模式更优。这些对设计模式的深入使用的理解,是很容易影响到我们对架构设计的好坏的。下文中,DoubleCheck 设计的单例模式就会相对更优些。//LazySafe public class SingleTonTest { private static SingleTonTest instance; private SingleTonTest() { } public static synchronized SingleTonTest getInstance() { if (instance == null) { instance = new SingleTonTest(); } return instance; } } //DoubleCheck public class SingleTonTest { private static volatile SingleTonTest singleton; private SingleTonTest() { } public static SingleTonTest getInstance() { if (singleton == null) { synchronized (SingleTonTest.class) { if (singleton == null) { singleton = new SingleTonTest(); } } } return singleton; } } 复制代码
文章
设计模式  ·  前端开发  ·  测试技术  ·  领域建模  ·  Android开发  ·  开发者  ·  容器  ·  Linux  ·  敏捷开发  ·  API
2022-12-02
2022年语言和框架我们值得关注什么?
大家好,我是秦粤。今年我有幸成为第十七届D2大会--语言与框架专场的出品人。2022年,结合阿里巴巴的前端和客户端融合的趋势,D2今年也升级为了:D2终端技术大会。我在做出品人之前,特别好奇D2每年那些对技术发展的预判是怎么做出来的?例如React,Vue,Serverless等等话题。不知道你会不会也好奇,D2每年的内容是如何产生的?筛选机制是什么?D2大会的话题是怎么来的?我是2019年第一次做D2的出品人,2022年第十七届终端D2是我第三次做D2的语言与框架出品人了。过去2届D2我从会后在知乎和一些前端同学笔记中,可以看到不少同学还是能get到我的用意的:语言与框架专场上,主要在引入函数式编程和数据驱动,此外也是是想让前端开发者对我们前端依赖的基础设施--浏览器和JavaScript生态有所感知。这是因为我所接触的大多数前端工程师,都以业务需求和应用开发为主。大多数时候都是在卷前端开发效能,不停的在应用层研究提速轮子。我就在想有没有另外的一些可能:例如像Rescript那样创建一门前端语言,从语言层面改变前端开发的生态,或者RxJS那样的函数式开发框架,通过函数式编程解决前端开发引入的“副作用”?今年D2转变到终端D2的大会,加入了客户端的同学,“客户端”在我映象中最近几年好像并没有特别新的技术,至少我的认知还在swift和kotlin上面。当我跟几个阿里的客户端同学沟通了一下,发现大家的认知是一致的,因为swift和kotlin都远远还没有到普及的地步。我也在想,我们今年D2是不是可以多讲一些成熟的语言和框架,讲讲Product Ready的技术。我在做D2的话题选择或每年的技术推衍时,经常会参考2个资料:Gartner的《技术成熟度曲线》和ThoughtWorks的《技术雷达》。技术成熟度曲线实际上,的确很多新兴技术没有到普及就被抛弃了,Gartner每年都在做的技术成熟度曲线(需付费咨询),预言了每门技术的发展规律:诞生的促动期,期望膨胀峰值期,泡沫破灭谷底期,稳步爬升光明期,实质生产的高原期。新兴技术前期在任何一个时期都可能夭折消失,而只有生态健壮的和市场认可的技术才能一直走到高原期,持续推进延续它的生命。thoughtworks的技术雷达(免费下载)[传送门],也会圈出每年新晋的技术和移入移出的技术。技术雷达是通过推荐你是否采纳到生产环境的维度考虑的。因此今年终端D2,除了那些新兴的促动期,还在全栈疯狂hype的技术,我们也会引入一些日趋成熟(稳定高原期)的技术。2022年语言和框架我们值得关注什么?今年我们最大的感受就是寒气逼人,不过越是低谷期,越应该调整心态,通过积极学习去积攒实力。做技术的优势就是确定性比较高,即使市场再动荡,但是底层的很多基础是不变的。想起我2020年前端艺术家沙龙的一张PPT,大家共勉。2022年在前端开源社区依旧活跃。除了QuickJS外,还有前段时间充满争论的bun.js,最近还有横空出世的turbopack。跟前端生态不同的是,我所接触的客户端开发者,则普遍有种悲观情绪,感觉移动互联网的风潮已经过了,上升通道正在关闭。这点也是我们做终端人才融合一个初衷:客户端和前端工程师不应该是技术隔离的,而融合后应该是根据业务分层的:应用开发终端工程师和基础架构开发终端工程师。“T字”型的结构:应用开发跟贴近业务,专注业务领域建模;基础架构开发贴近技术规范演进,用技术推进业务发展。所以今年我们D2语言与框架,准备引入的应用层Product Ready的内容有:Java的函数式编程kotlin和苹果的swift最佳实践。kotlin和swift发展到今天也已经是前后端通用的语言了,有各自的开发生态。对于客户端的同学也可以通过这些语言切换到后端服务开发。我一直秉持在云原生发展到今天,后端的服务架构早就已经与开发语言无关了,我们完全可以用自己熟悉的各种语言去做后端开发。掌握着2门语言的开发者也可以体验一波客户端+后端的全栈了,全栈工程师虽然近些年提的少了,但是全栈的视角更加通透,对于无论业务侧的问题和基础侧的问题,都有更多的解法和认知。基础架构层的课题有:NoSlate框架和turbopack。NoSlate是新生代轻量化 Javascript 容器方案,由阿里Midway团队出品,让你单台服务器也可以秒变Serverless。turbopack比较出名了,最近vercel的CEO亲自案例,号称比vite快10x,还引来的evan的讨论。终端可以看看rust改造的又一案例,何如?当然以上这些内容还没有最终定稿,还在投票筛选中。同学们你如果有好的话题也欢迎投稿给我们。也可以对自己感兴趣,想听的上面内容进行投票。结尾听说寒气已经传递到大洋彼岸的硅谷了,这个时候更加适合调整好自己的心态,多多学习,积攒实力。but anyway都希望寒冬早点过去。我还是喜欢"盎格鲁•迅"那句:终端技术要发展,社区生态靠大家。
文章
Rust  ·  前端开发  ·  JavaScript  ·  Cloud Native  ·  Serverless  ·  领域建模  ·  Swift  ·  开发者  ·  Kotlin  ·  容器
2022-12-01
1 2 3 4 5 6 7 8 9
...
20
跳转至:
开发与运维
5611 人关注 | 131418 讨论 | 301451 内容
+ 订阅
  • 【MySQL从入门到精通】【高级篇】(二十八)子查询优化,排序优化,GROUP BY优化和分页查询优化
  • 【云原生】为什么 BI 软件都搞不定关联分析,到底为什么呢?
  • 1024程序员节|【MySQL从入门到精通】【高级篇】(二十七)外连接和内连接如何进行查询优化呢?join的原理了解一波
查看更多 >
微服务
22994 人关注 | 11313 讨论 | 33210 内容
+ 订阅
  • DCM:中间件家族迎来新成员,属实牛逼
  • DCM:中间件家族迎来新成员,属实牛逼
  • Jenkins集群配置/并发构建
查看更多 >
数据库
252511 人关注 | 50730 讨论 | 94574 内容
+ 订阅
  • 【MySQL从入门到精通】【高级篇】(三十)记一次mysql5.7的新特性derived_merge的坑
  • 【MySQL从入门到精通】【高级篇】(二十九)覆盖索引的使用&索引下推
  • 【MySQL从入门到精通】【高级篇】(二十八)子查询优化,排序优化,GROUP BY优化和分页查询优化
查看更多 >
云原生
233847 人关注 | 11318 讨论 | 45139 内容
+ 订阅
  • 【云原生】为什么 BI 软件都搞不定关联分析,到底为什么呢?
  • 【云原生】SPL 提速天体聚类任务 2000 倍【文末送书】
  • Apifox --- 全套服务提升了团队效率,让研测之间充满了爱(记Apifox在工程中的实际应用)【云原生】
查看更多 >
安全
1188 人关注 | 23954 讨论 | 81102 内容
+ 订阅
  • 通用文档信息提取模型浅析
  • 【MySQL从入门到精通】【高级篇】(二十三)EXPLAIN的概述与table,id字段的剖析
  • 【配电网规划】配电网N-1扩展规划研究(Matlab代码实现)
查看更多 >