跳至主要內容

CODEVK

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