开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

Git 提交时提示 GPG 签名错误

本来应该一切都是正常的,但今天提交的时候提示 GPG 签名错误。 错误的信息就是 GPG 签名失败。 gpg: skipped "942395299055675C": No secret key gpg: signing failed: No secret key error: gpg failed to sign the data fatal: failed to write commit object     解决方案 开始认为是因为签名错误,后来发现签名的秘钥都是正确的。 最后确定为 git 的配置文件中,没有指定签名使用的程序。 [gpg] program = "C:/Program Files (x86)/GnuPG/bin/gpg.exe" 在签名的时候,上面 3 个部分的内容必须是同时存在,并且不能缺少的。   https://www.isharkfly.com/t/git-gpg/15083

2023年10月29日 0Comments 637Browse 0Like Read more
Computer Science

YouTrack 中如何设置邮件通知

在 YouTrack 中,默认是不会邮件通知的。 你可以为你的账号设置邮件通知。 设置的方法为单击用户属性,然后在弹出的小窗口中选择属性选项。 设置邮件通知 在通知 Tab 页面中,选择发送邮件的方式,默认这个选项是不选择的。 用户可以为自己选择发送邮件的方式。 我们这里选择的是 HTML。 下面就是一些可能触发邮件发送的条件,根据自己的要求进行修改就可以了。     这样就完成了在 YouTrack 中的邮件通知设置了。   https://www.isharkfly.com/t/youtrack/15075

2023年10月27日 0Comments 686Browse 0Like Read more
Computer Science

Java 中的 Default 关键字

default 关键字:是在 Java 8 中引入的新概念,也可称为 Virtual extension methods——虚拟扩展方法与public、private等都属于修饰符关键字,与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。 default 修饰方法时只能在接口类中使用,在接口中被 default 标记的方法可以直接写方法体,而无需修改所有实现了此接口的类。 接口默认方法 我们都知道 Java 中的接口是用来实现的,接口中是没有实现的方法。 使用 default 关键字可以打破这个限制,当定义了一个接口,但是我们接口中的方法用了 default 关键字,我们就可以在这个方法中进行实现了。 这时,我们不需要再定义一个实现类类实现接口中的所有方法。 之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改该接口的全部实现类。 同时因为设计实现的问题,我们通过设计接口来进行不同的实现,在基础框架曾经,这个设计是有很多好处的。 但,在实际业务层,一个接口多个实现的方法反而谁增加很多复杂度。 使用 Default 关键字 用 default 关键字定义的方法是全局的,你可以在不同接口中定义一个相同的方法,这个没有问题。 如下图,我们在代码中定义了 2 个接口,这 2 个接口都有一个相同的 default 方法。     实现类中只实现一个接口 如果在实现类中我们只实现一个接口。 例如下图,我们修改了我们的方法,我们在实现中只实现了 TestInterface1     上面的程序也是可以运行的没有问题。 实现类中实现 2 个接口 问题就是在这里了。 如果我们在实现类中同时实现了 2 个接口,但这 2 个接口都有一个相同方法名的 default 方法。     编译器会在这里报错,简单来说就是默认的方法冲突,程序不知道应该用哪个实现方法。 这个应该很好理解,因为这 2 个接口中都有相同的方法名,而且这个方面都是默认的,程序运行的时候确实不知道应该是用 TestInterface1 还是 TestInterface2 的默认方法。 所以可以在这里用一个 @Override 来告诉实现类,我们是用的那个实现方法。 甚至 @Override public void show() { TestInterface1.super.show(); TestInterface2.super.show(); } 这样写都是没有问题的。 运行的结果为: Default TestInterface - 1 Default TestInterface - 2 总结 Default 方法通常用在接口中,用于为接口中定义的方法提供一个默认的实现。 当我们使用了 default 关键字修饰了方法后,我们可以不为接口定义实现,而直接使用接口中定义的默认方法来处理逻辑。     我们测试的代码网站逻辑如上图。 下面为文本的代码,供大家拷贝和在本地进行的是 interface TestInterface1 { // default method default void show() { System.out.println("Default TestInterface - 1 "); } } interface TestInterface2 { // Default method default void show() { System.out.println("Default TestInterface - 2"); } } public class Main implements TestInterface1, TestInterface2 { private static final Logger logger = LoggerFactory.getLogger(Main.class); public static void main(String[] args) { new Main().show(); } @Override public void show() { TestInterface1.super.show(); TestInterface2.super.show(); } } 因为 default 这个关键字还比较新,在 JDK 8 以后才有的,因此有必要在面试之前了解下,在实际的项目上,可能用的情况不多。 https://www.isharkfly.com/t/java-default/15061

2023年10月22日 0Comments 807Browse 0Like Read more
Computer Science

多年没有遇到如此流畅的面试了

美东一公司的面试,有多年没有遇到如此流畅的面试了。 本来说的面试时间是 30 分钟,这个还是第一轮处于电话面试那种,但是不知道为什么最后面试整个时间都延长到了快一个小时,貌似双方都还继续沟通下,有点意犹未尽的感觉。 互相了解 通常第一轮面试的过程都是互相了解。 这个公司本身有自己的生产线,同时还有完善的在线销售系统。如果你问我公司大不大的话,可以这样说吧,公司很大,几乎和耐克级别的企业。 当然肯定比耐克还是小点。 在这个互相了解过程中,主要对公司要求的是什么,公司为什么需要这个职位等等。同时还希望我介绍下项目,和在项目中使用了那些技术,有那些问题。 这个和普通面试都差不多,还是那句话,只要你做过项目,基本上都会说,只是在说的时候需要根据公司的要求进行一些调整罢了。 你总不能别人在说系统,你盯着数据库一直在说,这也不合适吧。 技术问题 技术上面的问题进行了简单的沟通,主要是对 Core Java 的内容进行一些了解。 我个人感觉内容还是比较基本,但是问的东西都属于常用的,不是很多人以上来就 OA 各种奇葩算法那种。 也许是这样,才让人感觉非常好,感觉这个才是面试应该有的样子嘛。 问的问题大致包括有: 能说一下 hashmap 和 hashtable 吗 Default 关键字 Overload 和 Override Spring 框架和 Spring Boot 的关系 DI 是什么 IoC 是怎么回事 还有些其他的问题,可能记不太清楚了,问的问题还是有点多的,其他的就非常基本了。正常只要用过 Java 的基本上都能得上来。 之所以列出上面这个几个问题,是因为这几个问题还是有那么一丢丢深度。 对于这些问题,感觉都是概念上的,通常可以聊很久,除了 default 关键字不太熟悉之外,其他的内容,只要你理解了,还是比较好沟通的。 唯一的可能当一下子问到 HashTable 上的时候你可能有点懵,这是因为 HashTable 是比较老的版本,可能在实际使用的时候大部分人用的都是 HashMap。关键点,HashMap 比 HashTable 快,这个总知道吧,因为一个是线程同步的,一个不是。 觉得在找工作的时候,还是需要对 Java 的一些常用概念了解下的。 对不熟悉的 default 关键字,我的回答就是,我知道 Default 关键字是在 Java 8 中开始使用的,但我们项目用得并不很多,所以不是非常熟悉。 后来搜了下才知道,Default 关键字主要使用在接口中,用于接口方法的默认实现的。 因现在项目用接口的情况不多,所以一下子没有涉及到还是很正常的。 每次面试后对不知道的东西补习下,记录下就好。 总结 面试的整体流程非常不错,感觉也非常好。 虽然没有把所有的问题都答得非常准确,但是感觉还是不错的。 结果就是在面试还没有最后挂断的时候,对方就说我通知组里面的同时下周安排下技术方面的面试,时间是 1 个小时,他直接问我那周有空。 因为下周有不少其他安排,所以就周二和周四吧。 本来他是希望安排在周一的。 面试双方在面试的过程中都保持了非常好的透明和了解,这是感觉非常好的地方,对方也非常公开的介绍了很多信息。 这才是面试应该有的样子,双方应该都互相了解,通过一个比较短的时间,了解公司,了解应聘人的行为和表达能力。 当面试一上来就先做题的时候就已经跑偏了,再加上这些年连厨师都想要当码农的时候,就更加疯狂了。 希望更多一些理智,少点疯狂。   https://www.isharkfly.com/t/topic/15060

2023年10月21日 0Comments 870Browse 0Like Read more
Computer Science

Discourse 的用户快速找到管理员账号

在 Discourse 的社区中可能有多个用户账号为管理员或者有特殊权限的账号。 这个账号在 Discourse 的用户,然后 Staff 中可以快速找到。 作为管理员,有时候需要检查下你的 Discourse 是不是没有进行管理,有多长时间没有登录了。     这个选项能够让你对 Discourse 的用户管理员进行一些快速的过滤,删除一些可能涉及到权限泄露的问题。   https://www.isharkfly.com/t/discourse/15059

2023年10月21日 0Comments 628Browse 0Like Read more
Computer Science

来看看 Discourse 3.2.0.beta2 版本添加的新功能

3.2.0.beta2 版本是在 2023-10-16 发布的,根据官方的说法,主要添加了 3 个新功能。 官方的发布日志页面:3.2.0.beta2: Auto delete unused tags, custom date range for reports, new chat notifications, and more - announcements - Discourse Meta 自动删除标签功能 Discourse 会对没有使用的标签进行自动删除。 检查的频率是每天一次,删除的标准是如果标签没有被任何主题或者帖子使用的话。 配置的参数为: automatically clean     可以在配置界面中搜索上面的配置参数,然后进行配置。 自定义报表时间 可以在报表的时间上对时间进行自定义。   2484×300 27.9 KB 感觉对一般的网站来说,通常也不会每天去查看一下报表,只要不是特别情况,一般查看时间区间通常都是 7 天,1 个月这样子的。   数据太少,报表看不出东西,不过也感觉是锦上添花,有了也不是坏事。 添加 Revise 功能 意思就是你可以通知用户对帖子进行修改,这个是用过 PM(用户消息发送的)。 当用户接收到上面的消息的时候,并不意味着他们被审核的帖子就自动完成了。 管理员还需要对发布的内容再次通过才可以的。 感觉这个功能可能不会经常使用,很多社区对帖子的审核是非常宽松的,只要不是毫无意义的内容,这个审核功能通常没有使用。   https://www.isharkfly.com/t/discourse-3-2-0-beta2/15058

2023年10月20日 0Comments 467Browse 0Like Read more
Computer Science

Youtrack Linux 安装

我们考虑最后应该使用的是 ZIP 方式的安装。 按照官方的说法如何设置运行 YouTrack 应该是非常简单的。 准备环境 根据官方的说法,我们需要做的就是下载 Zip 包,然后把 Zip 包解压到指定的目录中就可以了。 下载     当前官方的下载地址为:Get YouTrack: Issue Tracking and Project Management Tool 1     直接打开上面的链接,你的计算机将会尝试下载,这个时候可以拷贝下载链接,然后到服务器上用 wget 来进行下载。 wget https://download-cdn.jetbrains.com/charisma/youtrack-2023.2.19783.zip 下载的文件大小可能会有几百兆,需要的时间可能不一样。     解压 如果你的操作系统环境下没有装 unzip 的话,你需要运行下面的命令来安装一个 unzip。 dnf install unzip 随后,直接运行 unzip youtrack-2023.2.19783.zip 来进行解压。     创建文件夹 为了统一和方便,我们可以把解压后的文件夹移动到 /opt 下的 youtrack 文件夹。 运行的命令为: mv youtrack-2023.2.19783 /opt 确定所有需要的文件都在 /opt/youtrack 文件夹下。 启动运行 进入 /opt/youtrack/bin 目录后 直接运行 ./youtrack.sh run 就可以运行了。 需要注意的是,如果使用上面的命令来运行的话,你的 SSH 界面就会被占用。 如果你不希望 修改端口 YouTrack 默认使用的是 8080 端口,大概率情况下这个端口可能会被占用。 ./youtrack.sh configure --listen-port 9090 来为你的 YouTrack 设置运行端口为 9090,你也可以设置任何你自己喜欢的端口。 修改默认域名 修改默认域名的命令为:./youtrack.sh configure --base-url http://track.ossez.com 这里有个坑,默认域名前面需要有协议,如果你没有使用http 或者 https 的话上面的配置无法让你进行修改。 如果一切配置顺利的话,我们就可以通过浏览器看到下面的配置界面了。     然后单击下一步进行配置。   https://www.isharkfly.com/t/youtrack-linux/15051

2023年10月18日 0Comments 512Browse 0Like Read more
Computer Science

JIRA 在 2024 年完全停止服务器版本支持

在服务器上的开源许可证版本已经要过期了,想去更新下。 发现,JIRA 的所有服务器版本的支持马上就要结束了。     这就意味着,如果你部署的服务器版本的 JIRA 的话,你将没有办法对服务器进行更新。     貌似,必须使用 JIRA 提供的云服务版本,这对有数据安全需求,并且希望在本地服务器上部署的公司可不是好消息。 因为不是所有公司都愿意把数据放到云上面。 是时候要找一个替代方案了。   https://www.isharkfly.com/t/jira-2024/15049

2023年10月17日 0Comments 460Browse 0Like Read more
Computer Science

IntelliJ IDEA Maven 项目的依赖分析

在一个 maven 的项目中,我们需要知道我们的项目中使用的包可能有哪些冲突。 这个在 IntelliJ IDEA 中提供了贴心的查看。 选择 Maven 项目中的分析依赖。     随后,IntelliJ IDEA 将会打开一个依赖分析的标签页。 在这个标签页中,我们可以看到我们项目中导入的依赖有哪些冲突,并且这些冲突是怎么冲突的。     如上图中,带有感叹号的就是有冲突的依赖。 这个时候,我们可以选择过滤只看有冲突的包。     同时,我们还可以知道有冲突的包是怎么引入的,是那几个包的引入导致了冲突。 总结 不是所有的冲突都能够被解决的。 通过这个图,我至少能够知道版本之间的冲突是怎么产生的,并且 是哪些包导致了这些冲突。 这对我们后期对项目版本进行规范的时候可以提供更好的参考。   https://www.isharkfly.com/t/intellij-idea-maven/15046

2023年10月12日 0Comments 435Browse 0Like Read more
Computer Science

Java List 中存不同的数据类型

在最近的实践中,有人突然问了一个问题: 在 Java 的 List 中可以存不同的数据类型吗? 这个问题突然给问到了,我们都知道 Java 中的 List 中存的是对象,通常我们定义都会这样的定义: List<String> testList = new ArrayList<>(); 这样我们就知道了 testList 中存的对象都是 String 字符串了。 解答 List 中是可以存不同的数据类型的。 但是在定义的时候需要定义成: List testList = new ArrayList<>();,不能为要使用的 List 指定数据类型。 当为我们使用的 List 不指定数据类型的话,所有存到 List 中的对象都会被转换为 Object 类型。 而当我门再从list 中取出该数据时,就会发现数据类型已经改变。 Objec t类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。 在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。 例如下面的代码: List testList = new ArrayList<>(); testList.add(1L); testList.add("iSharkFly"); testList.add(2); 因为我们没有为我们的 List 指定数据类型,那么这个 List 内是可以放任何数据类型的,你甚至可以放一个对象进去也没有问题的。 上面的代码编译器是不会报错的。 但是在 Get 对象的时候,编译器会明确的告诉你类型不匹配,我们 Get 的是一个 Object 对象,但是你尝试把 Object 对象转换为其他类型,这个时候编译器是不会让你通过的。     这个时候需要进行类型转换才可以。 把上面 Object 对象,强制类型转换下。 Long index0 = (Long) testList.get(0); String index1 = (String) testList.get(1); 强制类型 如果我们在定义 List 的时候,强制定义类型: List<String> testList = new ArrayList<>(); 那么上面的额代码就会出错了。     编译器会告诉你,在这里我们需要的是一个 String 类型,但是你提供的是 Long 或者其他不是 String 类型。 我们在把数据插入到 List 中的时候,需要把类型先转换一下。 使用下面的代码 testList.add(String.valueOf(1L) ); testList.add("iSharkFly"); testList.add(String.valueOf(2)); testList.forEach(e -> log.debug("{}", e)); 就可以完成类型的转换了。 实战 在实际的编码中,我们通常都会为我们的 List 指定数据类型。 这个数据类型可以是任何数据类型或者对象,这样可以保证我们的 List 中存的数据类型只有一种数据类型。 这样在后期的数据遍历和处理过程中,我们就不需要再对数据类型进行转换了,这是一个常规的操作。 简单来说就是:先对数据进行转换,后存储,再使用。 我们会尽量避免在使用的时候对数据进行转换,例如上面的情况,我们 List 对象中存的是对象,我们不知道我们的对象是 Stirng 还是 Long,这个时候要猜。 如在使用的时候进行数据类型转换,就比较容易出现类型转换方面的错误了,所以我们会先定义好。   https://www.isharkfly.com/t/java-list/15040

2023年10月10日 0Comments 489Browse 0Like Read more
12
Archives
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,328)
    • Confluence (663)
    • Gradle (12)
  • U.S. (433)
  • 文化旅游 (142)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1