首页 文章 精选 留言 我的

精选列表

搜索[管理工具],共4325篇文章
优秀的个人博客,低调大师

zyplayer-doc 1.0.7 发布,简单好用的 WIKI 文档工具、数据库管理工具

zyplayer-doc是一款定位为公司内部和个人使用的在线工具,现有数据库文档、WIKI文档、swagger 文档、dubbo文档、ElasticSearch文档等,管理端具有人员管理、权限管理功能等功能。项目后端使用spring-boot、mybatis-plus等框架,前端使用Vue、element-ui、zui等框架。 Added 1、WIKI文档工具增加历史版本功能,原创使用git方式管理wiki历史版本和查看,并且支持push到远程仓库 2、WIKI文档工具修改Markdown格式的历史版本显示问题,Markdown查看的样式修改,修改评论布局方式 3、WIKI文档工具markdown粘贴图片使用文件方式上传保存 #I1XRJM 4、WIKI文档工具文档展示样式处理 #I1XRJM 5、WIKI文档工具编辑框高度自适应 #I262OZ 6、WIKI文档工具附件展示大小,用户名展示,文章图片支持点击预览查看 7、dubbo文档前端框架升级,网络请求框架修改,使用vue-cli方式打包 8、dubbo文档读取类信息使用上传的jar,解决发布重启才能看到新接口问题 9、文档控制台前端框架升级,网络请求框架修改,使用vue-cli方式打包 10、控制台只展示有权限的菜单,系统登录页面优化,数据源创建优化 11、数据库文档导出增加表信息列表导出,导出新窗口使用post方式提交 本次升级对库表有修改,从上一版本升级需执行:zyplayer_doc_manage.1.0.7.sql变更的内容 项目开源地址:https://gitee.com/zyplayer/zyplayer-doc 在线体验地址:http://doc.zyplayer.com 账号:zyplayer 密码:123456 本次升级着重优化了项目框架层和WIKI文档工具,同时对前端框架进行了重构,代码更加现代化和规范化。欢迎使用,多提建议和需求。 wiki文档展示 dubbo文档展示 数据库文档展示

优秀的个人博客,低调大师

zyplayer-doc 1.0.6 发布,简单好用的 WIKI 文档工具、数据库管理工具

zyplayer-doc是一款定位为公司内部和个人使用的在线工具,现有数据库文档、WIKI文档、swagger 文档、dubbo文档、ElasticSearch文档等,管理端具有人员管理、权限管理功能等功能。项目后端使用spring-boot、mybatis-plus等框架,前端使用Vue、element-ui、zui等框架。 Added 1、数据库工具增加数据源时支持测试数据源,优化展示细节,特殊情况下页面卡死等问题 2、数据库工具改为使用vue-cli打包,修改所有的请求方式,代码更加规范化 3、数据库文档增加Word导出支持 #I1QU0R 4、WIKI文档工具前端重构,代码更加规范化,优化查看编辑页展示及URL参数,无权限时不展示对应操作按钮 5、WIKI文档工具增加删除评论功能 #I1KMTP 6、WIKI文档工具开放地址首页展示优化 #I1KQUK 7、WIKI文档工具重构开放文档页面,集成到同一项目内 8、WIKI文档工具增加Markdown格式编辑方式和查看,增加快速打开开放文档地址 9、WIKI文档工具增加消息提醒功能,增强文档互动的感知 本次升级对库表有修改,从上一版本升级需执行:zyplayer_doc_manage.1.0.6.sql变更的内容 项目开源地址:https://gitee.com/zyplayer/zyplayer-doc 在线体验地址:http://doc.zyplayer.com 账号:zyplayer 密码:123456 本次升级着重优化了数据库工具和WIKI文档工具,同时对前端框架进行了重构,代码更加现代化和规范化。欢迎使用,多提建议和需求。 文档导出增加Word格式 WIKI增加消息提醒 增加Markdown格式编辑器 优化WIKI文档展示

优秀的个人博客,低调大师

项目管理工具x「多人协作文档」,这才是你想要的项目协作工具!

一个文档能“披阅十载,增删五次”,却搞不清终稿到底是哪版; 团队协同写文档,版本互相覆盖,改了三天回到解放前; 想要多人协作,第一步要先上云,又怕信息泄漏承担风险…… 这些无时无刻不在降低我们协作效率的问题,正在不断吞噬企业的竞争力。当“文件传输靠微信、版本混乱靠手动”成为日常,传统的文档工具早已成为团队效能的绊脚石。 是时候打破这些困境了!禅道项目管理软件的「多人协作文档」,重新定义企业级协作效率! 现在点击试用【协作文档】,开启高效协作! 一、从“工具替代”到“效能革命”:重新定义团队生产力 1.实时保存+零冲突编辑:灵感不掉线 辛苦码了2000字的方案,突然遭遇断网,重启电脑后,文档回到了最初状态。又或者是,团队成员同时修改同一文档,互相保存覆盖版本,最终谁也说不清哪个才是正确内容。 禅道「多人协作文档」支持实时保存功能,每一次输入、修改都能即时存储。同时,零冲突编辑支持多人在同一文档中同时编辑,不同成员的修改会智能合并,不会出现版本覆盖的尴尬,让协作过程流畅无阻。 2.光标跟随+实名标注:拒绝不必要的协作 传统文档协作中,“谁改了哪部分”“当前进度到哪一步”往往需要反复@成员确认,这类沟通损耗占团队协作时间的30%以上。尤其是在远程办公场景下,信息不透明导致的协作障碍更加明显,工作效率大幅降低。 基于此,禅道「多人协作文档」启用光标跟随,实时观察其他成员的编辑位置和操作,对工作进展一目了然;实名标注清晰显示“谁”正在修改“什么”,无需多余沟通,即可快速了解文档的变动情况。 3.权限分级+数据防护:筑牢协作安全边界 基于私有部署的禅道实现文档协作,从根源上规避了因数据“上云”可能引发的数据泄露风险。这种部署方式让企业得以完全掌控数据主权,确保核心信息安全无虞。 在文档管理方面,禅道实施“读写权限分离”策略。通过配置“只读”和“可编辑”权限,精准限制不同人员对文档的操作范围,为企业协作划定清晰安全边界,在保障团队高效协同的同时,切实守护企业数据资产安全。 二、不止于文档编辑,更懂项目管理 或许有人会问:“那么多文档都能多人编辑,禅道的优势在哪?”答案在于深度集成与场景适配。 禅道「多人协作文档」不仅仅是文档编辑工具,更是与项目管理深度融合的高效协作平台。 文档支持直接插入禅道中的已有数据: 在撰写产品计划时,可一键嵌入需求管理模块中的“XXX版本需求池”; 测试阶段编辑测试相关文档时,可插入“Bug列表”直接同步缺陷状态等等; 做问题复盘时,可直接插入某一任务或Bug,实现相关数据信息的及时同步…… 目前,禅道「多人协作文档」支持插入的数据类型丰富多样,涵盖研发需求列表、任务列表、用例列表、Bug列表等10+类项目数据组件,充分满足不同项目、不同阶段的协作需求。 禅道多人协作文档不仅解决了“文件保存慢、修改冲突多、权限管理乱”的效率问题,更能通过深度集成让文档不再是孤立的信息载体,转而成为推动业务增长的效能引擎。 管理学大师彼得・德鲁克曾说:“效率是正确地做事,效能是做正确的事。” 当别人的团队还在为协作焦头烂额时,我们早已将时间投入到真正创造价值的事情上。 越来越多的团队正在用禅道构建“实时、透明、安全”的协作新范式。 现在点击试用【协作文档】,开启高效协作!

优秀的个人博客,低调大师

每日一博 | 代码质量管理工具:SonarQube 常见的问题及正确解决方案

SonarQube 简介 Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。 与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。 在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持 Math operands should be cast before assignment-数字操作在操作或赋值前要分配 对整数执行算术运算时,结果将始终是整数。您可以通过自动类型转换将该结果分配给long,double或float类型,但是以int或long形式开始时,结果可能不会达到您的期望。 例如,如果将int除法的结果分配给浮点变量,则在分配之前将失去精度。同样,如果将乘法结果分配给long,则在分配之前它可能已经溢出。 不合规代码 float twoThirds = 2/3; // Noncompliant; int division. Yields 0.0 long millisInYear = 1_000*3_600*24*365; // Noncompliant; int multiplication. Yields 1471228928 long bigNum = Integer.MAX_VALUE + 2; // Noncompliant. Yields -2147483647 long bigNegNum = Integer.MIN_VALUE-1; //Noncompliant, gives a positive result instead of a negative one. Date myDate = new Date(seconds * 1_000); //Noncompliant, won't produce the expected result if seconds > 2_147_483 ... public long compute(int factor){ return factor * 10_000; //Noncompliant, won't produce the expected result if factor > 214_748 } public float compute2(long factor){ return factor / 123; //Noncompliant, will be rounded to closest long integer } 合规代码 float twoThirds = 2f/3; // 2 promoted to float. Yields 0.6666667 long millisInYear = 1_000L*3_600*24*365; // 1000 promoted to long. Yields 31_536_000_000 long bigNum = Integer.MAX_VALUE + 2L; // 2 promoted to long. Yields 2_147_483_649 long bigNegNum = Integer.MIN_VALUE-1L; // Yields -2_147_483_649 Date myDate = new Date(seconds * 1_000L); ... public long compute(int factor){ return factor * 10_000L; } public float compute2(long factor){ return factor / 123f; } 或者是 float twoThirds = (float)2/3; // 2 cast to float long millisInYear = (long)1_000*3_600*24*365; // 1_000 cast to long long bigNum = (long)Integer.MAX_VALUE + 2; long bigNegNum = (long)Integer.MIN_VALUE-1; Date myDate = new Date((long)seconds * 1_000); ... public long compute(long factor){ return factor * 10_000; } public float compute2(float factor){ return factor / 123; } 分析 本项sonar 规则,主要是Java 中 小类型可以向大的类型转换,如int 可以自动向long 转换。避免这种自动转换引发的问题,就是本规则的初衷。 让开发者可以明确的清楚当前数据的类型。 Strings and Boxed types should be compared using "equals()" 字符串和包装类型对比时应该使用equals方法。 使用引用相等==或!=比较java.lang.String或包装类型(如java.lang.Integer)的两个实例几乎总是false,因为它不是在比较实际值,而是在内存中的位置。 不合格的代码 String firstName = getFirstName(); // String overrides equals String lastName = getLastName(); if (firstName == lastName) { ... }; // Non-compliant; false even if the strings have the same value 合规的代码 String firstName = getFirstName(); String lastName = getLastName(); if (firstName != null && firstName.equals(lastName)) { ... }; 分析 在Java 中包装类型与基本数据类型存储位置不同。 Java 基本数据类型存放位置 方法参数、局部变量存放在栈内存中的栈桢中的局部变量表 常量存放在常量池中 包装类型如Integer存放位置 常量池 堆内存 Integer 存储在常量池中时可以使用==对比,但当在堆内存中时,使用==对比,实际对比的是两个内存地址而非值。 根据Integer源码, 可以看出数值在-128-127时,会使用cache中的数据,其实也就是常量池。超过范围后新创建Integer,此时数据就无法使用==。 本项规则,主要就是为了避免对比内存地址而引发的错误判断。 Boxing and unboxing should not be immediately reversed 装箱(创建int/Integer类型值的对象)和拆箱(将对象中原始值解出来)不应连续操作。 由于在装箱和拆箱期间原始值保持不变,因此在不需要时进行任何操作都是没有意义的。这也适用于自动装箱和自动拆箱(当Java为您隐式处理原始/对象转换时)。 不合规代码 public void examineInt(int a) { //... } public void examineInteger(Integer a) { // ... } public void func() { int i = 0; Integer iger1 = Integer.valueOf(0); double d = 1.0; int dIntValue = new Double(d).intValue(); // Noncompliant examineInt(new Integer(i).intValue()); // Noncompliant; explicit box/unbox examineInt(Integer.valueOf(i)); // Noncompliant; boxed int will be auto-unboxed examineInteger(i); // Compliant; value is boxed but not then unboxed examineInteger(iger1.intValue()); // Noncompliant; unboxed int will be autoboxed Integer iger2 = new Integer(iger1); // Noncompliant; unnecessary unboxing, value can be reused } 合规代码 public void examineInt(int a) { //... } public void examineInteger(Integer a) { // ... } public void func() { int i = 0; Integer iger1 = Integer.valueOf(0); double d = 1.0; int dIntValue = (int) d; examineInt(i); examineInteger(i); examineInteger(iger1); } 分析 拆箱,与装箱数值没有发生变化,但在大数据量前提下是极其浪费时间。以下实例中,两者耗时相差10倍。此项目检查主要是提高性能。 Intermediate Stream methods should not be left unused 中间流方法不应该闲置,应该提供对应的终端操作(流操作有两种类型:中间操作(返回另一个流)和终端操作(返回比流更多的内容)。中间操作是惰性的,如果中间流操作的结果没有提供给终端操作,那么它就没有任何作用) 不合规 widgets.stream().filter(b -> b.getColor() == RED); // Noncompliant 合规 int sum = widgets.stream() .filter(b -> b.getColor() == RED) .mapToInt(b -> b.getWeight()) .sum(); Stream<Widget> pipeline = widgets.stream() .filter(b -> b.getColor() == GREEN) .mapToInt(b -> b.getWeight()); sum = pipeline.sum(); Loops with at most one iteration should be refactored 循环执行一次应该重构。 不合规 for (int i = 0; i < 10; i++) { // noncompliant, loop only executes once printf("i is %d", i); break; } ... for (int i = 0; i < 10; i++) { // noncompliant, loop only executes once if(i == x) { break; } else { printf("i is %d", i); return; } } 不合规 for (int i = 0; i < 10; i++) { printf("i is %d", i); } ... for (int i = 0; i < 10; i++) { if(i == x) { break; } else { printf("i is %d", i); } } Non-thread-safe fields should not be static 非线程安全的属性不能设置为静态 不合规 public class MyClass { private static SimpleDateFormat format = new SimpleDateFormat("HH-mm-ss"); // Noncompliant private static Calendar calendar = Calendar.getInstance(); // Noncompliant 合规 public class MyClass { private SimpleDateFormat format = new SimpleDateFormat("HH-mm-ss"); private Calendar calendar = Calendar.getInstance(); 分析 线程不安全的类型设置为静态后,对于静态变量来说,类在加载的时候会占用同一个存储区,而每个线程都是公用这个存储区的,因此存在线程安全的问题。 在多并发的过程中容易产生问题,而且问题原因不易跟踪。 "InterruptedException" should not be ignored 绝不应该在代码中忽略InterruptedExceptions,在这种情况下,只需将异常计数记录为“忽略”即可。抛出InterruptedException会清除Thread的中断状态,因此,如果未正确处理该异常,则该线程被中断的事实将丢失。相反,应该立即或在清除方法状态后重新抛出InterruptedExceptions-或应该通过调用Thread.interrupt()重新中断线程,即使这应该是单线程应用程序也是如此。任何其他措施可能会导致线程关闭延迟,并丢失该线程被中断的信息-可能未完成其任务。 合规代码 InterruptedExceptions should never be ignored in the code, and simply logging the exception counts in this case as "ignoring". The throwing of the InterruptedException clears the interrupted state of the Thread, so if the exception is not handled properly the fact that the thread was interrupted will be lost. Instead, InterruptedExceptions should either be rethrown - immediately or after cleaning up the method's state - or the thread should be re-interrupted by calling Thread.interrupt() even if this is supposed to be a single-threaded application. Any other course of action risks delaying thread shutdown and loses the information that the thread was interrupted - probably without finishing its task. public void run () { try { while (true) { // do stuff } }catch (InterruptedException e) { // Noncompliant; logging is not enough LOGGER.log(Level.WARN, "Interrupted!", e); } } 不合规 public void run () { try { while (true) { // do stuff } }catch (InterruptedException e) { LOGGER.log(Level.WARN, "Interrupted!", e); // Restore interrupted state... Thread.currentThread().interrupt(); } } 总结 sonarqube 进行代码质量检查,不仅可以分析当前代码已存在问题。也可以通过问题进行分析,把错误的代码习惯,改正。 长期使用sonarqube,可以培养开发者写优秀代码。降低bug率。

优秀的个人博客,低调大师

2026年多线攻坚的心流屏障:用多维度事项管理工具实现无损折叠

在多项目并行、跨业务交叉或软硬件复杂攻坚的现代工作场景中,许多团队和个人经常遭遇同一种“信息失真与管理僵化”困境:将所有的待办、需求和 Bug 塞进单一的列表或表格里,看似记录全面,但一旦需要从时间排期、责任分工、优先级或项目归属等不同视角审查进度时,界面就变成了难以理解的“数字密文”。管理者看不懂全局节奏,执行者找不到细节依据,团队不得不陷入无休止的开会拉群和手工搬运数据中。

优秀的个人博客,低调大师

2026年多线攻坚的心流屏障:用视图化任务管理工具实现按需降噪

在海量信息交织与多项目并发的现代工作节奏中,许多开发者、科研团队和项目负责人经常掉入同一种“维度匮乏陷阱”:习惯于将所有的任务、需求和 Bug 塞进同一个死板的一维表格或单向清单里。随着项目推进,不仅很难从中理出关键优先级,管理者看不懂进度排期,执行者找不到核心细节,非技术协同人员更是像看“无字天区”一样门槛极高,最终陷入漫长的拉群沟通与效率内耗。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册