※宋健※
码龄12年
关注
提问 私信
  • 博客:108,950
    动态:14
    108,964
    总访问量
  • 68
    原创
  • 1,411,185
    排名
  • 28
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2013-03-08
博客简介:

songjian1104的专栏

查看详细资料
  • 原力等级
    领奖
    当前等级
    0
    当前总分
    18
    当月
    0
个人成就
  • 获得29次点赞
  • 内容获得6次评论
  • 获得93次收藏
创作历程
  • 1篇
    2023年
  • 19篇
    2020年
  • 48篇
    2019年
成就勋章
TA的专栏
  • c++学习
  • SQL优化
    38篇
  • 数据库学习
    2篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

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

C#委托异步回调

// DataStructTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <queue>using namespace std;enum class NodeTag { Link, Thread};template <typename Key, typename Value>class Node{public: Key key; NodeTag.
原创
发布博客 2023.12.09 ·
89 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++怎么返回对象

返回对象,无非两种方式,返回栈对象和堆对象指针,栈对象指针不能返回,因为可能使用不该使用的内存,堆对象也不能直接返回,因为会产生内存泄漏。下面,我们分析两种返回方式的优缺点,及针对缺点的解决方案。返回栈对象: 优点:不用手动释放内存,避免了内存泄漏; 缺点:会产生对象拷贝,如果对象比较大,比如,对象里面有大数组,会产生性能开销。返回堆对象指针: 优点:不会产生对象拷贝,对性能友好; 缺点:函数调用之后手动释放对象,代码管理难度和内存泄漏风险提高。那有没有办...
原创
发布博客 2020.11.30 ·
2412 阅读 ·
1 点赞 ·
0 评论 ·
11 收藏

c++移动构造函数浅解

本博客是《C++新经典》(王健伟著)的学习笔记,本人是c++初学者,如果有理解错误或者理解不足的地方,还请大神能够指正。c++搞出了std::move把左值转成右值,还搞出移动构造函数,借此改善性能问题,个人感觉,对我这样的初学者带来一定的理解难度。我总结了一下,所谓拷贝构造函数在标准上,是深拷贝,为了改善拷贝构造函数带来的成本开销,c++搞出了移动构造函数,本质上就是浅拷贝,综上,其实就是在折腾深浅拷贝而已,其实各有利弊。1.标准的拷贝构造函数是深拷贝,有对象复制带来的成本开销;2.拷贝构
原创
发布博客 2020.11.15 ·
284 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++this加引用实现链式编程

利用c++的this指针和引用,能够实现链式编程,我们之间看代码演示。#include <iostream>#include <vector>using namespace std;class Person{public: int age; Person& AddAge(int page){ age+=page; return *this; } Person(){ cout<&
原创
发布博客 2020.11.15 ·
765 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

C++ Vector数据插入

用迭代器向vector插入数据时,要注意控制迭代器的位置,直接插入,程序会直接崩溃。下面用代码解释这个问题。#include <iostream>#include <vector>using namespace std;//元素值与3取余是0时插入一个数字void VectorInsert(){ vector<int> v{1,2,3,4,5,7,8,9}; auto it=v.begin(); int cnt=0; w
原创
发布博客 2020.11.14 ·
2570 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++引用和指针区分

本博客参照《More Effective C++》(Scott Meyers著,侯捷译)。引用和指针的不同一直困扰我很久,看了《More Effective C++》,系统梳理了一下引用和指针的区别。下面我们直接结合代码以及代码注释进行理解。#include <iostream>using namespace std;void printStr1(string& str){ cout<<str<<endl;}void printS
原创
发布博客 2020.11.13 ·
127 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++移动构造函数解决多线程对象复制问题

主线程启动子线程时,会复制对象,造成成本开销,鉴于子线程需要自动释放内存的问题,创建子线程时不能传递对象指针,只能按照值传递对象(形参分配在栈上,通过值传递的对象可以自动释放)。按照值传递就会产生对象复制问题,又因为不能传递指针,只能通过移动构造函数降低内存成本。直接看代码及运行 结果:#include <iostream>#include <string>#include <thread>using namespace std;class Sch
原创
发布博客 2020.09.02 ·
480 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

简单案例说明c++右值引用

理解此问题提前是理解临时对象的概念,如果此概念模糊,请阅读王健伟老师著作《C++新经典》14章13节,或者自己在网上查询。右值引用,简单说,就是为了解决对象复制的性能问题,实现对象内属性的浅拷贝,注意,是对象内属性,不是对象的浅拷贝。下面,我们直接看代码理解。#include <iostream>#include <string>using namespace std;class School{public: string addr; string name
原创
发布博客 2020.08.30 ·
163 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

c++用引用遍历数组

c++遍历可以直接用值或者引用遍历数组,我们先看代码。int main(){ int arr[5] = { 1,2,3,4,5 }; cout << "用值遍历" << endl; for (int i : arr) { cout << "arr地址:" << &arr << endl; cout << "第一次i的地址:" << &i << endl; break;
原创
发布博客 2020.08.29 ·
1038 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

c++函数返回指针或引用要慎重

版权声明:本系列博客是王健伟老师大作《c++新经典》的学习笔记,c++初学者及想深入了解c++的朋友可以买来阅读。函数返回指针或者引用听着很简单,其实里面有坑,关键在于,返回的指针有没有被释放,还可不可以用。下面,我们边看代码边分析。#include <iostream>#include <string>using namespace std;class Person{public: string name; Person(string _name)
原创
发布博客 2020.08.29 ·
1025 阅读 ·
0 点赞 ·
0 评论 ·
5 收藏

一个案例说清Group和Having

Group和Having是很多面试官喜欢问的,下面通过一个小案例解释一下。1.数据准备数据准备如下:数据准备SQLdrop table Student;create table Student(ClassId int,StuId int ,StuName varchar(10),Chinese int,Math int);insert into Student values(1,11,'张三',30,90);insert into Student values(1,12...
原创
发布博客 2020.07.10 ·
297 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

oracle查询锁表信息

以下SQL文可以查询锁表的ip,锁表的SQL等信息。SELECT l.session_id, s.serial#,s.machine, o.object_name, s.logon_time , SYS_CONTEXT('USERENV','IP_ADDRESS') as ip , v.TYPE,t.name,t.DESCRIPTION , a.SQL_FULLTEXTFROM v$locked_object l , dba_objects o , v...
原创
发布博客 2020.07.07 ·
1472 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

PLSQL管道表函数和其他写法比较

本文是学习笔记,没有太多说明,请自行参考create table T_SS_NORMAL( owner VARCHAR2(30), object_name VARCHAR2(128), subobject_name VARCHAR2(30), object_id NUMBER, data_object_id NUMBER, object_type VARCHAR2(19), created DATE, last...
原创
发布博客 2020.06.06 ·
338 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

oracle自治事务

自治事务就是独立于主事务,自己控制的分支事务,实现方式超级简单,在PL/SQL代码中加入PRAGMA AUTONOMOUS_TRANSACTION就可以了,不多说,上案例。之前做过一个项目,可以把写日志的处理单独开一个session,这样就可以隔离业务处理和日志处理了。这个算是一个解决方案,缺点就是占用数据库连接。不要以为直接insert一下就好了,因为假设事务失败了,日志表的DML操作也会回滚,这样,在排错时,日志就没有卵用了。2.另一种解决方案就是自治事务。
原创
发布博客 2020.06.03 ·
358 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

用分析函数代替Having

在支持分析函数的数据中,建议用分析函数代替Having查询1.数据准备:create table student(name char(50),subject char(50),score int,classid int);insert into student values('张三','语文',79,1);insert into student values('张三','数学',7...
原创
发布博客 2020.04.27 ·
294 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

强制类型转换、is、as

学习C#基础时的疑问,强制类型转换和as转换到底什么区别和联系。首先,类型转换分为两大类:1.依靠转换操作符完成类型之间的转换;2.类型存在继承关系。我们看一下代码案例: class Program { static void Main(string[] args) { Person p = new Pers...
原创
发布博客 2020.04.21 ·
27999 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

装拆箱和强制类型转换

记得在学C#基础时,有个疑问,值类型和引用类型进行隐式类型转换会造成装拆箱,但是用强制类型转换,有时候会避免装拆箱,一直不明白为什么,首先我们先看案例:我们再看编译后的IL代码:可以看出,隐式转换确实造成了装拆箱,ToString显示类型转换确实没有,原因就是显示类型转换调用了Number.FormatInt32方法,在内存中完成int到string的转换。...
原创
发布博客 2020.04.21 ·
261 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关联更新建议用merge

本章节执行计划请自行采集。1.数据准备drop table test1;drop table test2;create table test1 as select * from dba_objects;create table test2 as select * from dba_objects;2.问题SQLupdate test1 t1set t1.object...
原创
发布博客 2020.02.18 ·
1260 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

一张图解释哈希连接

原创
发布博客 2020.02.18 ·
415 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C#反射动态校验属性类型信息

不多说,直接上代码主类:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ReflectionProj{ class Program { static ...
原创
发布博客 2020.01.19 ·
412 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏
加载更多