# 程序语言

**URL:** https://www.isharkfly.com/c/software-development/lang/15.md?page=2

[Latest](https://www.isharkfly.com/latest.md) · [Categories](https://www.isharkfly.com/categories.md) · [Tags](https://www.isharkfly.com/tags.md)

**Page:** 3

---

## [Spring Data 测试时的 Repository 提示为空对象](https://www.isharkfly.com/t/spring-data-repository/14071)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 25, 2022, 5:44pm UTC](https://www.isharkfly.com/t/spring-data-repository/14071 "2022-08-25T17:44:21Z")

</div>

错误信息如下： java.lang.NullPointerException at com.usvisatrack.common.data.tests.jpa.UserRepositoryTest.testInsert(UserRepositoryTest.java:57) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Metho…

---

## [@DataJpaTest 进行测试的坑](https://www.isharkfly.com/t/datajpatest/14070)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 25, 2022, 12:29pm UTC](https://www.isharkfly.com/t/datajpatest/14070 "2022-08-25T12:29:08Z")

</div>

@DataJpaTest 这个注解主要用来在 Spring 项目中测试 JPA 数据源。 默认情况下，带有 @DataJpaTest 注解的测试使用嵌入式内存数据库。 因此 @DataJpaTest 这个注解还是有点坑的。 默认数据库 默认采用的是嵌入的 H2 数据库。 就算你配置了数据库链接，如果你不使用下面的注解的话，@DataJpaTest 还是会使用配置的默认数据库。 使用注解： @AutoConfigureTest…

---

## [Spring Boot 运行的时候提示日志错误](https://www.isharkfly.com/t/spring-boot/14069)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 24, 2022, 9:36pm UTC](https://www.isharkfly.com/t/spring-boot/14069 "2022-08-24T21:36:58Z")

</div>

提示的错误信息为： Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.apache.logging.slf4…

---

## [Spring Boot 进行测试的提示后提示没有配置上下文](https://www.isharkfly.com/t/spring-boot/14068)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 24, 2022, 8:16pm UTC](https://www.isharkfly.com/t/spring-boot/14068 "2022-08-24T20:16:06Z")

</div>

错误的提示信息如下： java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 问题和解决 有关 Spring 项目的 Application 文件要放到项目的最上层…

---

## [Spring 项目启动错误提示 LoggingApplicationListener](https://www.isharkfly.com/t/spring-loggingapplicationlistener/14067)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 24, 2022, 8:11pm UTC](https://www.isharkfly.com/t/spring-loggingapplicationlistener/14067 "2022-08-24T20:11:02Z")

</div>

启动 Spring 项目的时候提示下面的错误信息： Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.context.logging.LoggingApp…

---

## [解决在 Spring Boot 中运行 JUnit 测试遇到的 NoSuchMethodError 错误](https://www.isharkfly.com/t/spring-boot-junit-nosuchmethoderror/14066)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 24, 2022, 6:34pm UTC](https://www.isharkfly.com/t/spring-boot-junit-nosuchmethoderror/14066 "2022-08-24T18:34:56Z")

</div>

在本文章中，我们将会解决在 Spring Boot 运行测试的时候，得到 NoSuchMethodError 和 NoClassDefFoundError 的 JUnit 错误。 这个错误的原因，通常是因为我们的系统中有 2 个不同的 JUnit 版本，在运行的时候 JUnit 不知道使用哪个版本来运行。 同时，也有可能是因为 JUnit 测试运行使用的的版本和框架运行的版本不同而导致的。 错误的界面如下 Spring …

---

## [IntelliJ IDEA 设置 IBM Semeru JDK](https://www.isharkfly.com/t/intellij-idea-ibm-semeru-jdk/14062)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 22, 2022, 5:39am UTC](https://www.isharkfly.com/t/intellij-idea-ibm-semeru-jdk/14062 "2022-08-22T05:39:41Z")

</div>

首先需要确定的是你的系统中已经安装了 JDK 可以输入 java -version 命令进行查看。 然后可以通过项目的配置 JDK 进行查看。 更换 JDK 版本 选择上面的添加 JDK 版本，然后选择 IBM Semeru 在你本地计算机上的安装路径即可。 可以看到添加的版本为 IBM-11 的版本。 …

---

## [IBM Semeru Windows 下的安装](https://www.isharkfly.com/t/ibm-semeru-windows/14061)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 22, 2022, 5:31am UTC](https://www.isharkfly.com/t/ibm-semeru-windows/14061 "2022-08-22T05:31:18Z")

</div>

可以访问：IBM Developer 来下载。 在界面中，选择你需要的版本和操作系统。 semeru 有认证版和非认证版，主要是因为和 OpenJ9 的关系和操作系统的关系而使用不同的许可证罢了，本质代码是一样的。 在 Windows 下没有认证版，直接下开源版就行。 可以下载 msi 包，让安装程序直接进行配置。 运行安装程序 双击安装程序，进行安装。 …

---

## [来聊聊 OpenJDK 和 JVM 虚拟机](https://www.isharkfly.com/t/openjdk-jvm/14058)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 21, 2022, 1:06pm UTC](https://www.isharkfly.com/t/openjdk-jvm/14058 "2022-08-21T13:06:53Z")

</div>

自从 Oracle 收购 Sun 以后，Java 世界也变了不少。 好在 Oracle 还开源了个 OpenJDK，并且很多东西都变了。 OpenJDK 就是一个桶，什么都可以往里面装，各大公司又纷纷退出自己的 JDK，简直直呼看不懂。 OpenJDK 在 Windows 环境下的诟病就是不好装，不知道怎么装。 救民水火的 RedHat RedHat 应该注意到了这个情况，在自己的开发网站中推出了 RedHat OpenJDK …

---

## [什么是 OpenJ9](https://www.isharkfly.com/t/openj9/14057)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 19, 2022, 8:21pm UTC](https://www.isharkfly.com/t/openj9/14057 "2022-08-19T20:21:51Z")

</div>

OpenJ9 简单来说就是 JVM 的其中一个开源版本。 如果你默认安装的是使用 Oracle 的话，那么跑不了会看到一个 HotSpot，这个就是 Oracle 使用的版本。 这个 JVM 版本是从 SUN 系统开始就使用的版本。 Java 在开源的时候因为这个 JVM 版本有些内容是不开源的，所以 JVM 其实并不是开源的，当落入 Oracle 手之后，这个 HotSpot 自然就归了 Oracle。 按照 Oracle 的…

---

## [Java 中使用 public，private 和 protected 修饰的方法](https://www.isharkfly.com/t/java-public-private-protected/14056)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 13, 2022, 7:12pm UTC](https://www.isharkfly.com/t/java-public-private-protected/14056 "2022-08-13T19:12:06Z")

</div>

大部分情况下我们都使用这几个修饰来修饰方法。 当然对类来说，相信大部分都默认使用 Public，大部分人都不去纠结。 Public： 简单来说就是谁都可以访问，你写个类除了特殊要求，当然都是希望大部分人用的。 Private：私有。 除了class自己之外，任何人都不可直接使用。简单来说就是一个方法，你只希望自己的这个类可以用，不希望这个方法在其他类中使用。Private 这个在类中的私有方法中定义比较多。 Protected：…

---

## [Java System.lineSeparator 方法](https://www.isharkfly.com/t/java-system-lineseparator/14052)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 9, 2022, 12:07pm UTC](https://www.isharkfly.com/t/java-system-lineseparator/14052 "2022-08-09T12:07:05Z")

</div>

回车换行问题 在不同操作系统中对回车换行的定义是不一样的。 Windows 的回车换行是 2 个字符，对应的是回车+换行，写法就是我们常用的 \\r\\n Unix 系统下对这个回车换行进行了简化，变成了使用 \\n 来表示。 这里就出现了一个问题，对应不同的操作系统，同样的文本，如果只用 \\n 的话， Windows 系统读的文本没有换行，只有回车。 JDK 1.7 之前 在 JDK 1.7 之前，如果我们要解决这个问题，我们会使…

---

## [Java 是否应该使用通配符导入（ wildcard imports）](https://www.isharkfly.com/t/java-wildcard-imports/14046)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 4, 2022, 12:15am UTC](https://www.isharkfly.com/t/java-wildcard-imports/14046 "2022-08-04T00:15:03Z")

</div>

这个问题应该是所有使用过 Java 第一课的人都会告诉你不要使用通配符导入。 主要问题 主要的问题是它使你的本地命名空间变得混乱。 用最简单的说法就是 Date 这个对象，你可能在 java.sql.Date 和 java.util.Date 都会有这个对象。 如果你使用通配符导入的话，就完全不知道用哪个对象了。 通配符导入真的有那么讨厌吗 从代码执行效率来说，使用通配符导入没有任何区别。 例如： java.io.\* …

---

## [GRPC MacOS M1 处理器的问题](https://www.isharkfly.com/t/grpc-macos-m1/14044)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [August 1, 2022, 6:43pm UTC](https://www.isharkfly.com/t/grpc-macos-m1/14044 "2022-08-01T18:43:23Z")

</div>

最近在编译 GRPC 的时候遇到了一个奇怪的问题，提示没有找到 GRPC 编译上使用的编译器。 主要原因就是 Java 使用的 Maven 插件将新的 Apple 操作系统识别成了 protoc-3.11.4-osx-aarch\_64.exe。 如果你的 GRPC 使用插件的版本不够的话，这个可执行文件是没有在中央仓库中找到了。 例如，我们使用的 3.11.4 的版本就没有找到了。 可以做的就是对使用的插件版本进行升级。 …

---

## [Protocol buffers 的问题和滥用](https://www.isharkfly.com/t/protocol-buffers/14042)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [July 23, 2022, 12:51pm UTC](https://www.isharkfly.com/t/protocol-buffers/14042 "2022-07-23T12:51:49Z")

</div>

当前公司因为设计上的问题广泛使用了 Protocol buffers。 在使用的过程中发现了很多 Protocol buffers 的使用问题和滥用，一个好端端的工具被用成这样也是比较郁闷。 下面就对使用中的问题进行一些小的总结。 Protocol buffers 用意 Protocol buffers 是为了加快网络数据传输，对传输数据进行压缩处理，通过通过暴露接口让程序之间能够更快的进行通信。 举个栗子，服务或者程序 …

---

## [Hibernate 元数据模型（MetaModel）提示类没有找到错误](https://www.isharkfly.com/t/hibernate-metamodel/14038)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [July 13, 2022, 2:21pm UTC](https://www.isharkfly.com/t/hibernate-metamodel/14038 "2022-07-13T14:21:31Z")

</div>

在进行一次编译的时候，提示下面的错误信息： java: java.lang.ClassNotFoundException: org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor 问题和解决 如果你对 Hibernate 的元数据还是不非常了解的话，请参考文章： JPA 的 Metamodel 中的内容。 有关元数据生成器中的内容，请参看官方的：JPA Static Me…

---

## [Lombok 使用在 IDEA 中进行 JUnit 测试的时候提示 variable log 错误](https://www.isharkfly.com/t/lombok-idea-junit-variable-log/14037)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [July 13, 2022, 2:17pm UTC](https://www.isharkfly.com/t/lombok-idea-junit-variable-log/14037 "2022-07-13T14:17:56Z")

</div>

提示的错误信息如下： D:\\WorkDir\\USRealEstate\\Source-Code\\Common\\common\\src\\test\\java\\com\\ossez\\common\\tests\\ConfTest.java:28:9 java: cannot find symbol symbol: variable log location: class com.ossez.common.tests.ConfTest …

---

## [到底应不应该使用 lombok](https://www.isharkfly.com/t/lombok/14036)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [July 12, 2022, 3:57pm UTC](https://www.isharkfly.com/t/lombok/14036 "2022-07-12T15:57:22Z")

</div>

对使用 lombok 还是有很多争议的，有些公司不建议使用，有些公司又大量使用。 我们的想法是：可以使用，但是不要滥用。 什么是 lombok Lombok是 一种Java™实用工具，可用来帮助开发人员消除Java的冗长代码，尤其是对于简单的Java对象（POJO） 。 它通过注释实现这一目的。 通过在开发环境中实现Lombok，开发人员可以节省构建诸如hashCode() 和 equals()这样的方法以及以往用来分类各种 …

---

## [Java 代码中数字中间带下划线是几个意思](https://www.isharkfly.com/t/java/14032)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [July 7, 2022, 11:09am UTC](https://www.isharkfly.com/t/java/14032 "2022-07-07T11:09:02Z")

</div>

见过下面的代码吗？ List strings = IntStream.rangeClosed(1, 10\_000\_000).mapToObj(Integer::toString).collect(toList()); 在数字中间还带有一个下划线，这是几个意思？ 官方解答 官方的说法来了，在页面： Underscores in Numeric Literals 中进行了说明。 简单来说就是从 Java SE 7 的版本开始，程序中…

---

## [Java 9 中的字符串（String）压缩](https://www.isharkfly.com/t/java-9-string/14024)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [July 2, 2022, 1:26pm UTC](https://www.isharkfly.com/t/java-9-string/14024 "2022-07-02T13:26:43Z")

</div>

我们都知道 Strings 在 Java 中使用 char\[\] 数组来实现的。 每一个 char\[\] 数组中的元素将会使用 2 个字节（byte）的存储空间，这是因为 Java 最初的实现使用 UTF-16 字符集。 如果你不需要存储其他语言，你的语言只有英文，或者 ASCII 码就可以满足的情况下，Java String 使用的 char\[\] 数组中存储的字符元素还是会使用 UTF-16 字符集，那么就会导致存储一个字符的时…

---

## [编程常用的几种字符编码](https://www.isharkfly.com/t/topic/14022)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [June 30, 2022, 12:46am UTC](https://www.isharkfly.com/t/topic/14022 "2022-06-30T00:46:07Z")

</div>

乱码是所有程序员都经历过的噩梦。 拯救你生命的只有 UTF-8。 如果你不知道用什么字符集，用 UTF-8，如果没有强制要求，也用 UTF-8，相信我，没错的。 从上面的网页使用的编码就知道为什么了。如果你的公司还在使用 ISO-8895-1 的话，你可以好好鄙视下，说明这公司负责技术的不行嘛。 如果你公司是中文公司，被强制使用 GBK 或者 GB18030，你就不要鄙视了，因为使用 GB 字符集是在中国大陆销售的软…

---

## [Java 中的 String Pool 简介](https://www.isharkfly.com/t/java-string-pool/14017)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [June 20, 2022, 7:40pm UTC](https://www.isharkfly.com/t/java-string-pool/14017 "2022-06-20T19:40:57Z")

</div>

在 Java 中 String 对象是我们最常用的对象。 在本文章中，我们主要对 String 对象使用的 String Pool 进行一些简单的介绍。 Java 定义 String 后，String 是存储在 String Pool 中的，以便于加快字符串的访问和处理。 正是有这个方面的访问需求，JVM 为 String 对象在内存中特地开辟了一个存储区域来加快对 String 对象的访问，这个特定的内存区域就是我们说的…

---

## [Java 使用 char\[\] Array 还是 String 存储字符串密码](https://www.isharkfly.com/t/java-char-array-string/14015)

<div class="topic-metadata">

**Author:** [@zixiao2013](https://www.isharkfly.com/u/zixiao2013)\
**Replies:** 0\
**Last updated:** [June 20, 2022, 4:07am UTC](https://www.isharkfly.com/t/java-char-array-string/14015 "2022-06-20T04:07:21Z")

</div>

概述 在本文章中，我们主要用来说明为什么应该使用 char\[\] 数组来存储密码，而不是使用 String 来存储密码。 需要注意的是，为了密码的安全，我们通常都会将用户输入的密码 MD5 加密哈希后进行存储。 我们通常是不会在后台中存储明文的用户密码的，这篇文章主要目的就是为了说明字符串在 Java 中的存储方式和在存储中的实现，就算你应该使用 char\[\] 数组来存储，你也不应该在程序中使用明文。 同时，本文章还假设你没有办法…

---

## [Java 的 maven 项目提示 Could not acquire Lock 的解决办法](https://www.isharkfly.com/t/java-maven-could-not-acquire-lock/16835)

<div class="topic-metadata">

**Author:** [@hex](https://www.isharkfly.com/u/hex)\
**Replies:** 0\
**Last updated:** [January 24, 2025, 5:17am UTC](https://www.isharkfly.com/t/java-maven-could-not-acquire-lock/16835 "2025-01-24T05:17:25Z")

</div>

最近在一个 Maven 的项目出现下面的提示： 解决方案 解决的办法就是删除本地下载的 M2 仓库目录，然后再编译。 挺简单粗暴的。 也可以在 IDEA 中重新同步下 Maven 项目。

---

## [Java 中的 Period 和 Duration](https://www.isharkfly.com/t/java-period-duration/16809)

<div class="topic-metadata">

**Author:** [@hex](https://www.isharkfly.com/u/hex)\
**Replies:** 0\
**Last updated:** [January 17, 2025, 11:32am UTC](https://www.isharkfly.com/t/java-period-duration/16809 "2025-01-17T11:32:28Z")

</div>

在本文中让我们来看看在 Java 8 中引入的 2 个新的类： Period 和 Duration. 上面 2 个类可以被用来替换在 determine 和 time 中大量使用用来计算 2 个时间不同的 API。 针对上面 2 个类最主要的不同就是 Period 被用来计算日期的不同，Duration 则是被用来计算时间的不同。 Period 类 Period 使用的单位是 年，月，日来表达 2 个日期之间的不同。 我们可…

---

## [IntelliJ IDEA Java 日志中不建议使用 %d 的格式](https://www.isharkfly.com/t/intellij-idea-java-d/16811)

<div class="topic-metadata">

**Author:** [@hex](https://www.isharkfly.com/u/hex)\
**Replies:** 0\
**Last updated:** [January 17, 2025, 2:22pm UTC](https://www.isharkfly.com/t/intellij-idea-java-d/16811 "2025-01-17T14:22:52Z")

</div>

在代码中有上面的提示，Java 的日志中不太建议使用 %d 格式化。 上面的代码最好修改为下面的这种方式： logger.info("Years:{} months:{} days:{}", period.getYears(), period.getMonths(), period.getDays());

---

## [Java 中 Period 和 Duration 的区别](https://www.isharkfly.com/t/java-period-duration/16810)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 1\
**Last updated:** [January 17, 2025, 11:33am UTC](https://www.isharkfly.com/t/java-period-duration/16810 "2025-01-17T11:33:40Z")

</div>

Java 中的 Period 和 Duration

---

## [Java 中的 ZoneOffset](https://www.isharkfly.com/t/java-zoneoffset/16803)

<div class="topic-metadata">

**Author:** [@hex](https://www.isharkfly.com/u/hex)\
**Replies:** 0\
**Last updated:** [January 16, 2025, 1:32pm UTC](https://www.isharkfly.com/t/java-zoneoffset/16803 "2025-01-16T13:32:48Z")

</div>

介绍 在我们的这个世界上因为地球是圆的，所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在，又给我们带来了很多的麻烦，比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。 当这些时间在我们计算机中进行体现的时候就会给我们带来不少的麻烦，为了解决这些麻烦，Java 提供了一些 API 来进行处理，比如用到的 Date，Time 和 DateTime。 我们都知道，Jav…

---

## [Selenium IDE 记录浏览器操作的流程](https://www.isharkfly.com/t/selenium-ide/16655)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 0\
**Last updated:** [November 23, 2024, 3:45am UTC](https://www.isharkfly.com/t/selenium-ide/16655 "2024-11-23T03:45:43Z")

</div>

下面的视频显示了如何使用 Selenium IDE 记录浏览器的操作。 当 Selenium IDE 记录成功后，可以在 Selenium IDE 中对记录进行调整后重新测试。

---

## [Selenium IDE 浏览器扩展的安装步骤](https://www.isharkfly.com/t/selenium-ide/16654)

<div class="topic-metadata">

**Author:** [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Replies:** 1\
**Last updated:** [November 23, 2024, 3:08am UTC](https://www.isharkfly.com/t/selenium-ide/16654 "2024-11-23T03:08:44Z")

</div>

Selenium IDE 如何进行安装 下面的内容介绍了 Selenium IDE 的安装方法。 针对不同的浏览器，会按照不同的插件，然后通过插件来对操作进行录制。 扩展的下载地址为：Selenium IDE · Open source record and playback test automation for the web 建议您也可以参考这个主题了解更多关于 Selenium 的使用：Python 和 Seleniu…

[Previous page](https://www.isharkfly.com/c/software-development/lang/15.md?page=1)

[Next page](https://www.isharkfly.com/c/software-development/lang/15.md?page=3)
