Mryqu's Notes


  • 首页

  • 搜索
close

Joda-Time笔记

时间: 2013-12-01   |   分类: Java     |   阅读: 222 字 ~2分钟
Joda简介 Joda项目致力于为Java平台提供替代API的一些质量保证的基础库。包括如下子项目: Joda-Time -日期和时间库 Joda-Money -货币库 Joda-Beans -下一代JavaBeans Joda-Convert -字符串与对象转换库 Joda-Collect - 提供JDK或Google Guava没有的集合数据类型 Joda-Primitives -提供原始数据类型集合 Joda-Time简介 其中Joda-Time由于JDK自身时间日期API的不给力而被广泛使用,已经成为事实上的标准时间日期库。Joda-Time在JavaSE8将融入JDK API内,使用者可以使用java.time (JSR-310)内的API了。Joda-Time在时区、时间差和时间解析等方面支持多种历法系统,但仍然提供很简单的API。默认的历法是ISO8601标准,此外也支持Gregorian(现行公历、格里历)、Julian(儒略历)、Buddhist(佛历)、Coptic(科普特历)、Ethiopic(埃塞俄比亚历)和Islamic(伊斯兰历)历法系统。 为什么要使用Joda-Time(以下简称Joda)?考虑创建一个用时间表示的某个随意的时刻,例如2000年1月1日0时0分。如何创建一个用时间表示这个瞬间的JDK对象?使用java.util.Date?事实上这是行不通的,因为自JDK1.1 之后的每个 Java 版本的 Javadoc 都声明应当使用java.util.Calendar。Date中Date(intyear, int month, int date) 、Date(int year, int month, int date, inthrs, int min)、Date(int year, int month, int date, int hrs, int min,int sec)已经废弃、不建议使用,严重限制了您创建此类对象的途径。然而,Date确实有一个构造函数Date(long date),您可以用来创建用时间表示某个瞬间的对象(除“当前时间”以外)。该方法使用距离1970年1月1日子时格林威治标准时间(也称为_epoch_)以来的毫秒数作为一个参数,对时区进行校正。 那么Calendar又如何呢?可以使用下面的方式创建必需的实例: Calendar calendar = Calendar.getInstance(); calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0); 使用Joda,代码应该类似如下所示: DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0); 这一行简单代码没有太大的区别。但是如果使问题稍微复杂化,假设希望在这个日期上加上90天并输出结果。使用JDK,需要如下代码:
阅读全文 »

MySQL:清空具有外键约束的表

时间: 2013-11-20   |   分类: db+nosql     |   阅读: 43 字 ~1分钟
最近在MySQL Workbench上使用"TRUNCATE TABLE TABLE_E;“清空一个表时返回错误:Error Code: 1701. Cannot truncate a table referenced in a foreignkey constraint (yqutesting.table_f, CONSTRAINT table_f_ibfk_4FOREIGN KEY (old_id) REFERENCES yqutesting.table_e(ID))解决方法1: 删除约束 清空表 手工删除引用该表的记录 创建约束解决方法2: SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE TABLE_E; SET FOREIGN_KEY_CHECKS = 1; 参考: truncate foreign key constrained table

以管理员权限执行命令行

时间: 2013-11-19   |   分类: Tool     |   阅读: 3 字 ~1分钟
以管理员权限执行命令行,只需点击出Command Prompt的右键菜单,选择"Run asadministrator"即可。

[C++]不错的C++引用参数分析

时间: 2013-11-09   |   分类: C++     |   阅读: 19 字 ~1分钟
阅读了一篇不错的C++ 引用参数 深入分析,摘要如下: 把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制,在按值传递时,函数操纵的是实参的本地拷贝。 一、引用参数的三种常见用法: 需要改变实参的值,比如swap()。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。 向主调函数返回额外的结果。 向函数传递大型的类对象。 二、如果引用参数不希望在被调用的函数内部被修改,那么把参数声明为 const 型的引用是个不错的办法。 三、 我们可以声明任意内置数据类型的引用参数 四、引用参数还是指针参数 这两种参数都能够改变实参的值,也可以有效的传递大型类对象,怎么样决定参数该声明成哪种呢? 根本区别是:引用必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象;指针可以指向一系列不同的对象也可以什么都不指向。因为指针可能指向一个对象或没有任何对象,所以函数在确定指针实际指向一个有效的对象之前不能安全地解引用(dereference)一个指针。另一方面,对于引用参数,函数不需要保证它指向一个对象。引用必须指向一个对象,甚至在我们不希望这样时也是如此。 如果一个参数可能在函数中指向不同的对象,或者这个参数可能不指向任何对象,则必须使用指针参数 。 引用参数的一个重要用法是:它允许我们在有效地实现重载操作符的同时,还能保证用法的直观性。

[Git] 查看某文件历史记录

时间: 2013-11-09   |   分类: Tool   Git     |   阅读: 10 字 ~1分钟
在Git中查看某个文件历史记录,方式如下: git log [filename]:显示对该文件的提交记录 git log -p [filename]:显示对该文件的提交记录及每次提交增量内容 gitk [filename]:图形显示对该文件的提交记录及每次提交增量内容

Tomcat的会话持久化

时间: 2013-11-08   |   分类: Service+JavaEE   Web Application Server     |   阅读: 14 字 ~1分钟
《玩玩HTTP servlet和session资源监控器》提到我hello的一个web项目,刚开始我只是用监视器清除了Tomcat容器外部的文件资源,以为会话失效后Tomcat会自己清除会话属性,但后来发现想的太简单了。不但会话失效,并且重启Tomcat服务器,服务器端原来的会话及其属性都在,如果客户端浏览器的会话没有丢的话,刷新页面仍然可以获得以前的信息。原来Tomcat(起码5.x之后的版本)在默认的情况下提供了会话持久化这项功能,见$TOMCAT_HOME$/conf/context.xml:Tomcat的默认会话管理器是标准会话管理器(StandardManager),用于非集群环境中对单个处于运行状态的Tomcat实例会话进行管理。当Tomcat关闭时,这些会话相关的数据会被写入磁盘上的一个名叫SESSION.ser的文件,并在Tomcat下次启动时读取此文件。 默认只有在Tomcat正常关闭时才会保存完整的用户会话信息 默认保存于$CATALINA_HOME$/work/Catalina/[host]/[webapp]/下的SESSIONS.ser文件中 若是自定义的虚拟主机则保存在$CATALINA_HOME/work/Catalina/[host]/_/下的SESSIONS.ser文件中 如果不想再获得失效会话属性的话,解决办法为: 关闭Tomcat会话持久化功能。去掉context.xml中那句注释即可。 HttpSessionListener实现类的sessionDestroyed方法删除该会话所有属性。 参考 Apache Tomcat 5.5 Configuration ReferenceTomcat会话管理

[JavaScript] === 与 == 操作符的区别

时间: 2013-11-08   |   分类: FrontEnd     |   阅读: 27 字 ~1分钟
JavaScript中有两个等值比较操作符:严格相等===和宽松相等==。很多JavaScript指南都建议避免使用宽松相等,而是使用严格相等。 ===:只有在两个操作数的数据类型和值都相等的情况下才为true ==:用于比较两个操作数是否相等,这两个操作数的数据类型不一定要相等,只要进行数据类型转换后相等即为true 严格相等=== (严格不相等!==) 规则如下: 如果类型不同,就[不相等] 如果两个都是数值原始类型,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 如果两个都是字符串原始类型,每个位置的字符都一样,那么[相等];否则[不相等]。 如果两个都是布尔原始类型,两个值值都是true,或者都是false,那么[相等]。 如果两个原始类型值都是null,或者都是undefined,那么[相等]。 如果两个值都引用同一个对象(含数组和函数),那么[相等];否则[不相等]。示例: 宽松相等== (宽松不相等!=) 规则如下: 如果两个值类型相同,进行 === 比较。 如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: null与undefined是[相等]的。 如果字符串原始类型和数值原始类型进行比较,把字符串转换成数值再进行比较。 如果Boolean对象与其他类型进行比较,Boolean对象会转换成数值(true:1,false:0)再进行比较。 如果一个是对象,另一个是数值或字符串原始类型,把对象转换成原始类型的值再比较。对象利用它的toString或者valueOf方法转换成原始类型。JavaScript内置核心对象(例如Array、Boolean、Function、Math、Number、RegExp和String),会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。如果类型转换失败,则会产生一个runtime错误。 对象和原始类型比较,对象才会转换成原始类型。两个对象比较,如果两个值都引用同一个对象(含数组和函数),那么[相等];否则[不相等]。示例: 参考 MDN:Comparison Operators

玩玩HTTP servlet和session资源监控器

时间: 2013-11-07   |   分类: Service+JavaEE     |   阅读: 313 字 ~2分钟
WebListener是Servlet的监视器,它可以监听Http请求、会话生命周期事件等。其中包含如下接口: ServletContextListener:监视servlet上下文的初始化(启动Web应用的初始化过程)、销毁(关闭Web应用)。 ServletContextAttributeListener:监视servlet上下文属性的添加、删除和替换。 ServletRequestListener:监视Http请求的初始化(进入第一个servlet或过滤器)、Web应用对请求处理结束(离开最后一个servlet或过滤器)。 ServletRequestAttributeListener:监视Http请求属性的添加、删除和替换。 HttpSessionListener:监视Http会话创建和失效操作。 HttpSessionAttributeListener:监视Http会话属性的添加、删除和替换。最近hello一个Web项目,其中有个向导上传文件进行处理,文件被保存在tomcat的临时目录,处理后再删除。过段时间发现临时目录里有一些未删除的临时文件,应该是上传文件后,在处理结束前有一段时间未进行操作,会话失效,临时文件没有被删除。后来添加了一个MyResourceMonitorListener完成这些未处理临时文件的删除操作,解决了这个问题。代码如下: MyResourceMonitorListener package com.yqu.http.session; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class MyResourceMonitorListener implements ServletContextListener, HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent event) { trace("sessionCreated!"); } @Override public void sessionDestroyed(HttpSessionEvent event) { HttpSession session = event.getSession(); if (session != null) { String sessionId = session.getId(); trace("sessionDestroyed with sessionId=" + sessionId + "!"); MyUtil.cleanSessionResources(session); } } @Override public void contextDestroyed(ServletContextEvent event) { MyUtil.
阅读全文 »

用python分析FM代码和日志

时间: 2013-11-07   |   分类: Python     |   阅读: 187 字 ~1分钟
学python有一段时间了,学完不用,结果就是很快遗忘。这周分析一些FM代码和日志,终于弃Java转python,自己乐一下! filterDV t6Found=False with open('SASFinancialManagement5.4f.log', 'w') as fdst: with open('SASFinancialManagement5.4.log', 'r') as fsrc: for line in fsrc: if t6Found: if "DataValidation" in line: fdst.write(line) else: if "formSetId=436,formId=,tableCode=NewTable6" in line: t6Found=True if not fsrc.closed: fsrc.close() if not fdst.closed: fdst.close() calcDVDuration import re totalTime=0 with open('SASFinancialManagement5.4f.log', 'r') as fsrc: for line in fsrc: if "begin data validation at formSubScope for" in line: m = re.search('formSetId=.* ]', line) target = m.group(0) m = re.
阅读全文 »

Linux/Unix下显示二进制目标文件的符号表

时间: 2013-10-31   |   分类: C++     |   阅读: 53 字 ~1分钟
nm 查看二进制目标文件符号表的标准工具是nm,可以执行下列命令查看二进制目标文件(.o)/静态库(.a)/动态库(.so)的符号表: nm -g yourObj.o nm -g yourLib.a nm -g yourLib.so C/C++语言在C++编译器编译以后,函数的名字会被编译器修改,改成编译器内部的名字,这个名字会在链接的时候用到。例如std::string::size()经过修饰后是_ZNKSs4sizeEv。通过添加"-C"选项,可以对底层符号表译成用户级名称(demangle),具有更好的可读性。 以test.cpp为例: 将其编译后,通过nm查看符号表,带"-C"选项与否的结果如下: readelf 如果你的二进制目标文件(.o)/静态库(.a)/动态库(.so)是ELF(Executableand linkingformat)格式,则可以使用readelf命令提取符号表信息。 readelf -Ws usr/lib/yourLib.so 如果仅想输出函数名,可以通过awk命令进行解析: readelf -Ws test.o | awk '$4=="FUNC" {print $8}'; 以上面的test.o为例: 显示test.o的elf文件头信息: 显示test.o的符号表: 参考 How do I list the symbols in a .so file nm - Linux man page readelf - Linux man page
49 50 51 52 53 54 55 56 57

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%