自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 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 14:21:54 68

原创 Go语言WaitGroup实现线程同步

package mainimport ( "fmt" "sync")var n int = 0func IntIncrement(plock *sync.Mutex, wg *sync.WaitGroup) { plock.Lock() n++ plock.Unlock() wg.Done()}func main() { wg := sync.WaitGroup{} wg.Add(1000) lock1 := sync.Mutex{} i := 0 for i =.

2021-05-30 14:53:13 158

原创 Go语言管道和锁实现自增

package mainimport ( "fmt" "sync")var n int = 0var ch chan int = make(chan int, 1000)func IntIncrement(plock *sync.Mutex, i int) { plock.Lock() n++ plock.Unlock() ch <- i}func main() { lock1 := &sync.Mutex{} i := 0 for i = 0; i .

2021-05-30 14:07:36 235

原创 二叉树未完待续

// 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.

2021-03-30 22:59:44 167

原创 c++怎么返回对象

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

2020-11-30 23:24:25 2384

原创 c++移动构造函数浅解

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

2020-11-15 23:48:02 272

原创 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 08:40:03 745

原创 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 13:12:26 2532

原创 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 00:00:15 118

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

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

2020-09-02 00:05:14 458

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

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

2020-08-30 14:09:40 153

原创 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 17:54:27 1018

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

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

2020-08-29 17:36:11 1015

原创 一个案例说清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 23:42:29 285

原创 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 23:18:25 1422

原创 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 07:47:47 327

原创 oracle自治事务

首先,有2个问题。1.怎么解决把日志写入表的问题不要以为直接insert一下就好了,因为假设事务失败了,日志表的DML操作也会回滚,这样,在排错时,日志就没有卵用了。之前做过一个项目,可以把写日志的处理单独开一个session,这样就可以隔离业务处理和日志处理了。这个算是一个解决方案,缺点就是占用数据库连接。2.触发器中怎么写入commit,rollback这个问题貌似就麻烦了,因为触发器中不能写这种语句。另一种解决方案就是自治事务。自治事务就是独立于主事务,自己控制的分支事务,

2020-06-03 08:28:37 348

原创 用分析函数代替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 10:06:44 282

原创 强制类型转换、is、as

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

2020-04-21 12:55:50 27954

原创 装拆箱和强制类型转换

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

2020-04-21 12:48:31 246

原创 关联更新建议用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 17:00:32 1254

原创 一张图解释哈希连接

2020-02-18 11:27:44 404

原创 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 15:24:43 394

原创 还算深度解析Filter

1.引出问题我把Filter下面有两个结果集的查询成为Filter连接,虽然不严谨,但是为了好说明,在本博客后面,我们都叫做Filter连接。其实这个Filter连接和单表那种Filter一样,只不过是用驱动表的记录去筛选被驱动表的记录。关于这种Filter,网上说算法类似嵌套循环,但是Filter会维护一个内存表,当驱动表扫描数据时,先在内存表里检索是否有相同的记录,如果有,直接在内存表...

2019-12-15 14:30:00 310

原创 还算深度解析ORACLE ROWNUM

关于Oracle的rownum大家并不陌生,很多人说是一个查询出结果后的伪列,是从1开始的,使用rownum过滤时必须从1开始等。rownum是怎样一个伪列,我们一会讨论;rownum是从1开始的,但是既然是伪列,为什么必须从1开始,下面我们一点点剖析。本此博客主要讨论以下几个问题①,rownum是什么及简要算法;②,因为rownum,执行计划中COUNT STOPKEY是怎么回...

2019-12-07 19:44:05 533

原创 Having和Where那点事

今天的话题稍微简单些,算是SQL扫盲吧。我们今天主要说一说having和where那点事。1.数据准备DROP table Student;CREATE TABLE Student(StuName VARCHAR2(10) NOT NULL,Subject VARCHAR2(10),Score INTEGER);insert into Student va...

2019-11-23 10:26:00 174

原创 分析函数改善自连接

下面我们看一下各种求中间值的写法及性能比较。1.数据准备DROP table Student;CREATE TABLE Student(StuName VARCHAR2(10) NOT NULL,Subject VARCHAR2(10),Score INTEGER);insert into Student values('A1','数学',60);inse...

2019-11-17 15:16:01 140

原创 Having转Not Exists优化

Having如果相关查询,有时候会产生Filter,下面我们看看转换方法。1.数据准备DROP table Student;CREATE TABLE Student(StuName VARCHAR2(10) NOT NULL,SClass VARCHAR2(10) ,Subject VARCHAR2(10),Team VARCHAR2(10),Score I...

2019-11-17 00:31:19 467

原创 List不能用foreach删除元素引发的胡思乱想

今天,看到一篇博客说Java ArrayList不能用foreach删除,以前还真没验证过,分别验证了ArrayList和LinkedList,真的是不可以。代码如下。 public static void main(String[] args) { List<String> lstArr=new ArrayList<String>();...

2019-11-16 23:14:43 211

原创 SQL除法加强版

接之前的SQL除法,我们来一次SQL除法的加强版。实际工作中这种需求可能很少,但是为应付面试题,没准有用。1.数据脚本drop table student;drop table subject;create table student(stu_name varchar2(20),subject_id varchar2(10));create table subject(subj...

2019-11-10 15:12:35 920

原创 SQL优化-关联子查询改表连接

1.数据脚本drop table test1 ;create table test1 as select * from (select d.*,rownum as rn from dba_objects d where d.owner not in ('SYS','SYSTEM','PUB...

2019-11-04 15:55:22 973

原创 SQL优化-分析函数优化(不等连接+聚合)

1.数据脚本drop table test1 ;drop table test2 ;drop table test3 ;create table test1 as select * from (select d.*,rownum as rn from dba_objects d w...

2019-11-04 15:13:56 953

原创 SQL优化-关联查询不要用not in

首先,我们看not in写法及执行计划SELECT count(*) FROM test t1WHERE 1234 NOT IN (SELECT t2.object_id FROM test t2 WHERE t1.owner = t2.owner...

2019-11-02 14:27:31 387

原创 SQL优化-Filter正名

之前我写过一篇博客分析Filter也有性能好的一面,最近看了一下,感觉说的不够浅显易懂,这里再写一篇。之前博客链接:https://blog.csdn.net/songjian1104/article/details/983256581 数据准备drop table emp1;drop table dept1;create table emp1 as select * fr...

2019-10-20 13:47:54 490

原创 关联表更新Merge优化

昨天,有一位美女提出了如下需求,周末没事,在家里好好查了一下。1 需求分析有三张表,商品表(TBLITEM),库存表(TBLSTORAGE),库存管理表(TBLMANAGEMENT);每一种商品对应的处理区分是0,并且库存总量大于1000,就把库存管理表的库存区分更新为1,小于1000,更新为0。2 数据准备DROP TABLE TBLITEM;DROP TABLE TBL...

2019-10-12 19:37:17 334

原创 分析函数改善自连接-20191006-01

1 数据准备drop table test1;create table test1 as select * from dba_objects where rownum<10000;alter table test1 add constraint pk_test1 primary key (object_id);commit;2 需求分析以owner分组,求每组内小于最...

2019-10-06 10:48:29 139

原创 SQL写法诡异篇

本章节我们讨论的SQL写法,我目前还没有想到高效的场景,所以称之为诡异篇,算是几种要绕开的写法吧。1用左联接代替分组聚合运算1.1 数据环境drop table test1;create table test1 as select * from dba_objects where rownum<1000;alter table test1 add constraint p...

2019-10-05 15:22:57 160

原创 SQL优化-避免多余Group By

1 数据准备drop table test1;drop table test2;create table test1 as select * from dba_objects;alter table test1 add constraint pk_test1 primary key (object_id);create table test2 as select * fr...

2019-10-05 14:42:01 1034

原创 优化器执行计划选择

1 数据准备CREATE TABLE TEST1 AS SELECT D.* ,trunc(dbms_random.value(0,100)) AS RAN_VAL FROM DBA_OBJECTS D;2 性能改善2.1 写法一SELECT DISTINCT T1.OWNER FROM TEST1 T1WHERE RAN_VAL < (SEL...

2019-09-29 17:06:58 200

原创 Filter消除-20190929-03

1 数据准备CREATE TABLE TEST1 AS SELECT D.* ,trunc(dbms_random.value(0,100)) AS RAN_VAL FROM DBA_OBJECTS D;2 性能改善2.1 写法一SELECT OWNER, COUNT(*) FROM TEST1GROUP BY OWNERHAVING COUNT(*) + 1...

2019-09-29 15:54:47 226

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除