- 博客(43)
- 资源 (6)
- 收藏
- 关注
原创 Mybatis框架中的foreach标签解析
这样就完成foreach标签的初始化,当系统执行的时候就需要组装SQL语句信息,这里还是apply方法,其中参数为传入的上下文信息。如果是foreachNode则会预填充很多的参数及SQL语句以及展开的参数信息。因为用户上下文(符号表)更新了,所以这里相应进行了处理。
2025-01-31 16:46:12
476
原创 Mybatis动态标签解析
SQL语句是追加到最终执行的语句了,但还有预填充的值,这个该如何处理呢?BindingTokenParser解析就是将预填充参数写入到最终参数中。当执行结果完成后如何影响生成的SQL语句呢?如果是一个动态的语句,解析完成后追加SQL。如果是foreachNode则会预填充很多的参数及SQL语句以及展开的参数信息。ExpressionEvaluator:实际解析表达式结果。OgnlCache:用于缓存表达式解析结果。# 动态标签解析与执行。
2025-01-12 10:37:34
207
原创 Python语言特性:如何自定义dict
如何自定义容器类型,那么我们就需要考虑类似于标准容器类型是如何实现的?我们可通过继承标准字典类型的基类来实现重载。官方文档有描述(见https://docs.python.org/3/reference/datamodel.html?emulating-container-types#object.__delitem__), 比如字典类型就是继承了MutableMapping基类,我们自定义字典类...
2019-10-20 08:44:23
489
原创 自制ORM
model里面的成员都是全局变量model里面为全局变量,以便于再未初始化时可以获取该类的成员,将query、filter方法里面的参数设置为model.field,这样就可以获取该对象的表达式。如:session.query(TestTable).filter(TestTable.number == item. number)通过查找TestTable类获取该类的所有字段,可以重载T...
2019-10-16 14:07:29
210
原创 Python 打包说明
cxfreeze打包过程中最好通过setup.py来进行打包,打包的python程序需由模块+单个文件方式进行组织,否则会出现导入错误(ImportError),打包的setup.py配置如下:# coding=utf-8from cx_Freeze import setup, Executable# python setup.py buildincludefiles = ['RE...
2019-08-05 12:02:26
285
原创 Python语言特性:迭代器
List列表Python中如:List、Set、dict等容器都支持元素遍历操作,这些遍历操作中都会采用for x in list类似访问形式。这些访问形式的实现就采用了迭代器,实现迭代器可以显示使用yield关键字产生,也可以采用类重载默认方法__iter__函数的形式来实现,如未实现该方法则判断是否重载__getitem__方法。__iter__与__next__Iterable接...
2019-02-17 18:21:14
670
原创 C++ 11学习笔记之右值引用
l 左值与右值的区别C++中左右值的区分标准为:是否能够取地址,如果能取地址则为左值,否则为右值。左值:具名变量、对象;右值:C++11中将右值分为:将亡值(xvalue,expiring value)和纯右值(prvalue,pure value),纯右值:非引用返回的临时变量、原始字面量、运算表达式产生的临时变量和lambda表达式;将亡值:与右值引用相关联的表达式,如将被移动的对象,T&a...
2018-07-02 11:46:37
228
原创 Moonsharp学习笔记
类共享访问机制Moonsharp为C#版本的lua运行库,通过该库可实现lua在C#上的个性化,共享类实现如下: class MyClass { public int value; public MyClass(int i) { value = i; } public int add(int num) { return...
2018-06-29 22:48:48
1357
2
原创 解析C#中reference与out关键字
C#中数据类型分为两种:值类型和引用类型,值类型为:基本类型(枚举、数值、布尔)、String、Struct类型,而其他均为引用类型。在引用类型中,reference标注是否对该类型无影响呢?测试程序如下: class A { public A() { Console.WriteLine("A::A()"); }
2018-01-14 19:05:46
2640
原创 python 爬虫总结
最近写了一些爬虫,中间前前后后遇到不少坑,部分总结如下:1. 请求数据头的设置:User-Agent,如不进行主动设置,服务器可能就拒绝服务。2. Http字段Referer:该字段表明本次请求的上一次请求页面,有些链接过来的请求需要填充该字段。3. Cookie:每次请求的服务器状态保存。4. Host:服务器跳转过程中会修改该字段,我们需
2018-01-09 17:16:25
906
原创 Sqlalchemy 乱码解决方法
这几天遇到一个问题:通过Sqlalchemy将数据存入mysql时出现了乱码,结合网上的解决方案,汇总如下:1. 设置引擎编码方式为utf8。engine = create_engine("mysql+pymysql://root:123456@192.168.0.1:3306/test?charset=utf8",echo=True,encoding='utf-8',convert_un
2017-12-11 13:03:45
8318
1
原创 学习yield关键字
当使用yield关键字时,这就意味着该函数返回的是一个迭代器(iterator),不用自己维护一个迭代器内部的状态管理(比如C++中的itereator,或实现C#中实现的接口IEmuerator),其使用模式如下:yield return ;yield break;其中第二种用于for循环终止。这样的模式也就实现了Linq的查询,但注意yield使用要求如下:1. 迭代
2017-10-01 09:59:57
229
原创 C#调用C++函数
C#主要通过命名空间System.Runtime.InteropSerivces中的关键字DllImport关键字来实现调用C++函数,参数的引用传递则通过序列化来实现(ref/out关键字及IntPtr指针类型),结构体的序列化采用StructLayout标签。1. 使用DllImport关键字来调用C++函数,所声明的函数必须为static exten类型:[DllImport("us
2017-09-27 12:29:01
866
原创 Windows交互服务
在Windows中服务与桌面分别位于不同的会话中,服务与桌面交互主要有以下方法:1. 在用户会话中创建进程,服务与该进程交互,实现服务与桌面交互。这种方法可以实现复杂的交互,但首先需要解决的是获取当前用户的会话,利用CreateProcessAsUser函数来创建进程。2. 通过函数WTSSendMessage实现弹窗提醒。这里将展示第一种方法,在创建服务函数CreateServi
2017-05-17 23:15:02
608
原创 sharepoint 2013 安装问题记录
独立安装SharePoint2013碰到的"SDDL"问题及解决方法参考 http://www.cnblogs.com/huaen/p/3770297.htmlException: System.ArgumentException: TheSDDL string contains an invalid sid or a sid that cannot be translated.
2017-04-12 14:32:59
1097
原创 标签与模板的应用
C#支持标签操作,当与模板及类型反射结合时,具有很大的实用价值。这里介绍一个典型的数据库操作应用,编写一个通用的数据库操作ORM,方法如下:1. 通过反射获取模型类中的成员信息,使用Type类实现;2. 通过标签获取该模型类与数据库之间的关系,使用AttributeUsage实现;3. 通过模板实现数据库表之间的操作,利用数据库操作基类DbDataRead
2017-02-11 14:25:11
315
原创 API函数拦截
在Windows中,我们有时需要拦截系统提供的API来实现某些特殊的功能,如针对不同的进程实现API权限控制或者监听用户输入输出,而API函数拦截就是实现这些功能的基础。其通过将系统函数替换为我们提供的函数,当进程内调用该函数时,系统自动调用我们替换后的函数,这样我们就可以实现不同的返回结果,但注意的是需要与系统函数相同的参数签名,否则会引起进程崩溃。关键技术点如下:1) 根据MSD
2016-12-26 11:18:44
897
原创 远端线程注入
在编写进程注入程序中最常见的部分就是远端线程注入:将本地的程序(一般为动态链接库)注入目的进程,以实现本地程序在目的进程空间执行。这里面有两个关键点:1) 远端进程中创建远端线程在Windows中提供对应的API(CreateRemoteThread)来创建远端线程,远端线程执行的函数必须为目的进程空间,但进程地址空间独立,一般选择为系统默认函数以此函数为基点运行我们的程序,这里选择加载
2016-12-26 11:16:04
325
原创 JSP中的内容布局
在开发前端网页过程中,网站一般都有一个模板页,用来保存整个网站最基本的风格,而其它网页都在这个风格上进行修改。在JSP中可通过tag来实现此项功能。在WEB-INF/tags/目录下新建一个base.tag的模板页面用来保存新创建的模板:${num}在这个模板中我们定义了两个可替换的部分:header,footer;一个变量num。子页面
2016-09-04 10:17:50
13075
1
原创 前端联想下拉框的实现
当用户输入字符时,前端可自动联想出用户输入的字符,下拉框可以增加界面的友好性,这种提示功能可通过开源框架typeahead来实现。首先该功能需要包含以下JS文件:假设前端的下拉框html代码如下:Suggestion JS初始化代码如下:var bestPictures = new Bloodhound({ datumTokenizer: Bloodhound
2016-07-30 15:13:51
5645
原创 C# 中的泛型与重载
C#中如泛型与重载有相同类型(类型等价),普通函数会优先调用,而且在决议过程中,泛型函数中的where条件未计入考虑。测试程序如下:class A{ public override string ToString() { return "Class A"; } } interface ITest {
2016-07-28 17:20:34
2061
原创 C# 反射功能
C#中的反射使用主要集中在System.Reflection命名空间中,通过获取对象的属性和方法并创建对象来调用对应的函数等功能,方法主要集中在如下类:MethodInfo:获取类的方法Type:获取类的类型ConstructInfo:获取该类的构造方法用于创建对象。完整的示例如下:class A { public void TestMethod1(st
2016-04-16 12:21:10
335
原创 VS2010 Coredump文件生成
在VS2010中系统通过调试产生的exe文件,通过项目属性->调试->启用非托管代码调试功能来调试程序。生成exe后,如出现异常终止,通过任务管理器创建转储文件:然后通过VS2010打开该转储文件,点击调试就会看到异常的代码了。
2016-04-14 09:08:02
1520
原创 MVC连接SQL Server2008遇到的问题
登录报错:异常错误:无法打开登录所请求的数据库 "db_test"。登录失败。用户 'CCB-PC\CCB'登录失败。创建一个用户,Integerated Security:Yes:Windows当前用户登陆认证;No:用户名密码认证设置用户名、密码中注意取消密码设置策略,选择用户SQL身份验证登录。设置连接字符串
2016-03-10 14:48:13
875
原创 C#中的域与属性
C#中类成员变量的定义分为两种:域(field)与属性(property),属性为公有变量,以get,set访问器进行访问,域多为私有变量,非get、set访问器进行访问,如以下类的的域为成员name,而属性为val. class Customer { #region fields public string name; #endregion #
2015-11-09 08:30:32
505
原创 EC2 上部署Django应用
在amazon EC2上创建一个Ubuntu 14.04实例后,配置网络安全访问规则后,通过命令:ssh –i xxx.pem ubuntu@xxxx.amazonaws.com登录主机。1. 安装django登录完成后,开始安装pip,通过pip来安装Django应用:sudo apt-get install python-pip 安装Django 时,需要检查下载的
2015-10-27 22:04:07
2427
原创 C#与IronScheme交互
IronScheme为C#版本的Scheme编译器,通过它可以实现scheme与C#之间的相互调用,scheme编写为库,C#直接调用scheme库函数,这样就可以动态加载scheme代码,完成调用。Scheme也可以调用C#中的库函数或自定义类,具体方法可见官方文档。下面讨论的是C#调用scheme函数。1. 编写scheme库函数;Define a function wr
2015-10-20 12:54:44
886
原创 添加Linq支持
C#中添加Linq支持,只需添加一个迭代器就完成支持。迭代器模式是面向对象语言一个常见设计模式,C#中无需像C++那样维护一个内部状态,通过关键字yield模式来实现,编译器通过自动生成一个内部类来维护迭代器中的状态。测试程序如下:public class EYield : IEnumerable { public IEnumerator GetEnumerator()
2015-09-09 10:07:14
644
原创 协变(Covariance)与逆变(Contravariance)
协变与逆变是类型系统中一个常见的问题,基类与子类之间类型变换时的定义要求。协变:模板参数实例化中的子类赋值给基类,保留类型的顺序,从具体类型到抽象类型。IEnumerable base =IEnumerable 逆变:与协变相反,基类赋值给子类,从抽象类型到具体类型。 IEnumerable derived =IEnumerable
2015-09-02 18:20:48
615
原创 Linq 延迟执行
使用Linq时,其中一个重要概念就是延迟执行,所有的谓词求值需要等到触发时才会被调用。在声明时,它们是不执行的,除非调用Lambda表达式,造成其中的代码开始执行,否则不会被执行。如果Lambda表达式执行的代价比较高(如调用数据库,密集计算等),那么为了优化代码,通过使用”ToXXX”方法来转换为集合方式,减少Lambda表达式的执行。但转换后会造成整个结果都加载到内存(在此之前可能驻留在一个数
2015-08-29 13:51:32
431
原创 模板约束
与C++模板不同,C#模板增加了对于泛化类的约束问题,泛化类约束共计4中类型:基类约束:要求泛化类必须继承至某个基类。接口约束:要求泛化类必须实现某个接口。构造函数约束:要求泛化类必须提供默认的构造函数。值/引用数据类型约束:要求泛化类只能为值类型或引用类型。1. 基类约束,当出现多个约束时,基类约束必须放在最前面,基类约束中的基类不能是sealed class(密封类)和非值
2015-08-20 09:40:09
1265
原创 C#中的装箱与拆箱
C#中数据类型分为两种:数值类型和引用类型,两种类型相互转换过程中就涉及到装箱与拆箱操作,当数值类型转换为引用类型就称之为装箱,相反过程为拆箱。装箱操作为:1. 在堆上分配一块内存,用于保存数值类型中的数据。2. 将数值类型中的数据复制到目的内存中。3. 引用变量指向该内存位置。装箱操作是一个隐式操作,拆箱操作为一个显示操作,需要进行类型的强制转
2015-08-14 10:23:54
453
原创 C#判断对象相等
C#语言中,由于内存为系统自动管理,且重载Equals方法形参为Object基类,加上C#建议实现GetHashCode方法来加快判断,这样在判断相等方面就多了几步:1. 判断两个对象是否对象相等;2. 判断两个对象类型是否相等;3. 判断两个对象GetHashCode方法是否相等;4. 判断基类对象是否相等;5. 判
2015-08-13 20:59:08
1197
原创 CSS学习笔记
列表样式list-stye:控制列表中图形样式,对齐方式背景颜色中有一个渐变指示:rgba()padding属性:元素离边框的距离 块(可定位)元素:段落、表格、div;盒子模型:边框与边框之间的距离margin:两个相邻的外边距连接一起时,两者之间的距离最大为边距非两者之和 定位:进行位置定位时,不考虑盒子中的边距问题。普通流:浮动流:绝对定位:
2015-08-03 11:22:50
269
原创 C#中的多态特性
C#中的多态特征与C++类似也存在相同的隐藏与运行时多态,但在C#中,隐藏特征需要通过关键字显示指明。在C#中,多态关键字有三个:virtual: 如基类方法增加该关键字,则表明子类可重写此方法,重写分为两种:隐藏和多态。new: 隐藏此方法,当进行类型赋值”slice”特征时,不进行多态调用,默认方式。override: 重载(扩展)此方法,实现虚表多态性。
2015-07-19 11:34:31
943
原创 CC2530 事件轮询流程
CC2530芯片中的操作系统抽象层(OSAL)是一个多任务操作系统,在开发时首先需要将任务静态添加至系统进行编译,当任务执行后会产生对应的事件,当系统初始化时,需要初始化新添加的任务:void osalInitTasks( void ){ uint8 taskID = 0;//这里可以看出系统最多有256个任务 tasksEvents = (uint16 *)osal_mem_
2015-07-11 09:09:24
1205
原创 Android 触屏画图
Android系统中触屏画图中主要需要解决以下问题:1. 画图的视图,在哪上面画?2. 怎么画?3. 画的位置?Android官方文档描述画图需要自定义视图(Custom View),通过重载OnDraw解决画的内容,OnMeasure处理画图的布局位置。自定义视图后,加入main.xml文件布局中,但加入布局需要在自定义视图中实现带有两个参数的构造函
2015-06-30 11:44:00
916
原创 C++ 中[]操作符重载
在实际程序中遇到一操作符问题,记录下来方便以后查询。在写HashTable数据结构中,遇到操作符[]重载问题,具体需求如下:1. a[x] = b; //如果a[x]为空,则添加记录2. b = a[x]; //如果a[x]为空,则提示出错对[]操作符重载之后发现根本不能解决问题,查找一些资料后发现该问题为重载后的读写问题,一个重载解决不了问题。上面两点展开如下:
2015-05-06 15:45:28
384
原创 CC2530中断处理方法
在CC2530手册中2.5小节总结了中断处理的一般步骤,其中涉及的名称如下:1. 清除中断标志位2. 全局中断标志EA,用于开启所有中断3. 设置特殊功能寄存器(SFR)中中断标志位4. 设置IEN0、IEN1、IEN2寄存器中对应的中断标志位,如睡眠定时器STIE。5. 编写中断向量及中断处理程序。在中断处理程序中,首先清除中断悬挂(pend
2015-04-21 12:50:51
6192
原创 COM学习笔记三--聚合
在开发过程中,当一个COM B需要调用另一个COM A时,这时有两种方法来实现该操作:包含,聚合。前一种直接保存A的对象指针,所有的操作均在B中进行封装,涉及到A操作方法,利用A对象指针完成调用;而聚合在初始化期间保存对象A的指针,在运行过程中,所有涉及到A操作的方法无需封装,直接调用A的方法,将对象A的指针直接暴露给用户,让用户自己调用。包含则只暴露给用户B对象的指针,聚合同时暴露给用户对象
2014-07-03 15:26:46
760
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人