
编程语言
judgejames
这个作者很懒,什么都没留下…
展开
-
golang多线程中如何捕获error并返回(使用channel通道)
在多线程中,每个 goruntine 中可能共享同一个 error 变量,此时当发生 error 事件后当对应 goruntine协程退出后其他协程依然在执行中,因此很有可能会再次修改 error 变量进行覆盖。 使用带有缓冲 channel 通道,在发生 error 时将 error 数据写入管道中,这样在所有多线程执行完任务后就可以捕捉到所有发生的 error 错误信息。 此方案需要等待所有多线程执行结束退出(wg.Wait() 阻塞结束),因此适用的场景是需要捕捉多线程中所原创 2022-06-10 11:52:30 · 2492 阅读 · 1 评论 -
OC中的SEL
SEL即为selector的缩写。一般以报错的方式来检测一个类中是否存在某个类方法或对象方法。SEL的几种用法:1. 配合对象或者类检查类或对象中是否有某个方法 //setAge为对象中的方法 //如果对象中没有setAge方法就会报错 SEL sel = @selector(setAge); Person *p = [[Person al...原创 2019-12-27 15:25:35 · 479 阅读 · 0 评论 -
一个URL地址的组成结构
URL的组成包括:协议部分、端口部分、虚拟目录部分、文件名部分、参数部分、锚部分1⃣️协议部分:如http、https、ftp都属于协议部分2⃣️域名部分:如www.xiaomi.com,也可以使用ip地址作为域名使用3⃣️端口部分:跟在域名后的微端口,以“:”符号作为分隔符。端口部分不是必须的4⃣️虚拟目录部分:从域名后的第一个“/”到最后一个“/”是虚拟目录部分,也不...原创 2019-12-27 10:44:33 · 3555 阅读 · 0 评论 -
最详细简明的Git教程!
地址:https://www.cnblogs.com/best/p/7474442.html转载 2019-12-27 10:38:17 · 113 阅读 · 0 评论 -
URL中“#” “?” &“”号的作用浅析
1. # 10年9月,twitter改版。一个显著变化,就是URL加入了"#!"符号。比如,改版前的用户主页网址为http://twitter.com/username改版后,就变成了http://twitter.com/#!/username 如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符...原创 2019-12-18 20:06:28 · 429 阅读 · 0 评论 -
Qt::Key键盘按键详细说明!!!
Qt::Key底层是enum实现的,表示键盘上的每一个按键以及功能组合键等等。简单说明了基本所有能用到的:Qt::Key_Escape 0x01000000 Esc键 Qt::Key_Tab 0x01000001 Tab键 Qt::Key_Backtab 0x01000002 Tab补全键 Qt::Key_Backspace ...原创 2019-06-21 15:11:35 · 38439 阅读 · 5 评论 -
QKeyEvent获取键盘按键
翻译:返回按下或释放的键的代码。有关键盘代码列表,请参见qt::key。这些代码独立于底层窗口系统。请注意,此函数不区分大写字母和非大写字母,为此,请使用text()函数(返回生成键的Unicode文本)。值0或qt::key_unknown表示事件不是已知键的结果;例如,它可能是合成序列、键盘宏或键事件压缩的结果。需要引入头文件:#include<QEvent&g...原创 2019-06-21 14:12:55 · 5823 阅读 · 0 评论 -
正则表达式表示数字范围
\b\d{x,y}\b\d /* x,y为自定义的范围*/原创 2019-06-20 12:15:09 · 4633 阅读 · 0 评论 -
Gitlab配置SSH
传送门:https://www.cnblogs.com/hafiz/p/8146324.html转载 2019-06-18 16:47:49 · 678 阅读 · 0 评论 -
QString获取指定位置子串之mid()函数
函数原型:QString QString::mid(int position, int n = -1) const参数说明:position:截取的开始位置n:截取的长度如下示例为截取前6个单位数据和倒数6个单位数据:...原创 2019-06-24 11:26:01 · 16344 阅读 · 0 评论 -
QString怎么去掉最后一个字符
QString data = "hello world!";data = data.left(data.size - 1); /* 取data左边size - 1长度的数据 */原创 2019-07-03 16:31:03 · 21745 阅读 · 4 评论 -
QRect类的使用
translation:qrect类使用整数精度定义平面中的矩形定义:QRect ( int x, int y, int width, int height )构造一个以(x,y)为左上角、给定宽度和高度的矩形。...原创 2019-06-28 17:48:17 · 14091 阅读 · 0 评论 -
SQL根据两个字段排序
order by condition1 desc, condition2 desc;按条件1和条件2降序的规则,优先执行condition1 desc;order by condition1 asc, condition2 asc;按条件1和条件2降序的规则,优先执行condition1 asc;order by condition1 desc, condition2...原创 2019-07-04 15:17:25 · 7953 阅读 · 0 评论 -
Qt隐藏标题栏和隐藏QTableWidget表格中的线
this->setWindowFlags(Qt::FramelessWindowHint); /* 去除标题栏 */ui->tableWidget->setShowGrid(false); /* 去除QTableWidget组件中的线 */效果:原创 2019-07-05 12:26:36 · 11790 阅读 · 3 评论 -
设置自己的Git SSH key
文章摘自:https://www.cnblogs.com/chuyanfenfei/p/8035057.html$ git config --global user.name "judgecheng"$ git config --global user.name "judgecheng@email.com"结果:gitlab同上。...原创 2019-08-09 14:44:45 · 151 阅读 · 0 评论 -
NotePad++替换或删除一列内容
使用Shift+Alt+A组合键或Alt+A组合键再用鼠标左键拖动进行原创 2019-06-20 12:04:10 · 16767 阅读 · 0 评论 -
QStringList类
传送门:https://doc.qt.io/qt-5/qstringlist.htmlps:建议打开在线翻译。原创 2019-06-19 16:25:32 · 152 阅读 · 0 评论 -
单例模式总结
单例模式的简单理解:单例模式 只允许创建一个对象(只可以实例一次),因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如C/S模型中获取服务器接口等等。 通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便控制实例的个数并节约系统资源。如果希望某个类的对象只能存在一个,那么单例模式是最好的方案。【单例模式优缺点】【优点】1. 单例...原创 2019-02-21 12:39:55 · 416 阅读 · 0 评论 -
TCP与UDP的区别
TCP&UDP的区别 TCP:面向连接的、可靠的、字节流服务 UDP:无连接、不可靠、数据报服务 字节流服务:发送数据的次数与接收数据的次数没有关系。底层数据发送或接收时,数据有可能被分开或者合并(接收缓冲区和发送缓冲区) 数据报服务:数据段发送的次数和接收的次数相等,若果接收端一次未将一段数据报读取完,则UDP报文段中的数据丢失 TCP字节流...原创 2018-11-17 12:04:48 · 148 阅读 · 0 评论 -
TCP编程步骤概述
刚刚接触到服务器编程的知识,来温习一下,实现最基本的TCP服务器和客户端编程流程TCP协议是面向连接的、可靠的、字节流服务。 一、创建socket服务器基本流程:socket、bind、listen、accept、recv/send、close客户端基本流程:socket、connect、send/recv、close#include&l...原创 2018-11-13 17:14:31 · 3330 阅读 · 2 评论 -
套接字
奋青一枚,刚刚接触网络的知识,所以想在这里整理和搜集一下最基本的知识,望同行的各位大神多多包涵,感谢! 我们知道,在网络中,使用IP地址来标示一个主机。并且,一台机器也可以有多个网络接口。所谓的IP地址就是现在大家都用到的Internet的产物,专业点可以说是TCP/IP协议的产物(只有采用同种协议才能互相通讯),IP = Internet Protocol(网络协议),IP地...原创 2018-11-09 20:04:30 · 223 阅读 · 0 评论 -
使用零拷贝函数———sendfile函数以提高服务器性能
一、函数说明sendfie函数在两个文件描述符之间直接传递数据,其中的操作完全在内核中执行,从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,大大提高了效率,被称为零拷贝。sendfile函数定义如下:#include<sys/sendfile.h>ssize_t sendfile(int out_fd, int in_fd, off_t offset, size_t cou...原创 2018-12-04 17:52:04 · 398 阅读 · 0 评论 -
TCP通信 —— 实现线程池与多个客户端进行通信
直接上代码,简单粗暴: 服务器端:int clifd[10]; /* 存放客户端套接字的数组 */sem_t sem; /* 信号量 */pthread_mutex_t mutex; /* 互斥锁 */void initCli() /* 初始化 */{ int i = 0; for(; i < 10; ++i) { clifd[i] = -1...原创 2018-11-28 12:12:09 · 1580 阅读 · 0 评论 -
epoll_event结构体
epoll_event结构体一般用在epoll机制中,其定义如下:struct epoll_event{ uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */} __attribute__ ((__packed__));typedef union epoll_dat...原创 2018-12-13 23:08:10 · 23199 阅读 · 3 评论 -
Linux高性能服务器——I/O复用之select
I/O复用可同时监听多个文件描述符发生事件,很大程度提高了程序的性能。I/O复用适用的场合一般有如下几点:客户端程序要同时处理多个socket; 客户端程序要同时处理用户输入和网络连接。如聊天室程序; TCP服务器同时监听socket和连接socket。如服务器连接负载均衡; 服务器要同时处理TCP请求和UDP请求。如回射服务器; 服务器需要同时监听多个端口,或者处理多种服务。如x...原创 2019-01-21 15:18:28 · 401 阅读 · 0 评论 -
signal函数——自定义信号处理方式
1. 信号 信号(signal)是一种通知进程已经发生某种事件的机制。例如,在终端输入Ctrl+C中断正在运行的进程,则就会触发SIGINT的信号发送给该进程。进程如何处理信号有三种选择。1)忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。2)按系统默认处理方式。3)提供一个函数...原创 2019-01-22 19:26:56 · 8188 阅读 · 0 评论 -
TCP协议之三次握手四次挥手及TIMEWAIT状态
1. 简单介绍TCP协议通信连接 传输层协议主要分为TCP和UDP两个协议。UDP是无连接、不可靠的数据报服务。而TCP是面向连接的、可靠的字节流服务。使用TCP协议通信的双方必须先建立连接,然后才能开始数据的传输。并且通信的双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,交互性的工作只需要一次连接即可满足。完成数据交换之后,通信双...原创 2019-01-23 12:10:05 · 377 阅读 · 0 评论 -
互斥锁、读写锁和自旋锁的区别
读写锁特点: 读写锁有三种状态:读加锁状态、写加锁状态和不加锁状态 只有一个线程可以占有写状态的锁,但可以有多个线程同时占有读状态锁,这也是它可以实现高并发的原因。当其处于写状态锁下,任何想要尝试获得锁的线程都会被阻塞,直到写状态锁被释放;如果是处于读状态锁下,允许其它线程获得它的读状态锁,但是不允许获得它的写状态锁,直到所有线程的读状态锁被释放;为了避免想要尝试...原创 2019-02-14 18:04:25 · 10074 阅读 · 0 评论 -
Linux高性能服务器——I/O复用之poll
I/O复用可同时监听多个文件描述符发生事件,很大程度提高了程序的性能。I/O复用适用的场合一般有如下几点:客户端程序要同时处理多个socket; 客户端程序要同时处理用户输入和网络连接。如聊天室程序; TCP服务器同时监听socket和连接socket。如服务器连接负载均衡; 服务器要同时处理TCP请求和UDP请求。如回射服务器; 服务器需要同时监听多个端口,或者处理多种服务。如x...原创 2019-02-07 12:33:07 · 225 阅读 · 0 评论 -
完全二叉树与满二叉树的区别
满二叉树满二叉树:指深度为k且有2^k-1个结点的二叉树,如上图。 完全二叉树完全二叉树:当二叉树的深度为h时,它的h层节点必须都是连续靠左并不可隔开的(满二叉树也符合),并且1~h-1层的结点数都达到最大个数(即1~h-1层为一个满二叉树)。...原创 2019-02-21 21:16:43 · 31437 阅读 · 5 评论 -
C++哪些函数不能声明为虚函数
什么样的函数不能声明为虚函数?不能被继承的函数。 不能被重写的函数。1)普通函数普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。而多态体现在运行时绑定。通常通过基类指针指向子类对象实现多态。2)友元函数友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。3)...原创 2019-02-25 11:37:29 · 2241 阅读 · 2 评论 -
Linux下进程与线程的区别及优缺点
进程是程序执行时的一个实例,程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是系统进行资源分配和调度的一个独立单位。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。进程存在着很多缺陷,主要集中在两点:(1)进程只能在同一时间干一件事情,如果想同时干两件事或多件事情,进程就无能为力了。(2)进程在执行的...原创 2019-02-14 14:53:30 · 553 阅读 · 0 评论 -
总结迭代器失效的几种情况
迭代器失效一般分为三种情况(根据底层数据结构):数组型 链表型 树型数据结构。 数组型数据结构:该数据结构的元素是分配在连续的内存中,insert和erase操作,都会使得删除点和插入点之后的元素变动位置,所以,插入点和删除掉之后的迭代器全部失效,也就是说insert(*iter)和erase(*iter)之后进行iter++是错误的。解决方法:erase(*iter)的返回值是...原创 2019-02-25 17:05:39 · 3017 阅读 · 0 评论 -
UDP编程步骤
1. 概述UDP提供的是无连接、不可靠的数据报服务。在传输过程中数据可能会丢失。我们只有通过在应用层进行正确的控制才能修复在传输层上存在的缺陷。因此,需要我们编写可靠的UDP应用程序。UDP客户端与服务器交互的步骤如图:标题UDP客户端与服务器交互步骤及涉及到的系统调用 使用UDP协议进行通信时,客户端并不需要与服务器建立连接,只需要通过sendto系统调用...原创 2018-11-17 13:42:50 · 3454 阅读 · 0 评论