生产力提速增效的4大敲门砖

news2024/9/22 7:29:09

引言: 本文章将分四大板块介绍提高程序员生产力的方案,最大化利用你的IDE ,其中Live Template篇,插件篇非常值的一看, 用好才能提速增效

Productity Guide篇

Postfix Completion篇

Live Template篇

插件篇

Productity Guide篇

自行打开 IDEA - help - My productity (旧版本叫Productity Guide) , idea统计的生产力特性,熟练掌握这些特性,开发事半功倍

Tips: 大部分特性包含快捷键操作,快捷键因为WIN MAC或者idea键位不同,然后IDEA提供了多种版本快捷键,所以选择自己适合的即可(sublime /eclipse/vs等),如果你没有适合的,或者你刚从其他工具转到idea来,那么我建议选择idea classic , 因为你换了操作系统之后键位不会变化太大

以下是根据Used排名,筛选出比较重要的功能介绍

  • Syntax aware selection(语法感知选择):为什么这里用得这么多,因为平时我们会双击一个单词来选择这个单词也会被统计计入

    • Windows: CTRL+W

    • MAC: ⌘W

    Apr-18-2023 14-51-28

  • Basic code completion (基础代码补全): 输入. 就会自动唤醒,无需按快捷键,但是需要掌握

    • Windows: Ctrl+空格
    • MAC: ⌃Space
  • Go to declaration(转到声明):实际我个人用得不多,建议 CTRL 加鼠标左键,无鼠标用户需要掌握

  • Windows: Ctrl+B

  • MAC: ⌘B

  • Go to implementation (实现类跳转) : 实际我个人用得不多,建议 Ctrl+ALT+鼠标左键 , 无鼠标用户需要掌握

    • Windows: Ctrl+Alt+B
    • MAC: ⌥⌘B
  • Complete statement (语句智能补全) : 这个功能五星推荐 ,不仅仅是帮你补全你输入的一半字符串,而且当你一个语句发现少一个分号的时候; , 直接 ALT+SHIFT+ENTER帮你补全上,当你输入if的时候没有帮你加括号的时候,当你语句排版很乱的时候,按一下,奇迹就会出现

    • Windows: Ctrl+Shift+Enter

    • MAC: ⇧⌘⏎

    image-20230418145327268

  • Search Everywhere (随处搜索): 双击Shift searchAll , 按TAB切换相关TAB,也可以记住下面的快捷键,一次定位

    • Windows: Shift+Shift 随处搜索 Ctrl+N 搜索类 ,Ctrl+Shift+N 搜索文件 ,Ctrl+Alt+Shift+N for 字段和方法, Ctrl+Shift+A 搜索Actions ( IDEA模块功能关键字)

    • MAC: ⇧+⇧ 随处搜索 ⌘N 搜索 类, ⇧⌘N 搜 文件, ⌥⇧⌘N for 字段和方法 ⇧⌘A 搜索 Actions(操作)

    image-20230418145350656

  • File structure popup (文件结构弹出): 超级好用的一个功能,找方法或者找全局变量超级快 , 也可以快速找内部类

    • Windows: Ctrl+F12

    • MAC: ⌘F12

    image-20230418145416172

  • Speed search in trees(树形结构快速搜索): 在树状视图中均可用,比如在左边项目结构中

    image-20230417145613537

  • Use Introduce Variable to quickly declare variables (使用引入变量快速声明变量): tips , 直接把光标放在语句中即可,系统会自动识别,不用全选你要声明的变量

    • Windows: Ctrl+Alt+V

    • MAC: ⌥⌘V

  • CamelCase prefixes in code completion(驼峰前缀搜索): 有一定用,但是又用得不多

  • Highlight method throws (高亮方法抛出异常): 这个真没用 , 比如选了第二个FileFoundException之后,会高亮箭头所指代码

    • Windows: Ctrl+Shift+F7

    • MAC: ⇧⌘F7

  • Override or implement a method (重写或实现方法) : 一定要记住,非常重要的功能

    • Windows: Ctrl+O 重写方法 Ctrl+I 实现方法
    • MAC: ⌘O 重写方法, ⌘I 实现方法
  • Go to class (转到类) : 实用,建议记住

    • Windows: Ctrl+N

    • MAC: ⌘N

  • Go to file (转到文件): 记住,重要

    • Windows: Ctrl+Shift+N

    • MAC: ⇧⌘N

  • Comment or uncomment a block (注释或取消注释块):实用,记住

    • Windows: Ctrl+/ 单行注释 Ctrl+shift+/ 多行注释
    • MAC: ⌘/ 单行注释 ⌃⇧/ 多行注释
  • Finish lookup with smart enter (使用智能回车完成查找):同 Complete statement (语句智能补全) , jetbrains换个名字继续炫

    • Windows: Ctrl+Shift+Enter
    • MAC: ⇧⌘⏎
  • Editor delete line (编辑器删除行): 实用,要记住 , 按一下光标所在那一行直接就删掉了,ctrl+z回滚刚刚的操作

    • Windows: Ctrl+Y
    • MAC: ⌘Y
  • Evaluate expression (计算表达式): 实用,仅调试时候有效 , 对着表达式右键可以出来一个弹框,可以自己输入表达式计算

    • Windows: ALT+鼠标点击表达式

    • MAC: ⌥ + 鼠标点击表达式

  • Surround statement with (语句环绕): 很好用的功能,一般用来环绕try catch 或者if,不过后面把try catch写入模板后,这个功能用得也不多

    • Windows: Ctrl+Alt+T

    • MAC: ⌥⌘T

  • Type-matching completion after new (new关键字后面的类型匹配补全):输入new后再输快捷键,会帮你进行类型匹配补全,不实用,现在补全都是很智能的,都直接把ArrayList放在第一个,不需要你按快捷键了, 没什么用

    • Windows: Ctrl+Shift+空格

    • MAC: ⌃⇧Space

  • Rename (重命名): 类名、方法名、变量名,使用的地方都会一起改,很实用

    • Windows: Shift+F6

    • MAC: ⇧F6

  • Postfix completion (后缀补全):快捷键. 具体有哪些后缀补全可以进入Preferences | Editor | General | Postfix Completion 中查看,可以记住一些简单的,var , new ,if 等。

    • Windows: Ctrl+J 展示后缀补全列表

    • MAC: ⌘J 同上

  • Edit breakpoint (编辑断点):

    • Windows: 对着断点右键
    • MAC: 对着断点右键
  • Second basic completion (二次基础补全) : 同 Basic code completion (基础代码补全)快捷键,作用是可以看到不允许访问的类和成员(属性、方法)

    • Windows: Ctrl+空格
    • MAC: ⌃Space
  • Surround expression with (表达式环绕): 同 Surround statement with (语句环绕)

    • Windows: Ctrl+Alt+T
    • MAC: ⌥⌘T
  • Recent files popup (最近文件弹窗):主要是你最近打开的文件 , 实际体验用得不多

    • Windows: Ctrl+E

    • MAC: ⌘E

  • Show Diagram Popup (显示类图弹窗):打开UML类图,常见的有以下几种关系: 泛化, 实现,关联,聚合,组合,依赖

    • Windows: Ctrl+Alt+U

    • MAC: ⌥⌘U

  • Show Diagram (显示类图):同上,只是会在一个新的窗口打开

    • Windows: Ctrl+Alt+Shift+U
    • MAC: ⌥⇧⌘U
  • Smart type casting(智能转换) : 缺点要带个括号 , 比如String s = ( , 就能变成 String s = ( String )

    • Windows: Ctrl+Shift+空格
    • MAC: ⌃⇧Space
  • Show usages (显示使用的地方)) : 我一般一般会用Ctrl+鼠标左键代替 , mac为 ⌘加鼠标左键

    • Windows: Ctrl+Alt+F7

    • MAC: ⌥⌘F7

  • Finish lookup with special characters ( 用特殊字符结束智能补全): 在智能补全中, . , ; 空格 都可以结束智能补全

  • New scratch file (新增暂存文件): 创建一个缓存文件,选中高亮的语法,比如Java高亮

    • Windows: Ctrl+Alt+shift+Insert

    • MAC: ⌃⇧N

  • Database Table Editor (数据库表编辑器): 对着表或者库双击即可打开编辑器

  • Quick Documentation popup (快速文档弹出): 光标定位某个类的时候,按快捷键,即可显示对这个类的文档描述

    • Windows: Ctrl+Q

    • MAC: ⌃J

  • Go to symbol (转到symbol): 创建一个缓存文件,选中高亮的语法,比如Java高亮

  • Windows: Ctrl+Alt+Shift+N

  • MAC: ⌥⇧⌘N

  • Replace By when using lookup (代码补全替换):所选名称将覆盖插入符号右侧名称的其余部分。这对于将一个方法或变量名称替换为另一个方法或变量名称特别有用。

    • Windows: 代码补全后 Tab

    • MAC: 代码补全后 Tab

  • Global method name completion (全局方法名补全):如果有一个静态方法,在你项目里面,jar包里面,JDK里面,输入前缀, 按 Ctrl+空格 (Mac上 ⌃Space) 2次 ,即可自动引入和补全 按 ALT+Enter(Mac上 ⌥⏎ 补全), 事实上ALT+Enter 有很多功能,比如说一句话是错误的,你按一下,会给你修复建议。

    • Windows: ALT+Enter

    • MAC: ⌥⏎

  • Tag Name Completion(Tag名称补全):XML中,如果你输入了一个tag但是没有定义,输入两次Ctrl+空格会帮你自动引入定义, 比如xml中没有定义task schema,你输入了task之后,使用快捷键就会帮你自动引入了

    • Windows: 2次Ctrl+空格

    • MAC: 2次⌃Space

  • Switcher (切换器):

    • Windows: Ctrl+Alt+Shift+N

    • MAC: ⌥⇧⌘N

  • Select In popup (弹窗选择): 用得不多,无鼠标用户用的

    • Windows: ALT+F1
    • MAC: ⌥F1
  • Move code element left/right(向左/向右移动代码元素): 有用,想移动参数顺序的时候

    • Windows: Ctrl+Alt+shift+左/右箭头

    • MAC: ⌥⇧⌘← and ⌥⇧⌘→

  • Quick Documentation in lookups(查找快速文档): 如图可以清晰看到类有几个构造函数

    • Windows: 查看文档 Ctrl+Q 查看参数 : Ctrl+P 进入: Ctrl+B

    • MAC: 查看文档 ⌃J 查看参数 : ⌘P 进入: ⌘B

  • Move inner class to upper level (将内部类移动到上层):

    • Windows: F6

    • MAC: F6

  • JAR Files Diff (Jar文件差异):看看jar升级了什么东西,也可以用于自己的jar . 文件夹比较也可以这么玩

    • Windows: Ctrl+D

    • MAC: ⌘D

    image-20230417183225974

  • Directory Diff (文件夹比对): 同上

  • Highlight implementing or overriding members (高亮实现和重写的方法):比如你实现某接口的什么方法,就能够高亮这些方法。

    • Windows: Ctrl+Shift+F7

    • MAC: ⇧⌘F7

  • Inspect Code in Bulk(批量代码检查): Code | Inspect Code 用处不大

  • Quick Definition in lookup lists (查阅列表中的快速定义)

    • Windows: Ctrl+Shift+I

    • MAC: ⇧⌘I

  • Use wildcards when navigating to a class, file, or symbol by name(按名称导航到类、文件或符号时使用通配符) :

    • * 代表任意数量的任意字符

    • 空格 标记模式的结束,前面的字符串不仅仅是前缀,而且被视为整个模式

  • Horizontal scrolling (水平滚动) : 需要掌握,比较重要 , 按住Shift滑动鼠标

  • Highlight method exit points(突出显示方法退出点): 高亮一个方法里面所有return的地方,仅仅高亮return那一行,无实际作用

    • Windows: Ctrl+Shift+F7

    • MAC: ⇧⌘F7

  • Completion in Find Bar (查找栏中唤醒智能补全) : 在查找栏中输入快捷键

    • Windows: Ctrl+空格

    • MAC: ⌃Space

  • Multiple carets Code (多个插入符号代码): 按住快捷键,然后用鼠标点击,形成多个光标 , 没用的知识又增加了

    • Windows: Shift+Alt

    • MAC: ⇧⌥

  • Recent changes (最近更改):看看最近改了什么,可以点击,没什么用

    • Windows: Alt+Shift+C

    • MAC: ⌥⇧C

  • Change completion variants sorting (改变补全候选项的排序): 点击那3个点,不建议更改智能排序,不推荐

Postfix Completion篇

后缀补全一般来说,还是有一些方便的地方,在new一个对象的时候,在引入变量的时候等

我们看一些常见的高频的后缀补全

  • new

    String.new   =======> new String() //其他对象也可
    
  • var

    new String().var =======> String s = new String();//
    
  • 其他的比如 if , for , iter , lambda, sout , try 等,我是不推荐的,毕竟 , live Template更香,能替代这些功能,且用着也很别扭

我们来自定义Postfix

Key表示你定义的关键字,不要与现有的重复,Minimum Language Level , 最小支持语言版本,1.3默认的就行,用到了高等级特性就要改成1.8 ,比如lambda , Applicable expression types , 适用的表达式类型。指的是你输入的表达式,比如你输入了 aa , 这里就是说的aa的类型,一般无需设置。固定����EXPR表示你输入的表达式, 固定���END表示光标结束位置。

  • 比如如下图,创建一个list,即可形成一个实例化ArrayList的语句,代码中只需要输入 Integer.list , Long.list即可生成一个句子。

  • 比如下图,形成一个JSON序列化的句子,只需要对str后面加上jsonParse即可

  • 比如下图,判断是否为空,也很高频

Live Template篇

前言

Live Template是一个预定义模板工具

适用范围

  1. 什么样的代码适合设置模板
  • 代码风格统一的
  • 使用频率高的
  • 比如new一个对象
  • 代码简单,无业务属性

简介

入口

可以看到,有很多预定义模板,有些我们平时用得很多,需要掌握,最基础的,像 iter / fori / psf /psvm/ soutv 等,要记住和熟练运用,达到事半功倍的效果。

使用

快捷键:

CTRL + J唤醒 liveTemplate

CTRL+ALT+J 唤醒liveTemplate 两个的区别 , 这个是只唤醒带$SELECTION$标签的,上面一个唤醒所有

下面我们来演示一下:

  • 比如我想引入一个Logger

  • 比如说我有个查询的方法,需要查询数据库

  • 比如这行语句会抛异常,我需要捕获,只需要在这一行按快捷键CTRL+ALT+J , 即可唤醒你设置的预定义模板 , 与传统的 surround with最大的不同就是,加入了LOG.error这句话,更方便

配置

根据上面的适用范围,我们可以抽一个我们平时用得比较多的代码配置成一个模板。比如定义一个字符串类型的变量,大多数人会开始敲private String xxx ,像这种完全可以定义为一个预定义模板

这样简单的配置,只需要输入 ps ,即可达成private String 的效果

平时大家是怎么new一个对象的呢?

这里就用到了简单的变量了, $VAR$ 是一个自定义变量, $CLASS_NAME$也是一个自定义变量 , 你需要对这些自定义变量进行赋值才行,点击右边的Edit variables .

可以看到自定义变量用了2个表达式, 这两个表达式都是系统已经定义好的。

  • suggestVariableName() 是系统自己填写变量名
  • completeSmart是唤醒系统智能补全组件

那么系统有哪些常用的内置表达式呢? 我挑选几个比较重要的讲一下

  • className() 获取当前编辑器页面的类名
  • clipboard() 剪切板
  • completeSmart() 唤醒智能补全组件
  • currentPackage() 当前类所在的包名
  • filePath() 当前文件所在路径
  • groovyScript() groovy脚本路径, 很重要,玩出花样就靠他了
  • methodName() 方法名
  • methodParameterTypes() 方法参数类型
  • methodParameters() 方法参数
  • methodReturnType() 方法返回值
  • qualifiedClassName() 当前类全限定名
  • suggestVariableName() 系统自己填写变量名
  • user() 当前系统登录用户

基本有了groovyScript脚本之后就可以为所欲为了。

以上文的try catch为例, try catch中比较重要的就是获取方法的参数(PS: 如果你要获取上下文的参数会稍微麻烦一点,需要用groovy读取整个Java文件并解析,当然可以做)

$SELECTION$ 是一个比较特殊的内置变量,表示选中你的关键字,或者你选中的关键字(语句、段落都可以),唤醒带有$SELECTION$的模板需要使用CTRL+ALT+J 快捷键,无法自动唤醒。

这里PLACEH​OLDERS用到了简单的grovvy脚本

groovyScript("_1.collect { it + ' = {}'}.join(', ') ", methodParameters())

_1 是传递进来的,表示 groovyScript() 表达式的第一个参数 , 就是methodParameters() , 这里拿到的结果是 param1={}, param2={}

ide也是支持外部groovy源码文件的,上面这样写不是很方便

groovyScript("/Users/admin/code/idea/script/setall.groovy",SELECTION,filePath())

然后你就可以用IDEA来编写groovy源码了,调试起来更容易 , groovy语法基本全面兼容Java语法,所以没有学习成本。

如何更进一步利用groovy

以生成所有的set 方法为例,先看效果

1. 文件法

a. 通过filePath() 获取到文件路径,读取这个文件到StringBuilder里面

    File file = new File(currentPath);
    StringBuilder stringBuilder = new StringBuilder();
    try {
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] buf = new byte[1024];
        int length = 0;
        while ((length = fileInputStream.read(buf)) != -1) {
            stringBuilder.append(new String(buf, 0, length));
        }
        fileInputStream.close();
    } catch (Exception e) {

    }

b. 使用正则获取包名

String regex = "import\\s([a-zA-Z_][a-zA-Z0-9_]*)+([.][a-zA-Z_][a-zA-Z0-9_]*)+[.]%s;";
    regex = String.format(regex, varName);
    //正则差早包名
    java.util.regex.Pattern PACKAGE_PATTERN = java.util.regex.Pattern.compile(regex, java.util.regex.Pattern.CASE_INSENSITIVE);
    java.util.regex.Matcher matcher = PACKAGE_PATTERN.matcher(stringBuilder.toString());
if (matcher.find()) {
        String packageName = matcher.group(0).replace(";", "").replace("import ", "");
}

c. 找到lib文件夹实例化UrlClassLoader

URLClassLoader urlClassLoader = null;
if (srcs != null) {
    File parent = srcs.getParentFile();
    File target = new File(parent, "target");
    if (!target.exists()) {
        return "没有target文件夹";
    }
    File WEBINFfiles = new File(target, parent.getName() + "/WEB-INF");
    if (!WEBINFfiles.exists()) {
        return "没有找到WEB-INF文件夹";
    }
    File[] files1 = WEBINFfiles.listFiles();
    List<URL> list = new ArrayList<>();
    for (File file1 : files1) {
        if (file1.getName().equals("lib")) {
            for (File listFile : file1.listFiles()) {
                URL url = listFile.toURI().toURL();
                list.add(url);
            }
        } else if (file1.getName().equals("classes")) {
            URL url = file1.toURI().toURL();
            list.add(url);
        }
    }
    urlClassLoader = new URLClassLoader(list.toArray(new URL[]{}));

d. 使用urlClassLoader加载这个class

Class<?> aClass = urlClassLoader.loadClass(packageName);
            java.lang.reflect.Method[] declaredMethods = aClass.getDeclaredMethods();
//有了这个class就可以反射获取方法

2. 源码法

源码法需要用到_editor这个内置对象,需要有一定的源码基础

    def document = editor.getDocument()
    //获取PSIJavaFile
    def psiJavaFile = com.intellij.psi.PsiDocumentManager.getInstance(editor.getProject()).getPsiFile(document);
    //获取行号偏移量
    //int line = lineNumber.toInteger()
    //def startOffset =  document.getLineStartOffset(line)

    //获取鼠标偏移量,上面的可能不太准,所以直接获取鼠标
    def mouseOffset = editor.getCaretModel().getOffset()
    //一般是标识符
    def psiReferenceStart = psiJavaFile.findReferenceAt(mouseOffset)

    def psiClass = null;
    //不管怎么样,最终目的就是通过这个语句,找到对应的PSiClass
    if(psiReferenceStart instanceof com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl){
        psiClass = ((com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl) psiReferenceStart).resolve();
    }else if(psiReferenceStart instanceof com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl){
        def localVariable = ((com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl) psiReferenceStart).
                getReference().resolve();
        def type = localVariable.getType();
        psiClass = type.resolve();
    }
    def psiMethods = psiClass.getMethods()

课后作业

有了这些基础,大家就可以自行写一个 set get方法的 live template了

插件篇

常用的插件相信大家都有安装 ,但是我推荐的是更好用的插件

MoFar

一款单元测试插件,嵌入在IDE里面,不用切换界面即可对自己写的代码进行调试,不用重启项目即可对更新的代码进行调试。加快测试代码效率, 如下图

项目地址: 点我直达

                                                                 点击图片播放动画

以下为常用的插件

  • Alibaba Java Code Guidelines:阿里巴巴出品的代码规范插件,可以帮助程序员规范自己的代码,检测出潜在的问题,改善代码质量
  • CodeGlance:可以在编辑器右侧显示代码的缩略图,方便快速定位和浏览代码
  • RestfulToolkit:一套 RESTful 服务开发辅助工具集,可以根据 URL 跳转到对应的方法定义,提供一个服务树的显示窗口,以及一个简单的 HTTP 请求工具
  • Easy Code:可以根据数据库表或者 Java 类生成 CRUD 代码,支持多种模板和框架
  • GsonFormat:可以根据 JSON 数据生成 Java 类,支持多种注解和命名规则
  • Statistic:可以统计项目的代码总行数,分别显示各个类型文件的总行数
  • Rainbow Brackets:可以给配对的括号显示相同的颜色,并且实现选中区域代码高亮的功能
  • Translation:一个翻译插件,支持谷歌、有道、百度三种翻译,还有一个变量命名的功能
  • Lombok:一个简化 Java 代码的插件,可以通过注解来生成 getter、setter、toString、equals 和 hashCode 等方法
  • Maven Helper:一个分析 Maven 依赖冲突的插件,可以显示依赖树,查找和处理依赖冲突
  • GenerateAllSetter:一个效率插件,可以对变量类生成对类的所有 setter 方法的调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NGFW的protal认证实验

实验topo 用到工具&#xff1a;ensp&#xff0c;kali&#xff0c;cloud云的网段是192.168.43.0&#xff1b;连接cloud的g0/0/0地址就是你登录web&#xff0c;protal的地址 实验说明&#xff1a;建议不在真机上面配置直接用&#xff0c;因为真机不稳定。这里用kali当真机&#x…

【网络应用开发】实验5—— JDBC数据库访问与DAO设计模式

目录 JDBC数据库访问与DAO设计模式预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. JDBC常用的类对象与接口有哪些&#xff1f;它们的功能如何&#xff1f; 2.使用数据源访问数据库的基本思想是什么&#xff1f;这样做有什么好处&#xff1f; 3.什么是DAO&am…

vscode使用虚拟环境

我的conda没有添加入path&#xff0c;每次打开总是报错 一、选择对应虚拟环境的解释器 1.点击vscode的右下角这里 2.点击后可能会在vscode上方出现下图样子&#xff0c;如果出现下图&#xff0c;则点击第二项Select at workspace level&#xff0c; 3.接着出现下图样式&#…

2022年营收破百亿,零跑汽车展现超强实力

此前&#xff0c;零跑已正式公布了2022年的财务数据。可以看到&#xff0c;零跑去年的营收破百亿&#xff0c;增速将近300%&#xff0c;这一成绩在汽车界是相当优越的。说到为何零跑能够实现如此快速的成长&#xff0c;那就不得不提其全域自研的核心优势。 如今&#xff0c;无论…

有始有终的编码原则

基本情况 在程序员的修炼之道之中&#xff0c;说到&#xff1a; 这个建议能简单地应用到大多数场合。简单说就是&#xff0c;分配资源的函 数或对象&#xff0c;对释放资源应负有责任。 这其实就是我们常说的谁分配的就谁负责释放&#xff0c;这也是内存释放的一个原则&#x…

微搭低代码实现投票功能

经常有一类需求&#xff0c;就是投票的功能&#xff0c;需要限制每一个选项每个人只可以投一票&#xff0c;投完之后需要统计票数。本篇教程我们讲解一下如何利用微搭低代码工具来实现投票功能。 1 设计数据源 我们需要设计一个数据源来记录用户的投票&#xff0c;如何限制用…

Docker网络模式详解

文章目录 一、docker网络概述1、docker网络实现的原理1.1 随机映射端口( 从32768开始)1.2 指定映射端口1.3 浏览器访问测试 二、 docker的网络模式1、默认网络2、使用docker run 创建Docker容器时&#xff0c;可以用--net或--network 选项指定容器的网络模式 三、docker网络模式…

代码审计实战3-android java

jks java keystore 作用&#xff1a;保证应用的唯一性 简介&#xff1a;可以理解为java的密钥库&#xff0c;是一个用来存放密钥和证书的仓库。 &#xff08;而keytool就是密钥和证书的管理工具&#xff0c;它把key&#xff08;密钥&#xff09;和certificate&#xff08;证…

一零五六、Jsp+mysql 实现学生选课系统(附源码及数据库)

目录 实现效果 项目代码 数据库 结语 实现效果 login.jsp index.jsp course_query.jsp course_selection.jsp course_withdraw.jsp selection_query.jsp 项目代码 checkSelectionStatus.jsp % page contentType"text/html;charsetUTF-8" language"java&q…

图像处理:均值滤波算法

目录 前言 概念介绍 基本原理 Opencv实现中值滤波 Python手写实现均值滤波 参考文章 前言 在此之前&#xff0c;我曾在此篇中推导过图像处理&#xff1a;推导五种滤波算法&#xff08;均值、中值、高斯、双边、引导&#xff09;。这在此基础上&#xff0c;我想更深入地研…

4月23号软件更新资讯合集.....

微软发布 Web 渲染引擎 Babylon.js 6.0 Babylon.js 是一个强大、简单、开放的游戏和 Web 渲染引擎&#xff0c;并被封装在一个友好的 JavaScript 框架中。 Babylon.js 6.0 带来了性能改进、渲染增强和一系列新功能。 新物理插件 Havok 团队通过一个特殊的新 WASM 插件和对 Ba…

sar基本命令格式操作及使用方法学习笔记

目录 SAR说明Centos7安装Sar命令sar命令显示时间改为24小时制查询某天某个时间段内的数据 SAR说明 sar是一个采集&#xff0c;报告和存储计算机负载信息的工具。自下载安装好后每10分钟对系统性能进行一次采集&#xff0c;每天的日志文件保存再/var/log/sa/下&#xff0c;sa17…

Docker 部署Redis

由于项目需要&#xff0c;上了redis。公司用的是OKD4.x&#xff0c;所以在自己的环境上也直接上docker&#xff0c;比下载、编译、安装省心多了。 1、下载镜像 官网地址&#xff1a;https://hub.docker.com/_/redis 我选择的是docker pull redis:7.0-bullseye 具体版本号的含…

Web3D包装生产线 HTML5+Threejs(webgl)开发

生产线三维可视化解决方案就是通过物联网、虚实联动和三维建模等先进技术&#xff0c;以一个3D立体模型展现出来&#xff0c;可以让我们很直观的看到生产线的运作以及对数据的监控。3D运用数据孪生技术可以让工业3D物联网管理系统的界面变得非常的简单易看&#xff0c;并且能够…

软件测试的新技术和方法

作为一位资深的IT领域博主&#xff0c;我一直在关注软件测试领域的发展趋势。随着技术的不断发展&#xff0c;软件测试领域也在不断更新换代。在本文中&#xff0c;我将分享一些最新的软件测试技术和方法&#xff0c;希望能对广大软件测试工程师提供一些参考。 一、自动化测试…

【教程】保姆级红米AX6000刷UBoot和OpenWrt固件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 开启SSH 刷入UBoot 刷入Openwrt 设置Openwrt 刷回小米原厂固件 开启SSH 1、下载官方指定版本固件&#xff1a;https://share.qust.me/redmi-ax6000-1.2.8.bin 2、进入路由器后台升级固件&#xff1a;h…

Nginx +Tomcat 负载均衡,动静分离集群

介绍 通常情况下&#xff0c;一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等情况&#xff0c;不能单独应用于生产环境下&#xff0c;所以我们需要一套更可靠的解决方案 Nginx 是一款非常优秀的http服务软件&#xff0c;它能够支持高达 50000 个并发…

IndexedDB的包装器JsStore - 分页功能

JsStore是IndexedDB的包装器。它提供了简单的SQL像api&#xff0c;这是容易学习和使用。IndexedDb查询可以在web worker内部执行&#xff0c;JsStore通过提供一个单独的worker文件来保持这种功能。 由于之前使用IndexedDB时&#xff0c;提供api不太丰富&#xff0c;就自己写了一…

Ubuntu2204安装pycharm社区版

最近在学习人工智能相关的知识&#xff0c;比较流行的开源框架对windows操作系统的支持并不太友好&#xff0c;因此把学习测试的环境搭在了Ubuntu2204上。一开始我都是在win10系统中的pycharm上写python代码&#xff0c;然后再上传到Ubuntu2204中运行测试&#xff0c;这么做降低…

GIS基础概念与开发实践

GIS的应用价值 呈现、还原、规划空间信息数据挖掘、统计分析等等 Q&#xff1a;这么多软件可以做GIS&#xff0c;但是格式又不一样&#xff0c;怎么办&#xff1f;这普需要一个标准的出现。 GIS标准&#xff1a;OGC标准 不同GIS软件对空间数据定义和存储结构不同&#xff0…