- 博客(181)
- 资源 (3)
- 收藏
- 关注
原创 从网卡到应用层nginx,一个数据包经历了什么?
内容目录数据包从网卡到nginx从网卡到内存内存-网络模块-协议栈传输层应用层nginx处理socket套接字的流程下面进入nginx http请求处理的11个阶段处理请求的过程数据包从网卡到nginx本文将研究一个数据包从被网卡接收到流出应用层到底经历了什么,并探究在应用层nginx的处理流程。**注:**本文只讨论物理网卡,暂不涉及虚拟网卡。从网卡到内存1: 数据包从外面的网络进入物理...
2018-11-07 20:07:12 4372 2
原创 N皇后问题的c++解法
N皇后问题: 国际象棋中皇后的势力范围覆盖其所在的行、列以及两条对角线,现在考察如下问题:如何在n x n的棋盘上放置n个皇后,使得她们彼此互不攻击 对于任何整数:n>=4,这就是n皇后问题。我们常说的8皇后问题也就是n为8的时候 首先,讲一讲思路,大致思路就是:我们把n个皇后分别放在n行中的第一个位置,然后挨行试探,回溯 譬如,第一个皇后在第一行第一列,试探下一行的皇后,将其放在不会与之前
2017-05-05 13:04:33 16915
原创 libev源码解读
1、源码: 源码参见官网或者我的github上 2、安装使用: 安装与基本使用参见我的另一篇博客:传送门 3、架构 Libev通过一个 struct ev_loop结结构表示一个事件驱动的框架。在这个框架里面通过ev_xxx结构,ev_init、ev_xxx_set、ev_xxx_start接口向这个事件驱动的框架里面注册事件监控器,当相应的事件监控器的事件出现时,便会触发该事件监控器的处
2016-12-23 17:06:02 4110
原创 几种典型的服务器网络编程模型归纳(select poll epoll)
1、同步阻塞迭代模型 同步阻塞迭代模型是最简单的一种IO模型。其核心代码如下:bind(srvfd);listen(srvfd);for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(clifd,buf,...); //从客户端读取数据 dosomthingonbuf(buf); write(clifd,
2016-12-17 10:52:17 9886 5
原创 Spark算子介绍
Spark对RDD的操作可以整体分为两类: Transformation和Action转换操作(Transformation) (如:map,filter,groupBy,sortBy,join等),转换操作也叫懒操作,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到转换操作时只会记录需要这样的操作,并不会去执行,需要等到有执行操作的时候才会真正启动计算过程进行计算。 Transformation算子根据输入参数,又可细分为处理Value型和处理Key-Value型的。
2021-11-16 09:59:18 413
原创 python闭包与装饰器
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。——维基百科def make_printer(msg): def printer(): print msg # 夹带私货(外部变量) ...
2019-05-17 15:29:15 564
转载 Linux源码编译三步曲,分别发生了什么
目录configuremakemake installconfigureconfigure脚本生成makefile文件,提供给make工具使用执行configure脚本时,configure会结合用户通过命令行指定的选项以及各个Makefile.in模板文件来生成makefile文件congigure常用选项如下: --help:获得其支持使用的选项 --prefix=/PATH/...
2018-11-09 00:32:16 1272
转载 四层负载均衡与七层负载均衡的区别
https://zhuanlan.zhihu.com/p/34904010https://www.jianshu.com/p/9826d866080a现有的负载均衡分层所谓四层负载均衡就是使用IP加端口的方式进行路由转发;七层负载均衡一般是基于请求URL地址的方式进行代理转发。同理,还有基于MAC地址信息(虚拟MAC地址到真实MAC地址)进行转发的二层负载均衡和基于IP地址(虚拟IP到真...
2018-11-08 16:14:32 1110
原创 使用python批量导入csv、excel、txt格式文件到oracle数据库(python3x)
平时在工作中,往往需要把一些文件导入到数据库中使用,或者当操作系统打不开比较大的文件(譬如几个G的文件 windows就很难打开了)的时候,也可以利用数据库,方便的读取大文件中的数据。下面简单介绍下我平时使用的方法:1、相对较小的文件,使用python open该文件,再逐条取出数据,导入到数据库,简单粗暴,以这三种格式的文件举几个超简单的例子:excel文件:# -*- co...
2018-08-23 17:52:39 9360
转载 oracle merge into的用法
对一张表,在不同的条件下实现不同的操作(update/insert),在 oracle 中可以用 merge into ///////////////有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下: if ex...
2018-06-29 11:21:10 951
转载 Anaconda使用指南
一、为什么选择Anaconda? 1.1 什么是 Anaconda?Anaconda是专注于数据分析的Python发行版本,包含了conda、Python等190多个科学包及其依赖项。1.2 什么是 conda ?conda 是开源包(packages)和虚拟环境(environment)的管理系统。packages 管理: 可以使用 conda 来安装、更新 、卸载工具包 ,并且它更关注于数据科
2018-01-03 15:11:18 3328
转载 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
Spring Tool Suite: 报错信息The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path 好久不写Jsp,今天建立了一个Javaweb工程,并在eclipse中配置了Web容器Tomcat。原本开心的新建jsp页面,添加一个简单的Java类。可是,JSP页面顶端出现“红色”
2017-08-23 14:57:12 794
转载 PyQt5 与PyQt4的区别
1、不与 PyQt4 兼容 2、不再对Python老版本提供支持(Python 2.6 之前) 3、不再实现PyQt4不推荐的API接口PyQt5 不支持任何在PyQt4版本中标记为不推荐或舍弃的Qt API(如果有就会当Bug处理) 4、不再提供多版本API接口PyQt4 支持多版本的API(如QString ,QVariant 等) PyQt5 只支持最新的API版本(除QVarian
2017-08-17 09:49:34 6217 1
转载 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
JavaWeb: 报错信息The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path 好久不写Jsp,今天建立了一个Javaweb工程,并在eclipse中配置了Web容器Tomcat。原本开心的新建jsp页面,添加一个简单的Java类。可是,JSP页面顶端出现“红色”的报错信息:The
2017-08-09 09:31:00 429
转载 c++程序编译过程
编译主要分为4个过程: 预处理-编译优化-汇编-链接 1) 编译预处理 预编译程序完成的工作,可以说成是对源程序的“替换”工作。经过这个过程,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。 宏定义命令;例如#define 条件编译指令;例如#ifdef 头文件包含指令;例如#include 特殊符号;例如__LINE__,__FILE__ 预处理模块;例如#pragm
2017-08-07 11:02:24 570
转载 spring mvc架构
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 MVC模式实现了页面展示与业务逻辑向分离,这也是解耦的重要实现方式。由于mvc模式非常常用,当前基于M
2017-08-07 10:51:51 1367
原创 c++11:static_assert 与assert
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。assert分为动态断言和静态断言2种。c++0x引入了static_assert关键字,用来实现编译期间的断言,叫静态断言。 语法:static_assert(常量表达式,要提示的字符串); 如果第一个参数常量表达式的值为false
2017-08-04 17:20:35 18352 1
翻译 其他语言无法比拟的Python特性
Python有着丰富精巧的功能和技巧,会让你惊叹“哇!Python这么酷”。 下面看看python特有的一些brilliant的特性: 1、生成器 生成器是产生一个值的序列的对象,它可以用作迭代器,也就是可以用于for语句,或者用于next函数中来得到下一个值。 含有yield关键字的函数就是生成器,如:def fibonacci_generator(): a, b = 0, 1
2017-08-01 14:44:16 596
原创 博客嵌入音乐播放器
1、从网易云音乐找一首歌,譬如: http://music.163.com/#/song?id=4325063452、点击“生成外链播放器”3、复制iframe插件下面的html代码,粘贴到你的博客文本中即可 譬如复制:<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86
2017-08-01 09:23:57 2531
转载 JS和JSP的区别
最近很多同学在纠结于名词缩写之间的相似性,因此本人也来写一篇,讲讲JS和JSP的区别。SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。 后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。JSP全名为Java
2017-07-28 17:50:03 621
转载 windows下配置tomcat8.5
先说jdk的安装,因为tomcat运行需要: JDK下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装JDK:直接安装即可 配置系统变量: 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.8.0_101 #JDK安装路
2017-07-28 16:52:13 3796
转载 python增强的格式化字符串format函数
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱。语法: 它通过{}和:来代替%。映射示例:通过位置In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.format('kzc',
2017-07-25 09:19:29 346
原创 基于pyqt5+python3.4的简单界面小程序demo
任务: 今天有一个需求,是每天统计出参加银联扫码活动的商家信息,主扫的交易笔数,总金额,被扫的交易笔数,总金额,以及主扫+被扫的统计信息。 分析:首先要做个程序,每天跑一下就生成结果文件,或者直接显示出结果。涉及到的有: 1、使用cx_oracle查询,获取数据,数据存入本地文件或者显示到ui的文本框/标签中。 2、打算不再使用tkinter,转用很强大的qt库,pyqt5,来做界面 3、
2017-07-21 15:41:58 1698
转载 oracle存储过程语法与使用
oracle 存储过程的基本语法1.基本结构 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END;行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面
2017-07-11 18:50:04 2350
转载 从关系型数据库到非关系型数据库
最近在做cups海量数据的分析工作,遇到了大数据方面关系型数据库的种种不便,很简单的非关系型查询,在oracle等关系型数据库中都变的很麻烦,所以在大数据来临的时代,还是要学习nosql数据库的,这篇文章就介绍从关系型数据库到非关系型数据库的转变。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系型数据库的优点: 容易理解:二维表结构是非
2017-07-11 18:12:50 527
转载 where、having的用法与区别
1.where和having都可以使用的场景select goods_price,goods_name from sw_goods where goods_price > 100select goods_price,goods_name from sw_goods having goods_price > 100解释:上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情
2017-07-07 10:04:13 1458
原创 为oracle数据库新增表空间及用户
什么是表空间? 表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。 创建用户的时候需要指定默认表空间和temp表空间,主要是为了当该用户创建对象不指定表空间时使用默认表空间来存储对象, 而temp表空间是用户执行查询、排序、分组等操作时使用temp表空间来存储临时数据块。具体过程: 今天突然想到不能把所有数据都
2017-07-03 18:26:44 1698
原创 python3脚本使用sql loader批量导入字节文件并二次处理
由于使用cx_oracle连接oracle然后导入数据文件速度太慢(要导的数据有几百G),出于速度的考虑,选择了oracle自带的sql loader工具,使用python脚本写界面,与用户交互,然后使用system()去批量调用sql loader,对于导入失败的bad数据以及日志数据,我用了c++写了一个程序,把bad文件转换成了ok的数据,然后又写了一个脚本处理这些bad数据。 1、pyth
2017-07-03 14:46:55 5250
转载 c++构造函数的初始化列表
与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。 例如:struct foo{ string name ; int id ; foo(string s, int i):name(s), id(i){} ; // 初始化列表};初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数
2017-06-30 17:25:00 1790
原创 关于“ORA-01653:表xxx无法通过8(在表空间SYSTEM)扩展
今天把cups海量数据导入到新建的oracle数据库中的时候,出现了RT的错误,上网查查才知道是表空间数据太大了,达到默认最大32G了,所以需要给system表空间增加数据文件来扩充其,具体解决步骤如下: 1、查询所有表空间使用情况 使用DBA权限登陆,执行:SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",
2017-06-28 15:49:22 10893
原创 window批处理脚本学习使用:.bat .cmd文件编写
背景:由于之前用python写的数据库导数据的程序略慢,而cups要导入的数据又很多很多,考虑到时效的要求,准备用oracle自带的sql loader把海量数据导入,编写好sql loader的控制文件(一种导入规则文件)之后,在cmd下执行命令:sqlldr ora_name/ora_passwd@ora_ip/orcl control=bsa.ctl就能按规则调用sql loader工具,把海
2017-06-26 18:24:01 3010
原创 说说多线程(linux、windows/c c++ mfc python java多线程)
一直在使用多线程,也学习过很多linux线程进程方面的知识(APUE UNP),有mfc里包装好的多线程,有python程序里的多线程,但是没有好好归纳过,现在好好整理归纳下关于多线程的知识。 关于多线程、多进程,参考:多进程、多线程以及如何选择? 关于线程同步(互斥)的方式与对比,参考:线程同步常用方式与区别 关于同步机制常使用的互斥锁、自旋锁、信号量、读写锁、顺序锁等等,参考:锁的种类与特
2017-06-23 18:55:06 2388 1
原创 ORA-27101: shared memory realm does not exist
今天使用oracle sql developer连接远程数据库服务器后,又建立了一个连接,连接下本地的服务器,但是连接失败了,之后从本地sql plus登陆数据库时,出现:ORA-27101: shared memory realm does not exist的错误提醒,解决后特在此分享该方法:1、用CMD进入命令行2、sqlplus /nolog3、conn / as sysdba4、st
2017-06-23 14:34:57 3302
转载 锁的种类与特点
在Linux内核中,同步机制是一大特性。比较经典的有原子操作、spin_lock(自旋锁)、mutex(互斥锁)、semaphore(信号量)等。互斥锁和自旋锁的区别?
2017-06-21 20:08:49 7461
转载 MySQL与Oracle数据类型对照表
最近在把cups的mysql数据库渐渐转为使用oracle数据库,难免遇到很多数据类型转换的问题,具体细节还要实践验证
2017-06-21 12:51:16 1808
原创 线程同步常用方式与区别
在介绍线程同步/互斥之前,我们先要理解同步与互斥的概念,引用书上的解释来说明这2个概念: 1、线程(进程)同步的主要任务 在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是在急用临界资源时,如多个线程急用同一台打印机,会使打印结果交织在一起,难于区分。当多个线程急用共享变量,表格,链表时,可能会导致数据处理出错,因此线程同步的主要任务是使并发执行的各线程之间能够有效的共享资源和相互合
2017-06-20 14:02:12 7869
转载 多进程、多线程以及如何选择?
关于线程: 首先关于多线程多进程,看一张图: 基本上把线程,进程区别说清楚了提到线程,就不得不提线程同步的问题,我专门归纳了一篇文章: 线程同步常用方式与区别线程2个性质, 线程安全:概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 可重入:概念基本没有比较正式的完整解释,但是它比线程安全要求更严格。根据经验,所谓“重入”,常
2017-06-19 19:54:40 1478
转载 c++:尽量用new/delete代替malloc/free
在C语言中,我们已经熟悉利用malloc/free来管理动态内存,而在C++中,我们又有了新的工具:new/delete。你不禁会产生疑问—有了malloc/free为什么还要new/delete 呢?使用malloc/free和使用new/delete又有什么区别呢?首先来分析一下下面的代码片段:class Object{public:Object() {cout << "Hello,
2017-06-19 19:19:30 3777
原创 overload与override
先说overload,重载: 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual关键字可有可无。再说重写,override: 重写是指派生类函数重写基类函数,是C++的多态的表现,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual关键
2017-06-19 19:01:06 441
原创 c++浅拷贝与深拷贝
什么是拷贝构造函数? 首先,关于c++拷贝构造函数:拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。 对于一个类X, 如果一个构造函数的第一个参数是下列之一: a) X& b) const X& c) volatile X& d) const volatile X&且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构
2017-06-19 18:28:21 286
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人