
基础课
山上一缕烟
这个作者很懒,什么都没留下…
展开
-
【C#】抽象类和接口的区别
【代码】【C#】抽象类和接口的区别。原创 2023-10-20 18:07:50 · 958 阅读 · 0 评论 -
【JavaScript】对 Map 类的实例使用方括号 [] 运算符,会发生什么?
/原创 2022-08-22 22:28:33 · 1166 阅读 · 1 评论 -
【C / C++】C++20 新特性:Designated Initializer
LNK2019原创 2022-08-08 17:51:58 · 1657 阅读 · 0 评论 -
【C / C++】包含多个工程(项目)的解决方案中,正确将标识符定义后,仍出现关于该标识符的 LNK2019 链接错误的一种情况
LNK2019原创 2022-07-05 14:42:08 · 583 阅读 · 0 评论 -
【2022-01-23】Linux 下编译 Python 并安装后,pip install 总是提示 SSLError 并安装失败的解决办法
There was a problem confirming the ssl certificate: Can’t connect to HTTPS URL because the SSL module is not available.原因:依赖没有安装完全。解决办法:sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi原创 2022-01-23 14:52:36 · 1304 阅读 · 0 评论 -
【2021-12-22】【Kotlin】Type inference failed. Expected type mismatch: inferred type is HashSet but Set
类似这样的错误提示:Type inference failed. Expected type mismatch: Inferred type is HashSet<String>? but Set<String> was expected.是不是一眼看上去,以为是语言有问题,无法使用父类型代表若干个可能的子类型,进而无法针对抽象编程?如果这么想就错了。实际上,也可以是可空类型与不可空类型不匹配。例如,此处要求非可空类型,但传回的是可空类型。要把“?”符号看清楚,不要看漏。.原创 2021-12-22 10:23:14 · 2105 阅读 · 0 评论 -
【2021-12-18】type ‘androidx.navigation.safeargs.gradle.ArgumentsGenerationTask‘ property ‘application
Some problems were found with the configuration of task ‘:app:generateSafeArgsDebug’ (type ‘ArgumentsGenerationTask’).In plugin ‘androidx.navigation.safeargs.kotlin’ type ‘androidx.navigation.safeargs.gradle.ArgumentsGenerationTask’ property ‘application原创 2021-12-18 14:13:10 · 2285 阅读 · 0 评论 -
【2021-12-18】java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.util.R
java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.util.ResourceBundle.setParent(java.util.ResourceBundle) accessible: module java.base does not “opens java.util” to unnamed module @a38d7a3在项目级的 build.gradle 的 buildscript 的原创 2021-12-18 13:14:06 · 5134 阅读 · 0 评论 -
【2021-12-18】Could not initialize class org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel 解决办法
在项目级的 build.gradle 的 buildscript 的 dependencies 中,补充 如下的 classpath:classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"即:较新版本的 kotlin-gradle-plugin。原创 2021-12-18 12:10:55 · 6732 阅读 · 0 评论 -
【2021-12-11】在 Windows 系统下,迁移 Android Studio 的 Android 虚拟设备(AVD)到非系统分区,释放系统盘空间
一般地,AVD 位于 .android 文件夹中,而 .android 则位于$env:userprofile内。例如:'C:\Users\Andy Roswell'我们可以用如下一段 PowerShell 代码,通过更改系统环境变量(机器级环境变量),改动 AVD 等存放的默认目录:$AndroidHome = 'D:\Android'$ANDROID_PREFS_ROOT = $AndroidHome$ANDROID_SDK_ROOT = $AndroidHome + '\SDK'$原创 2021-12-11 17:25:45 · 1660 阅读 · 1 评论 -
【2021-12-10】Android Studio 的 idea.log 的位置
例如:C:\Users\Andy Roswell\AppData\Local\Google\AndroidStudio2020.3\log在 Android Studio 中,提示出错并要求查看此日志文件时,可以在形如上述路径的路径中找到。原创 2021-12-10 15:46:34 · 2082 阅读 · 0 评论 -
【2021-12-10】【Android】【血妈坑】百度地图 无法显示完整地图 可能是指定了错误的坐标(经纬度写反了)
LatLng(v: Double, v1: Double)的第一个参数是纬度(Latitude),第二个参数是经度(Longitude)。如果采用百度地图的坐标拾取系统取得指定地点的坐标,给出来的经纬度是反的,如果直接复制到 LatLng 的构造函数里,会出问题。...原创 2021-12-10 14:44:06 · 1260 阅读 · 0 评论 -
【2021-11-24】【Kotlin】Scope Functions:let、with、run、apply、also 的区别;关于 receiver 的一些解释说明:receiver 到底是什么?
Kotlin 的这几个语法糖的用法都是比较相似的:letThe context object is available as an argument (it). The return value is the lambda result.val str: String? = "Hello" //processNonNullString(str) // compilation error: str can be nullval length = str?.let { pri原创 2021-11-24 11:45:30 · 1152 阅读 · 0 评论 -
【2021-11-21】【Kotlin】表达式同时包含算术与移位运算(shl / shr / ushr)时,注意运算符的优先级。
如when (((if (v[1] != null) 1 else 0) shl 1) + (if (v[0] != null) 1 else 0)) { //...}不难看出,语句((if (v[1] != null) 1 else 0) shl 1) + (if (v[0] != null) 1 else 0)产生一个 2 位的二进制数,从右数第 0 位和第 1 位的值分别由变量 d[0] 或 d[1] 是否为空来决定。根据这个值跳转到不同的分支。这样的技巧在编程中并不少见。然而,如果原创 2021-11-21 22:04:47 · 1882 阅读 · 0 评论 -
【2021-11-21】【Java / Kotlin】Iterable<E>.iterator().next() 总是停在首个元素的原因与解决办法
调用 Iterable 及其子类的 iterator() 方法时,返回的是一个新的迭代器。所以,如果错用Iterable<E>.iterator().next()进行单向遍历,则迭代器无法移动,这是因为:实际上,每次调用此方法,都获取了一个新的迭代器。这个新迭代器总是指向 Iterable 的第一个元素。解决办法是:使用一个变量引用获得迭代器,并调用其 next() 方法。...原创 2021-11-21 21:53:25 · 2093 阅读 · 0 评论 -
【2021-11-20】Random, ThreadLocalRandom, SecureRandom 生成随机序列时 OutOfMemoryError: Java heap space 的一种情况
最近在做期末作业,给一个类写测试,跑的时候总是提示java.lang.OutOfMemoryError: Java heap space把测试数据的规模缩小到只有原来的几十分之一以后,问题依旧。按照 Stack Trace 定位出错的语句,发现有时是在一个简单的插入条目到某个数据结构的语句那里爆堆,有时则是在生成随机数的时候就爆堆。后来惊奇地发现:产生 IntStream / LongStream 的时候,忘记填入随机数的个数,也就是ints(long streamSize, int random原创 2021-11-20 14:37:38 · 472 阅读 · 0 评论 -
【2021-11-20】Android Gradle Build Failed: Unsupported class file major version 61 的解决办法
猜测是因为给 Gradle 指定了一个较高版本的 JDK(如,最近刚刚正式发布的 Java 17 LTS),导致无法支持某些项目的构建。依次选择File → Settings → Build, Execution, Deployment → Build Tools → Gradle将 Gradle JDK 改为Embedded JDK version 11.0.10然后确定,再重新构建项目。...原创 2021-11-19 11:44:28 · 17326 阅读 · 0 评论 -
【2021-11-19】Android Gradle Build Failed 你的主机中的软件中止了一个已建立的连接 / 远程主机强迫关闭了一个现有的连接 且无法更改 Gradle 版本 的解决方法
如果软件使用的 Gradle 及其插件的版本较旧(如,Android Gradle Plugin 3.5.0 + Gradle 6.8),则存在此 bug。关闭 Wi-Fi 热点及其它网络共享,再将项目 Build 一次。升级到较新的 Gradle(如,Android Gradle Plugin 7.0.3 + Gradle 7.3)可以解决本问题。但是,由于 Android Studio 的 bug 比较多,可能在第一次成功构建项目之前,都不能在 Project Structures 中更改 Grad原创 2021-11-19 11:34:28 · 2080 阅读 · 0 评论 -
【2021-11-14】Android Studio 总是报错 Unresolved Class ‘MainActivity‘ 的解决办法
在 MainActivity 类对应的源文件 MainActivity.java 或 MainActivity.kt 开头,不要漏掉 package 语句。例如:package com.example.myfirstapplication如果是将别处的代码整段复制粘贴,替换了 MainActivity.java 或 MainActivity.kt 的全部原有内容,易出现此情形。...原创 2021-11-14 10:44:04 · 16027 阅读 · 2 评论 -
【2021-11-16】Struts 2 + Tomcat,总是报错 一个或多个加载器启动失败 java.lang.NoClassDefFoundError: javax/servlet/Filter
Tomcat 从 10.x 版本开始,使用最新 Servlet API 5.0(2020-09-07 发布)版本,后者是 Jakarta EE 9 的一部分。引用的原javax.*包,全部重命名为jakarta.*降级到 Tomcat 9.x(9.x 的最高版本为 9.0.54)即可正确通过编译。...原创 2021-11-10 21:32:21 · 1469 阅读 · 2 评论 -
【2021-11-10】IntelliJ IDEA 控制台 / Tomcat Server, Tomcat Localhost Log, Tomcat Catalina Log 输出中文乱码的解决办法
File → Settings → Editor → Console → Default Encoding改成 UTF-8 即可。改动前:改动后:原创 2021-11-10 12:03:07 · 923 阅读 · 0 评论 -
【2022-02-10】Qt Creator 设置 Visual Studio 风格的语法高亮
打开目录%userprofile%\AppData\Roaming\QtProject\qtcreator\styles新建一个文件 VisualStudioDarkEnhanced.xml,内容如下:<?xml version="1.0" encoding="UTF-8"?><style-scheme version="1.0" name="Visual Studio Dark Enhanced"> <style name="Text" foreground="原创 2021-11-08 16:55:43 · 540 阅读 · 0 评论 -
【2021-10-30】通过删除项目目录下的 .idea 文件夹并在 Android Studio 中重新打开项目,解决一些古怪的问题
1、明明在创建工程的过程中没有勾选 “Use legacy android.support libraries”,但在创建新 Activity 或 Fragment 时,依然有部分 Activity 或 Fragment 不可用,提示 “Requires AndroidX Support”。2、生成项目失败,提示 “Unfortunately you can’t have non-Gradle Java modules and Android-Gradle modules in one project.”原创 2021-10-30 17:55:58 · 2866 阅读 · 0 评论 -
【2021-10-24】Activity 的 onCreateOptionsMenu 不在加载的布局中显示菜单的一种情况:Android 版本过低
打开app\src\main\res\values\themes.xml可以看到类似这样的内容:<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.ActivityTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar">原创 2021-10-24 21:57:56 · 579 阅读 · 0 评论 -
Word 中,字体无法调整的解决方法
一些文件可能出现很古怪的问题:无法通过常规方法调节字体,即:在 “Home” 选项卡无法调节字体(点击新字体后并未更改),也无法通过 Ctrl+D 调出的字体界面成功修改,并无法通过 “Home” 的 “Styles”(样式)面板修改。解决方法是:新建一个文档,将当前出现问题的文档的全部内容直接复制并粘贴过去。...原创 2021-09-13 00:11:01 · 22305 阅读 · 0 评论 -
安装 TeX 及其必要的依赖
1、在 TeX Users Group 的首页 https://tug.org/ 中,选择 “Get Started with TeX”。或者,直接访问页面 https://tug.org/begin.html。2、找到 “Installing TeX and LaTeX”,根据自己使用的操作系统,选择相应的 TeX 版本:Unix / GNU / Linux → TeX LiveMac OS X → MacTeXproTeXt → Windows以 Windows 为例,proTeXt 是基于原创 2021-08-30 21:11:06 · 971 阅读 · 0 评论 -
Visual Studio Code 中,将打开新终端的目录设为当前文件所在的目录
在 File → Preferences → Settings 中,找到 Terminal.Integrated.Cwd 一项,填入${fileDirname}原创 2021-08-09 16:30:24 · 5347 阅读 · 3 评论 -
【C / C++】结构体数组与链表的存储方式演示(内存对齐示例)
#include <algorithm>#include <forward_list>#include <iostream>#include <string>using namespace std;using stunum_t = uint32_t;using age_t = uint16_t;const size_t NUM_OF_ENTRIES = 10;struct personal_information { stunum_t原创 2021-06-21 20:53:19 · 721 阅读 · 2 评论 -
【C / C++】螺旋填充一个矩阵:从左上角出发,顺时针行进,由外圈向内圈,用指定的序列螺旋填充矩阵。
#include <iostream>#include <vector>using namespace std;using chr_t = char;using coord_t = size_t;struct coord { coord_t x, y; };const chr_t content[] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" };const chr_t delim[] = " ";const size_t CONTENT原创 2021-06-21 20:49:23 · 642 阅读 · 0 评论 -
【Linux编程基础 · 信号(二)】请利用 setitimer() 和 sigaction() 函数编写一个小游戏,该游戏随机在 5 ~ 15 秒之内开始,开始后随机从 ‘w’, ‘s’, ‘a’,
题目请利用 setitimer() 和 sigaction() 函数编写一个小游戏,该游戏随机在 5 ~ 15 秒之内开始,开始后随机从 ’w’, ‘s’, ‘a’, ‘d’ 中选取 4 个字母显示在屏幕上,玩家需要迅速正确键入字母并回车以赢得并退出游戏,否则 3 秒后游戏将重新选取 4 个字母显示,无穷地循环下去。点拨源代码#include <chrono>#include <cstdio>#include <cstring>#include <fc原创 2021-05-22 11:48:58 · 196 阅读 · 6 评论 -
【Linux 编程基础 · 进程间通信 · 命名管道 · 消息队列】众所周知,网络游戏有服务端与客户端,客户端需要发 “消息” 给服务端,请使用 “命名管道” 模拟以下服务端和客户端的功能
题目众所周知,网络游戏有服务端与客户端,客户端需要发 “消息” 给服务端,请使用 “命名管道” 模拟以下服务端和客户端的功能。客户端:接收4种输入‘w’、’s’、’a’、’d’ 键,他们分别对应了上、下、左、右移动,将接收的输入作为 “消息” 发送给服务端。服务端:每隔一秒打印角色的坐标 (x, y),初始坐标为 (0, 0),服务端在接收到客户端的 “消息” 过后,重新计算角色的坐标。其中向上 y 加 1,向下 y 减 1,向左 x 减 1,向右 x 加 1。源代码Client:#includ原创 2021-05-22 10:53:30 · 273 阅读 · 1 评论 -
【Linux 编程基础 · 信号(一)】众所周知,游戏都有暂停功能,请利用 fork() 函数创建父子进程,其中一个隔一秒打印一段文字(模拟运行的游戏),另外一个接收键盘的输入,并发送信号暂停与继续游
题目众所周知,游戏都有暂停功能,请利用 fork() 函数创建父子进程,其中一个隔一秒打印一段文字(模拟运行的游戏),另外一个接收键盘的输入,并发送信号暂停与继续游戏(例如可以按 ’s’ 键暂停,按 ’c’ 键继续)。提示:1) 自行思考父子进程中,哪个模拟游戏,哪个接收输入并发送信号。2) 自行查找发送什么信号 “暂停”,什么信号 “继续”。源代码#include <iostream>#include <signal.h>#include <unistd.h>原创 2021-05-22 10:50:11 · 347 阅读 · 1 评论 -
【Linux 编程基础 · 多进程实验(三)】利用fork()创建3个子进程:第1个子进程打印“Hello World”;第2个子进程计算2的8次方,并且打印结果;第3个子进程尝试打印5/0的结果。父
题目利用 fork() 创建 3 个子进程:第 1 个子进程打印 “Hello World”;第 2 个子进程计算 2 的 8 次方,并且打印结果;第 3 个子进程尝试打印 5 / 0 的结果。父进程利用轮询方法非阻塞式地等待 3 个子进程结束,并且打印子进程的结束信息。点拨waitpid() 等待一个指定的进程或进程组的状态改变。默认情况下,它只在指定的进程(组)被终止后返回。可以通过传递相应的参数来改变其行为。该函数返回状态改变的子进程 ID。若出错,返回 -1。如果指定了参数(宏)WNOHANG原创 2021-05-22 10:47:54 · 2908 阅读 · 0 评论 -
【Linux 编程基础 · 多进程实验(二)】利用 fork() 创建 10 个子进程,每个子进程打印自己的 PID,父进程阻塞式地等待每个子进程结束并回收,然后打印该子进程的 PID。
题目利用 fork() 创建 10 个子进程,每个子进程打印自己的 PID,父进程阻塞式地等待每个子进程结束并回收,然后打印该子进程的 PID。源代码#include <iostream>#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>using namespace std;const size_t CHILDREN_COUNT = 10;int main()原创 2021-05-22 09:17:35 · 1625 阅读 · 0 评论 -
【Linux 编程基础 · 多进程实验】请利用 fork() 函数创建 8 个进程,这些进程具有以下关系,最后在每个进程中打印自己的 PID 作为输出结果。
题目请利用 fork() 函数创建 8 个进程,这些进程具有以下关系,最后在每个进程中打印自己的 PID 作为输出结果。点拨注意:在条件语句的动作范围内,除非立刻运行到 main() 的返回语句,否则,需要return 0;来让执行完毕的父进程代码或子进程代码立刻结束。父进程会创建多个子进程,但是在不出错的情形下,每次 fork() 的返回值都会大于 0。这时候任选一个大于 0 的返回值,并根据返回值来执行父进程的动作,避免重复执行。在其中一个子进程创建出错时,可以在报告错误后不立即返回,原创 2021-05-22 09:10:40 · 638 阅读 · 0 评论 -
使用深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索算法求解 (n^2 -1) 数码难题,耗时与内存占用(时空复杂度)对比(附:(n^2 - 1) 数码问题控制台简易演示程序)
一、实验目的通过编程实验,体会并理解人工智能领域常用的新型搜索算法的测试用例 —— (n^2 -1) 数码问题。二、实验内容和要求通过深度优先搜索(DFS)、宽度优先搜索(BFS)、A*搜索算法来求解 (n^2 -1) 数码难题,要求如下:初始状态以及目标状态形如下图。输出完整的从初始状态到目标状态的动作序列。对比3种算法的时间、空间消耗。三、参考实验环境CPU: Intel Core i5-8400 @ 2.80 GHz / 3.80 GHz, 6C6T 指令集: MMX原创 2021-05-17 10:53:40 · 1537 阅读 · 0 评论 -
在 Visual Studio 中,复制带语法高亮的文本
在 工具 → 选项 → 文本编辑器 → 高级 中,复选 “在复制或剪切时复制富文本”,并将长度限制改为最大值 2147483647。原创 2021-05-12 22:45:37 · 1058 阅读 · 0 评论 -
【C / C++】可变参数个数函数的注意事项
#include <stdarg.h>void f(int _Count, ...) { va_list args; va_start(args, _Count); //... va_arg(args, int); //... va_end(args);}int main() { //...}可变数量参数部分必须列写在函数参数的最后,用三个点 “…” 表示。使用 va_list 声明一个可变参数列表。当开始依次读取可变参数时,使用 va_start。第一个参数为原创 2021-04-27 23:48:06 · 613 阅读 · 0 评论 -
【Visual Studio】更改编译使用的 C / C++ 版本 / 输出纯 C 代码
第 1 步:打开项目属性第 2 步:在 “配置属性” → “通用” 中,更改 C / C++ 语言的版本如果要输出纯 C 代码,在 “C / C++” → “高级” 中,设置 “编译为 C 代码”如果没有 “C / C++” 一项,请先在项目中新建一个 .c 或 .cpp 文件。...原创 2021-04-18 10:39:51 · 5889 阅读 · 0 评论 -
【C 语言】在 stdout 绘制简单的函数图像
问题用户输入字符串 str,格式为???????? + ????/????,其中????, ????分别是对勾函数的系数,取值范围是 1 到 16 之间的整数,需要设计程序实现以下功能:1、绘制 str 代表的对勾函数曲线。2、曲线的采样点用“*”表示。注意事项:1、输出的曲线要尽量完整、美观。2、用户输入均为合法输入。3、用户输入第二个字符串 str2,表示直线且格式为???????? + ????。同时输出 str 和 str2 表示的两条曲线(选做)。解scanf 的用法纯 C原创 2021-04-18 10:29:16 · 369 阅读 · 0 评论