Keroro军曹大人
码龄3年
关注
提问 私信
  • 博客:63,992
    社区:3
    动态:220
    64,215
    总访问量
  • 19
    原创
  • 475,860
    排名
  • 38
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2021-12-06
博客简介:

icecreamTong的博客

查看详细资料
个人成就
  • 获得117次点赞
  • 内容获得6次评论
  • 获得588次收藏
  • 代码片获得580次分享
创作历程
  • 12篇
    2023年
  • 14篇
    2022年
成就勋章
TA的专栏
  • C++
    9篇
  • 数据结构与算法
    9篇
  • 软件工程
    1篇
  • 动态规划
    2篇
  • 图
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

183人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

mac配置python环境(anaconda)

ImportError: No module named 原因1. python2 没有加 `__init__.py`解决方法原因2. 没有加入包的root路径解决方法pth 文件写一个笔记方便自己以后回查原因1. python2 没有加 __init__.py解决方法原因2. 没有加入包的root路径解决方法pth 文件..._python找不到包。1.1 可以用base环境,也可以根据你的工程创建新的环境(我理解“环境”就是下载的包放在哪里,到时候程序运行的时候从哪里找包)
原创
发布博客 2023.09.05 ·
2087 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

【操作系统/进程间通信】共享内存-原理和实现

共享内存是一种进程间通信的机制,即不同进程的虚拟内存空间(虚拟内存地址不需要相同),
转载
发布博客 2023.05.13 ·
3946 阅读 ·
6 点赞 ·
0 评论 ·
24 收藏

【操作系统/进程间通信】消息队列-原理和实现

4、实例:以阻塞方式不断从消息队列(关键字为0x1234)中读取消息,并打印接收到的消息类型、长度和数据等,当接收到内容为“exit”的消息时程序结束。引入消息类型之后,消息队列在逻辑上由一个消息链表转化为多个消息链表。2)参数msgflg的低9位指定队列的属主、属组和其他用户的访问权限,其它位指定消息队列的创建方式。”,消息类型为TYPE。例2:创建关键字为0x1234,访问权限为0666的消息队列,如队列已存在则报错。2)以阻塞方式从消息队列(关键字为KEY)接收消息,接收消息类型为TYPE。
转载
发布博客 2023.05.13 ·
1944 阅读 ·
2 点赞 ·
0 评论 ·
6 收藏

【C++】类和对象-继承(๑•̀ㅂ•́)و✧

当不需要对派生类新增的成员函数进行任何初始化操作时, 派生类构造函数体可以为空基类没有构造函数或构造函数参数为空, 在派生类构造函数中可不写调用基类构造函数的语句, 盗用派生类构造函数时系统会自动调用基类的默认构造函数基类中定义了有参的构造函数, 派生类构造函数总必须写出基类的构造函数及其参数基类中既定义无参数的构造函数,又重载了有参数的构造函数, 派生类构造函数中可以调用带参的基类构造函数, 也可以不调用基类的构造函数1.2.3 多次继承。
原创
发布博客 2023.05.12 ·
402 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

【C++】函数重载、运算符重载

C++ 允许在同一作用域中的某个和指定多个定义,分别称为和。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个或时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为。
原创
发布博客 2023.05.12 ·
187 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【C++】结构体构造函数和实例化详解-打包解决你的所有困惑(●‘◡‘●)

构造函数的方式代码参数全初始化参数部分初始化带默认值v,如果传入不同的值v',按传入值v'给变量赋值一种简便的写法。
原创
发布博客 2023.05.11 ·
10551 阅读 ·
24 点赞 ·
0 评论 ·
70 收藏

【C++】数组arr[]

地址指针赋值数组的首地址 arr 或 &arr[0]int *pint*p=arr;数组的某个元素的地址 arr[i]int *p数组的整体地址 &arr;int(*p)[5](1) arr 等价于 &arr[0]表示数组首元素地址,指向数组第1个元素,arr + 1或&arr[0] + 1会跳过第1个元素【加上1个数组元素的字节数】,指向数组的下1个元素。arr或&arr[0]的地址类型为int *类型,使用int类型的指针(指向数组首元素的指针)接收。(2) &arr。
原创
发布博客 2023.05.10 ·
2092 阅读 ·
4 点赞 ·
0 评论 ·
23 收藏

【数据库】Mysql学习路线

好吧,说了这么多,其实我就是想说,你一定要对以上的知识知其所以然,不过 mysql 不像算法这些需要学习很多,所以在学习顺序方面,没啥好介绍的,按照书籍的顺序来学习即可。面对问题,拿出打破砂锅问到底的精神,先思考一番,给出自己的假设,不要着急地去找度娘,谷歌。都懂,你才能扯的起来,对于事物和锁也是,当时面试官问了我事务是如何保证一致性的,刚好我研究过 ,redolog,binlog,undolog 这些日志,然后和面试官扯了好久。读完这些东西,再加些丰富的经验,理论上来讲就具备DBA的水平了。
转载
发布博客 2023.03.07 ·
1153 阅读 ·
1 点赞 ·
0 评论 ·
16 收藏

【Linux高性能编程】详解:什么是I/O/ 管道/ socket/ 进程的阻塞?优缺点和适用场景是什么?

目录一、什么是进程的阻塞和非阻塞?(清楚精辟)1、进程阻塞 2、进程非阻塞二、什么是I/O的阻塞和非阻塞?1.阻塞IO模型2.非阻塞IO模型三、什么是管道的阻塞和非阻塞?1、回顾:管道的基础知识2、回顾:管道读写的行为3、管道阻塞/非阻塞的设置4、总结:阻塞/非阻塞 读/写会成功还是失败四、什么是socket的阻塞和非阻塞?(本质是send和recv函数阻塞调用)1、回顾:socket编程的connet(),accept()的阻塞和非阻塞模式下的表现2、回顾:socket编程的send()和recv()函数
原创
发布博客 2023.03.07 ·
1489 阅读 ·
2 点赞 ·
0 评论 ·
8 收藏

【C++】类:构造函数、默认构造函数模板

构造函数、默认构造函数的作用:构造函数:传一些参数进来,用于给类的成员变量赋值。默认构造函数:程序员给类的成员变量设定一个默认值,也是用于给类的成员变量赋值。如果没传参就用默认值给成员变量赋值。如果传了参就用传进来的参数给成员变量赋值。
原创
发布博客 2023.03.04 ·
1703 阅读 ·
1 点赞 ·
0 评论 ·
18 收藏

基础知识篇——堆内存和栈内存

可以看到,堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,推荐大家尽量用栈,而不是用堆。虽然栈有如此众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好。
转载
发布博客 2023.01.09 ·
5498 阅读 ·
7 点赞 ·
0 评论 ·
51 收藏

关于通用框架的一些想法

前几天跟朋友谈起框架的事情,回顾了一下当前框架的发展,尤其是Spring Boot,已经把程序员的开发简化到了最初的一个 class 的形式了。这个也是我为什么喜欢领域驱动设计(DDD)的原因,真正回归了本源。回头看历史上的各种框架,从struts开始,到Tapestry、Wicket、SpringMVC,最后到Spring Boot,就是逐渐破坏面向对象(OO)的封装性,再慢慢回归到面向对象的历程。
转载
发布博客 2023.01.07 ·
367 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【C++】动态规划之状态转移方程(单串)

接着就是要自底向上的求解问题的,先将最小规模的子问题的最优解求出,一般都用一张表来记录下求得的解,到后来遇到同样的子问题的时候就可以直接查表得到答案,最后就是通过一步一步的迭代得出最后问题的答案了。反思:错在了nums[5] 8那里,规模为6的数组里,如果子序列不以8结尾,有[4,10]长度是2,这样8前面的3记录的是2,又8>3那么 8记录的是2+1=3,但是规模为6的数组里不存在长度为3的子序列,只有[4,10]和[3,8]两个长度为2的序列,但8这里却把[4,10]和[3,8]混在一起。
原创
发布博客 2022.12.24 ·
2508 阅读 ·
6 点赞 ·
0 评论 ·
15 收藏

【动态规划】最强最详细的思路及模板(C++)

如何定义原问题和子问题 f(n),因为有时题目给的问题可能比较模糊,所以我们在求解时要经过一些转换。如何通过子问题 f(1), f(2), … f(n - 1)推导出原问题 f(n),即如何写状态转移方程李煜东著《算法竞赛进阶指南》,摘录如下::为了保证计算子问题能够按照顺序、不重复地进行,动态规划要求已经求解的子问题不受后续阶段的影响。这个条件也被叫做「无后效性」。换言之,动态规划对状态空间的遍历构成一张有向无环图,遍历就是该有向无环图的一个拓扑序。
原创
发布博客 2022.12.24 ·
4219 阅读 ·
10 点赞 ·
0 评论 ·
24 收藏

【C++】【排序算法】快速排序;堆排序;归并排序;逆序对(保证看懂!)

一、快速排序二、堆排序三、归并排序归并排序的拓展(1):数组中的逆序对归并排序的拓展(2):重要逆序对
原创
发布博客 2022.12.24 ·
1172 阅读 ·
3 点赞 ·
0 评论 ·
8 收藏

【POJ】Genealogical tree 深度优先搜索dfs+哈希表;Yogurt factory 贪心

在那里遇到了最有价值的火星人,因此,为了在所有讨论中冒犯任何人,首先用于让老火星人发言,而不是年轻的火星人,而不是最年轻的无子女评估员。但是,如果由于错误而首先说一个孙子,并且只比他年轻的曾祖父说话,这是一个真正的丑闻。标准输入的第一行仅包含一个数字 N,1
原创
发布博客 2022.12.21 ·
130 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数组a[i++]是等于a[i]还是a[i+1]? b=a[i++],等于先得出b=a[i],再i++; 如a[i]=10,i=2: b=a[i++],结果: b=10; i=2; i++是后加,也就是说表达式结束之后才自增。 ++i是先加,也就是说表达式运算之前就自增了。

发布动态 2022.12.16

【C++动态规划】用滚动数组节省空间复杂度

所以可以用两个变量p,q代表dp[i-2],dp[i-1],用r代表当前处理的dp[i],r=p+q,即相当于dp[i]=dp[i-2]+dp[i-1],然后下一次循环,让p=q,q=r,意思是数组向p的方向滚动了一位,滚动数组里原来的dp[i-2]变成dp[i-1],原来的dp[i-1]变成dp[i],r变成dp[i+1]~~使用有限个位置储存元素的信息,这有限个位置相当于一个空间复杂度为O(1)的vector,每次最后一个位置放入新加入的元素,其余元素向前移动一个位置。
原创
发布博客 2022.12.16 ·
339 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

C++ 取模(取余数)和取商 a=b*c+d; a%b=d; //得到余数 a/b=c; //得到商

发布动态 2022.12.15

【操作系统】 Operation System 第二章:操作系统基础操作

系统调用时涉及到特权级从用户态到内核态的转换,应用程序和操作系统有各自的堆栈,这两个变化比函数调用的开销更大,但更安全和可靠。-内核态:应用程序在执行的过程中,CPU执行的特权级的状态(高,操作系统可以执行CPU任何一条指令)。-用户态:应用程序在执行的过程中,CPU执行的特权级的状态(很低,不能访问特殊机器指令和IO)。跳转到操作系统的起始地址。(7)异常:(来源于不良的应用程序)非法指令或其它花的处理状态(e.g.内存出错)。(8)中断:(来源于外设)来自不同的硬件设备的计时器和网络的中断。
转载
发布博客 2022.12.11 ·
320 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多