东风草堂博客

公众号:开发者来风


今天给大家安利两个 AI 代码神器:MarsCode AI 和 Codeium!
用过它们后,我只有一个感慨:谁还会自己手写代码啊?
它们不仅能自动补全代码,还能提供各种智能辅助功能,写的代码又快又优雅,甚至比自己手写的更稳妥。只需要检查下是否符合需求,确认没问题就可以直接用了,效率高到离谱!


MarsCode AI:智能代码助手,完美提升效率与质量

MarsCode AI 是豆包旗下的智能编程助手,主打 代码自动补全、代码解释、单测生成、问题修复 等功能,支持各种主流编程语言及 IDE,可以说是全能选手。

阅读全文 »

搭建自己的Git服务器,轻松管理团队代码!从安装配置Git,到创建裸仓库、上传代码、设置SSH免密登录,再到实现自动部署,教程详细覆盖每一步。无需依赖第三方平台,用Git钩子自动化流程,确保高效协作与代码安全。快来了解如何用几步简单操作打造高效的团队开发环境吧!

阅读全文 »

详细介绍GOST代理工具的安装配置与使用方法,包括Docker部署、WARP模式、代理链构建、Windows全局代理配置等实用技巧,助您轻松实现科学上网和网络加速。

阅读全文 »

在日常工作和生活中,我们经常需要一个能够即时通知的工具,帮助我们实时监控某些事件或任务的状态,确保及时收到提醒。然而,许多通知工具都存在通知权限受限或功能单一无法定制化的问题。本文介绍一种通过企业微信实现几乎无限次的通知方法。此方法无需下载企业微信APP,只需借助微信插件,即可通过接口进行定制化通知。

企业微信通知实现

企业微信结合微信插件,用户无需额外下载企业微信客户端,就能通过该插件接收企业通知。只要你是企业微信的成员,就可以通过直接关注企业微信插件接收通知。这个方法不仅方便,还能保证通知的及时性和灵活性,适用于多种场景。

接口介绍

要通过接口实现通知,首先需要注册企业微信账号并获取API的访问权限。以下是常用的接口与操作步骤:

阅读全文 »

现象

客户端无法正常tcp连接服务,使用telnet连接ip:port失败,但是有时候又可以成功。

排除过程

之前以为是防火墙没有关的原因,设置iptables -t filter -I INPUT -p tcp –dport %d -j ACCEPT后,依旧无法连通,另外有时候又可以连通,如果是防火墙问题,肯定是无法连通的,所以排除防火墙问题。

为了确认网络确实是可以通的,tcpdump -i ppp108 -vv -w 108.pcap,拿到抓包数据放到wireshark打开看了下

确实是可以收到SYN包,但是服务端并没有回SYN+ACK,为什么不回呢?一般情况下,三次握手是在内核自动完成的,也就是SYN+ACK不是在应用层完成的。使用lsof -p看了下,端口是正常监听的。

阅读全文 »

模型

https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main
https://www.liblib.art/
真人图片就用:
majicmixRealistic,chilloutmix
其他就用:
revAnimated,realisticVision,deliberate

ControlNet负责更好地“控制”这个“模型”或画面,ControNet的作用是精细化控制整体图片的元素——主体、背景、风格、形式等,ControlNet就是你提供一张图片,然后选择一种采集方式,去生成一张新的图片

  • 可以选择采集图片中人物的骨架,从而在新的图片中生成出一样姿势的人
  • 可以选择采集图片中画面的线稿,从而在新的图片中生成一样线稿的画面
  • 可以选择采集图片中已有的风格,从而在新的图片中生成一样风格的画面
    Lora负责把想要画面的“主体”或“场景”炼制成模型,Lora的作用是让图片主体符合我们的需求
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
template <typename T>
class ThreadSafePointer {
public:
ThreadSafePointer() : data(nullptr), ref_count(new size_t(0)), mutex(new std::mutex()) {}

ThreadSafePointer(T* ptr) : data(ptr), ref_count(new size_t(1)), mutex(new std::mutex()) {}

ThreadSafePointer(const ThreadSafePointer<T>& other) {
std::lock_guard<std::mutex> lock(*other.mutex);
data = other.data;
ref_count = other.ref_count;
(*ref_count)++;
mutex = other.mutex;
}

ThreadSafePointer& operator=(const ThreadSafePointer<T>& other) {
if (this == &other) return *this;

release();
std::lock_guard<std::mutex> lock(*other.mutex);
data = other.data;
ref_count = other.ref_count;
(*ref_count)++;
mutex = other.mutex;
return *this;
}

~ThreadSafePointer() {
release();
}

T* get() const {
std::lock_guard<std::mutex> lock(*mutex);
return data;
}

size_t use_count() const {
std::lock_guard<std::mutex> lock(*mutex);
return *ref_count;
}

private:
T* data;
size_t* ref_count;
std::mutex* mutex;

void release() {
std::lock_guard<std::mutex> lock(*mutex);
if (ref_count && --(*ref_count) == 0) {
delete data;
delete ref_count;
delete mutex;
}
}
};

ThreadSafePointer<int> ptr1(new int(42));
{
ThreadSafePointer<int> ptr2 = ptr1;
std::cout << "ptr2: " << *ptr2.get() << " (use count: " << ptr2.use_count() << ")" << std::endl;
}

std::cout << "ptr1: " << *ptr1.get() << " (use count: " << ptr1.use_count() << ")" << std::endl;

上面的代码实现了一个简单的线程安全智能指针 ThreadSafePointer,它用于管理一个动态分配的对象(例如 int)。以下是代码的原理解释:

  1. 类模板定义:

    • ThreadSafePointer 类是一个模板类,可以管理不同类型的动态分配对象。
  2. 成员变量:

    • data:指向实际数据的指针。
    • ref_count:一个指向引用计数的指针。引用计数表示有多少个智能指针共享相同的资源。
    • mutex:一个互斥锁,用于保护 dataref_count 的访问。
  3. 构造函数:

    • 默认构造函数:初始化 datanullptrref_count 为 0,mutex 为一个新的互斥锁。
    • 构造函数接受指向资源的原始指针,将 data 指向该资源,初始化 ref_count 为 1,创建一个新的互斥锁。
  4. 复制构造函数:

    • 复制构造函数被用于创建一个新的 ThreadSafePointer 对象,该对象共享相同的资源。
    • 它通过获取另一个智能指针的互斥锁来保证线程安全,并增加引用计数。
    • 共享的 ref_countmutex 在对象之间共享,以确保线程安全的引用计数。
  5. 赋值运算符重载:

    • 赋值运算符用于将一个 ThreadSafePointer 对象赋值给另一个对象。
    • 在这个实现中,首先释放调用对象的资源(如果有),然后像复制构造函数一样,共享另一个对象的资源。
  6. 析构函数:

    • 析构函数用于释放资源。
    • 它首先获取互斥锁以确保线程安全,然后检查引用计数。如果引用计数减为零,表示没有智能指针引用该资源,就释放资源并删除引用计数和互斥锁。
  7. get 方法:

    • get 方法返回存储在 ThreadSafePointer 中的指向资源的原始指针。在获取指针时,它会获取互斥锁以确保线程安全。
  8. use_count 方法:

    • use_count 方法返回当前资源的引用计数,以确定有多少个智能指针引用了该资源。同样,它也获取互斥锁以确保线程安全。
  9. main 函数:

    • main 函数中,我们演示了如何创建和使用 ThreadSafePointer 对象来管理整数资源。创建一个 ThreadSafePointer 对象时,资源的引用计数初始化为 1。然后,通过复制构造函数创建第二个智能指针,两个智能指针现在共享同一资源,引用计数增加到 2。

这个实现确保在多线程环境中正确管理资源的生命周期,通过使用互斥锁来保护引用计数和资源的访问,避免了竞态条件和资源泄漏。

以下是一篇围绕“字节跳动面试八股文”主题的完整博客文章,整合并扩展了你提供的内容,保留了核心知识点并进行适当补充:


八股文 - 字节备考全整理

字节跳动作为国内一线互联网公司,对技术能力的考察非常全面,既涉及底层原理,也关注算法细节。本文整理了在字节跳动技术面试中高频出现的基础知识点与算法题,并给出思路与实现,帮助大家高效备考。

一、基础数据结构与算法题

阅读全文 »
0%