跳至主要內容
CODEVK

CODEVK

Learn to Share, Share to Learn

VuePress
Vue 驱动的静态网站生成器
Source
此网站源码
ChatGPT
poe.com/ChatGPT
MySQL 8.0 以上开启远程访问

MySQL 8.0 以上开启远程访问

MySQL 服务器默认绑定的地址是 127.0.0.1,只能通过 localhost 访问。如果想进行远程访问,需要进行一些简单的设置。

网上搜到的很多资料都是基于老版本的,已经过时。 MySQL 官方文档写得过于详细(复杂)。所以特意写一篇文章记录一下配置过程。

添加root密码

这一步不是必须的,可跳过。在 Windows 上安装 MySQL 过程中是可以在安装界面设置 root 密码的,但是在 Ubuntu 上用 apt 安装的 MySQL 是默认没有密码的,不安全,所以先添加密码。
首先通过以下命令登录MySQL:


CODEVK大约 2 分钟数据库MySQL
静态库开发

静态库开发

静态库与动态库的区别

静态库:在链接时,静态库的对象文件直接加入到目标文件中,生成可执行文件。运行时不需要加载静态库。

动态库:在链接时,只有动态库的引用加入到目标文件中,生成可执行文件。运行时需要加载动态库,然后调用动态库中的函数。

静态库文件扩展名为 .a ,动态库文件扩展名为 .so (Linux)或 .dll (Windows)。

静态库在编译和链接时 resolved,动态库在运行时 resolved。

静态库会增加程序的体积,而动态库可以被多个程序共享,减小体积。


ekskei大约 1 分钟C/C++
动态库开发

动态库开发

动态库是一种可以在程序运行时被动态加载的共享库,它包含了一组函数和数据,可以被多个程序共享使用,在C/C++代码重用和模块化开发中有着广泛的应用。动态库通常采用共享对象文件(.so)或者动态链接库文件(.dll)的格式存储在磁盘上。本文将介绍动态库的开发方法以及注意事项,帮助了解如何编写高质量的动态库。

导出函数

编写要导出的函数时,需要使用特殊的关键字和修饰符来标识它们是动态库的导出函数。

例如,在Linux系统下,可以使用__attribute__((visibility("default")))修饰符来标识:


ekskei大约 9 分钟C/C++
关于C++就业方向

关于C++就业方向

C++作为一门编程语言,相对于Java和JavaScript来说,就业方向是很不确定的。

虽然C++的应用方向非常广泛,涵盖数据库、自动驾驶、量化交易、高性能计算、嵌入式开发、音视频开发、QT开发、图像处理、游戏开发等许多领域,但实际上,每个方向的C++岗位都不算多。

这些C++方向除了使用C++语言之外,实际上没有太多的交集与相同点。它们分属不同的行业与技术领域,在工程实践中涉及的技能与知识也大相径庭。因此,一名在某一方向,例如游戏开发,有相当工作经验的 C++工程师,未必能很快地切换到另一方向,如嵌入式开发,并快速达到同等工作能力。不同方向的学习成本与切换成本也会较高,切换方向很可能降低涨薪幅度,从而降低了C++工程师的职业流动性。


ekskei小于 1 分钟C/C++工作
git设置代理

git设置代理

电脑上已经启用了代理,浏览器访问 github 很快,但是实际使用中发现 git clone 或者 push 到 github 很慢,经常出现超时。

在网上查了一下,发现 git 默认是不走代理的,需要自己手动设置。方法如下:

设置代理

这里使用的是 socks5 代理, PORT 是代理的端口号,需根据实际情况替换。我只针对 github 进行了设置,如果还有其他网站需要走代理,可以按照此方法进行设置。

git config --global http.https://github.com.proxy socks5://127.0.0.1:PORT

ekskei小于 1 分钟gitgit
git add加不同参数的区别

git add加不同参数的区别

git add 可将该文件添加到暂存区。常用的加不同参数的命令有以下几个:

# -A 相当于all,将当前整个工作区中所有的文件改动提交至暂存区
# 包括整个工作区中的新增、修改和被删除的文件,不受当前所在目录限制
git add -A

# 将当前工作区中当前目录(包括子目录)下的所有的文件改动提交至暂存区
# 包括新增、修改和被删除的文件,不包括当前所在目录之外的文件
# 2.x 版本相比 1.x 版本,对 git add . 的功能做了改动
# 2.x 会提交被删除的文件,而 1.x 不包括被删除的文件
# 2.x 中如果想在使用 git add . 时不提交被删除的文件,可加上--ignore-removal
git add .

# 将当前整个工作区中被修改和被删除的文件提交至暂存区
# 包括整个工作区中修改和被删除的文件,不受当前所在目录限制
# 而新文件因为未被跟踪(untracked),所以不会被提交至暂存区
git add -u

# 将当前工作区中当前目录(包括子目录)下的所有的文件改动提交至暂存区
# 包括新增、修改和被删除的文件,但不包括文件名以 . 符号开头的文件的改动
# 不包括当前所在目录之外的文件
git add *

ekskei大约 2 分钟gitgit
git不同分支代码的合并

git不同分支代码的合并

项目不同分支之间代码的合并是常用的操作。

假设要把branchA的代码合并到branchB,步骤如下:

(1)切换到branchB中,执行:

git merge branchA --squash

ekskei小于 1 分钟gitgit
git同步远程仓库分支

git同步远程仓库分支

本地有新分支,远程没有

在本地新分支中进行以下命令推送即可:

git push

ekskei小于 1 分钟gitgit
git基本操作

git基本操作

git是一个分布式版本控制系统,用于管理软件项目的源代码。以下内容为git的基本操作。

安装git

在Windows上安装git

访问git官网下载安装程序,然后按照提示进行安装。

在Mac上安装git

使用Homebrew进行安装:

brew install git

在Linux上安装git

使用包管理器进行安装,例如在Ubuntu上:

sudo apt-get install git

配置git


ekskei大约 2 分钟gitgit
SQLite性能优化

SQLite性能优化

场景描述

有10000条数据需要插入数据库,原来未优化的代码为直接循环执行INSERT语句。

void test0()
{
    sqlite3 *db = NULL;
    sqlite3_open("test0.db", &db);
    auto begin = std::chrono::steady_clock::now();
    sqlite3_exec(db, "CREATE TABLE Test(id INTEGER,msg TEXT);", 0, 0, 0);
    const int m = 10000;
    for (int i = 0; i < m; i++)
    {
        sqlite3_exec(db, "INSERT INTO Test(id,msg) VALUES(123,'hello');", 0, 0, 0);
    }
    auto end = std::chrono::steady_clock::now();
    auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
    printf("test0执行时间: %ld ms\n", elapsed);
    sqlite3_close(db);
}

CODEVK大约 3 分钟数据库SQLite
2