-
Tomcat JULI 应用日志隔离原理解析
2019-07-02 03:35:10最近协助项目组部署 Tomcat 时遇到一种情况:同一 Tomcat 下多 war 包部署时,有一个简单的应用无法启动,所有日志渠道中都没有关于它异常信息,catalina 日志中只轻描淡写地说它部署失败了。在该应用的类路径下放置...最近协助项目组部署 Tomcat 时遇到一种情况:同一 Tomcat 下多 war 包部署时,有一个简单的应用无法启动,所有日志渠道中都没有关于它异常信息,catalina 日志中只轻描淡写地说它部署失败了。在该应用的类路径下放置一个 logging.properties 文件后,看到了完整异常,最终改正配置、重启得以成功部署。
笔者因此对 Tomcat 日志框架产生了几个疑问:
- 为什么 catalina 日志文件中没有具体应用的异常信息
- 如何让应用启动异常信息输出
- 应用类路径下的 logging.properties 和 Tomcat 的 conf 目录下的该文件的关系如何
- Tomcat 是如何做到应用日志隔离的
本场 Chat 将以笔者弄清楚上述疑惑的过程为背景,详细介绍 Tomcat 对 java.util.logging 的日志框架“偷梁换柱”的底层支撑:
- java.util.logging 原始包中的 LogManager
- Tomcat 的 JULI 是什么
- Tomcat 的 ClassloaderLogManager 是如何加载日志配置的
- ClassloaderLogManager 替换 LogManager 的巧妙过程
- 官方日志配置的几点建议
- 启示录:-D , Java 中让人叹为观止的一种发明
阅读全文: http://gitbook.cn/gitchat/activity/5cdc9882f3f5110cf3822c3f
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。
-
关于Fastjson 数组解析异常问题的排查
2020-05-09 14:48:31关于Fastjson 数组解析异常问题的排查 今日在使用字符串转json的时候,遇到问题,发现转换失败, 报错日志如下: com.alibaba.fastjson.JSONException: expect '[', but string, pos 8, line 1, column 9"G2京沪高速...关于Fastjson 数组解析异常问题的排查
今日在使用字符串转json的时候,遇到问题,发现转换失败,
报错日志如下:com.alibaba.fastjson.JSONException: expect '[', but string, pos 8, line 1, column 9"G2京沪高速" at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:1366) at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:932) at com.alibaba.fastjson.JSONArray.toJavaList(JSONArray.java:450) at com.hysm.service.impl.OtaProviderServiceImpl.getRoutePriceAndPath(OtaProviderServiceImpl.java:772) at com.hysm.service.impl.OtaProviderServiceImpl.getResultMessage(OtaProviderServiceImpl.java:187) at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
遂紧急排查问题,定位到报错代码如下:
JSONArray paths = json.getJSONObject("route").getJSONArray("paths"); List<Paths> pathsList = paths.toJavaList(Paths.class);
将原始字符串获取下来,线下测试确实无法转换。但是经过测试 发现 原来是获取高德路径规划接口的时候,高德返回参数值不规范。
接口连接:https://restapi.amap.com/v3/direction/driving
此接口的 toll_roal 如果为空则返回列表,有值则返回字符串。
大厂神奇的规范不深做吐槽。接下来有发现一个有意思的事情:
JSONArray paths = json.getJSONObject("route").getJSONArray("paths"); List<Paths> pathsList = JSON.parseArray(paths.toJSONString(),Paths.class);
此代码又可以正常运行!! why?
都是fastjson提供的方法,为什么会形成差异。带着问题进入源码,先看 JSONArray.toJavaList。
public <T> List<T> toJavaList(Class<T> clazz) { List<T> list = new ArrayList(this.size()); ParserConfig config = ParserConfig.getGlobalInstance(); Iterator var4 = this.iterator(); while(var4.hasNext()) { Object item = var4.next(); T classItem = TypeUtils.cast(item, clazz, config); list.add(classItem); } return list; }
关键代码是里面的 TypeUtils.cast()。
TypeUtils的代码比较丑,基本就是根据字段类型来进行值的转换。public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { if (parser.lexer.token() == 8) { parser.lexer.nextToken(16); return null; } else if (type == JSONArray.class) { JSONArray array = new JSONArray(); parser.parseArray(array); return array; } else { Collection list = TypeUtils.createCollection(type); Type itemType = TypeUtils.getCollectionItemType(type); parser.parseArray(itemType, list, fieldName); return list; } }
关键的地方来了:
public void parseArray(Type type, Collection array, Object fieldName) { int token = this.lexer.token(); if (token == 21 || token == 22) { this.lexer.nextToken(); token = this.lexer.token(); } if (token != 14) { throw new JSONException("expect '[', but " + JSONToken.name(token) + ", " + this.lexer.info()); } else { ObjectDeserializer deserializer = null; if (Integer.TYPE == type) {
很明显,此处的toll_road字段 因为定义的是List 所以在经过fastjson的jsonarray的list解析器的时候,发现值类型不匹配 抛出异常。 逻辑合理。
下面来看看JSON.parseArray(paths.toJSONString(),Paths.class); 这段代码的实现。
里面的方法实现:public static <T> List<T> parseArray(String text, Class<T> clazz) { if (text == null) { return null; } else { DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance()); JSONLexer lexer = parser.lexer; int token = lexer.token(); ArrayList list; if (token == 8) { lexer.nextToken(); list = null; } else if (token == 20 && lexer.isBlankInput()) { list = null; } else { list = new ArrayList(); parser.parseArray(clazz, list); parser.handleResovleTask(list); } parser.close(); return list; } }
发现最后进入的是 JavaBeanDeserializer 这个类。和上面的解析器不同。中间代码也是比较难看的类型比对,跳过。比对后进入ArrayListTypeFieldDeserializer。
关键代码如下:public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map<String, Object> fieldValues) { JSONLexer lexer = parser.lexer; int token = lexer.token(); if (token != 8 && (token != 4 || lexer.stringVal().length() != 0)) { ArrayList list = new ArrayList(); ParseContext context = parser.getContext(); parser.setContext(context, object, this.fieldInfo.name); this.parseArray(parser, objectType, list); parser.setContext(context); if (object == null) { fieldValues.put(this.fieldInfo.name, list); } else { this.setValue(object, list); } } else { this.setValue(object, (String)null); } }
进入parseArray 方法。
while(true) { if (lexer.isEnabled(Feature.AllowArbitraryCommas)) { while(lexer.token() == 16) { lexer.nextToken(); } } if (lexer.token() == 15) { lexer.nextToken(16); break; } Object val = itemTypeDeser.deserialze(parser, (Type)itemType, i); array.add(val); parser.checkListResolve(array); if (lexer.token() == 16) { lexer.nextToken(this.itemFastMatchToken); } ++i; }
重点来了,上述的
Object val = itemTypeDeser.deserialze(parser, (Type)itemType, i);
array.add(val);
他是先将list 实例话,在去获取里面的值,最后进行插入。而没有进行严格的类型校验。
这个做法可以说是比较灵活,但是实际使用过程中,因为定义的不规范可能又会引发其他更可怕的问题。 -
Hive数据仓库--HiveUDF异常解析与其中的坑
2016-11-11 16:43:50使用Hive进行分析的过程中遇到了这个异常的信息,一开始看到比较惊讶,因为感觉代码并没有什么不太合理的地方,不过还是抛出了一堆的异常信息,我把日志信息读了一下,发现导致最终异常的是FastJson在封装的时候找不...使用Hive进行分析的过程中遇到了这个异常的信息,一开始看到比较惊讶,因为感觉代码并没有什么不太合理的地方,不过还是抛出了一堆的异常信息,我把日志信息读了一下,发现导致最终异常的是FastJson在封装的时候找不到无参构造函数,虽然最终原因不是Hive引起的,但是上面的一堆异常也的确是唬人的。
异常信息
Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"sourceid":"4649475029B8","sourcelabelw":"[{\"Name\":\"XX\",\"Weight\":6},{\"Name\":\"XX\",\"Weight\":6}]"} at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:195) at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1556) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162) Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"sourceid":"4649475029B8","sourcelw":"[{\"Name\":\"XX\",\"Weight\":6},{\"Name\":\"XXX\",\"Weight\":6}]"} at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:550) at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:177) ... 8 more Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String cn.siti.main.MergeUDF.evaluate(java.lang.String,java.lang.String) on object cn.siti.main.MergeUDF@9fd062 of class cn.siti.main.MergeUDF with arguments {[{"Name":"XXX","Weight":6},{"Name":"XXX","Weight":6}]:java.lang.String, XXXX,7:java.lang.String} of size 2 at org.apache.hadoop.hive.ql.exec.FunctionRegistry.invoke(FunctionRegistry.java:1243) at org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge.evaluate(GenericUDFBridge.java:182) at org.apache.hadoop.hive.ql.exec.ExprNodeGenericFuncEvaluator._evaluate(ExprNodeGenericFuncEvaluator.java:166) at org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:77) at org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:65) at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:79) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793) at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.internalForward(CommonJoinOperator.java:638) at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genAllOneUniqueJoinObject(CommonJoinOperator.java:670) at org.apache.hadoop.hive.ql.exec.CommonJoinOperator.checkAndGenObject(CommonJoinOperator.java:754) at org.apache.hadoop.hive.ql.exec.MapJoinOperator.processOp(MapJoinOperator.java:242) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793) at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:92) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793) at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:540) ... 9 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.hive.ql.exec.FunctionRegistry.invoke(FunctionRegistry.java:1219) ... 23 more Caused by: com.alibaba.fastjson.JSONException: default constructor not found. class cn.siti.domain.TagInfo at com.alibaba.fastjson.util.JavaBeanInfo.build(JavaBeanInfo.java:212) at com.alibaba.fastjson.parser.ParserConfig.createJavaBeanDeserializer(ParserConfig.java:486) at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:433) at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:288) at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:651) at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:630) at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:625) at com.alibaba.fastjson.JSON.parseArray(JSON.java:491) at cn.siti.main.MergeUDF.evaluate(MergeUDF.java:21) ... 28 more
在使用的过程中请注意这一点,Hive中报错的时候,先看日志,从上往下找最终导致异常的地方,然后进行解决。
此外有时候会遇到一个很无奈的问题FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
本次运行中出现了这样的问题,我这边造成问题的主要原因是:nodemanager停止了,然后任务分发的时候出现问题。There are 3 datanode(s) running and no node(s) are excluded in this operation
重新启动yarn即可
转载注明出处:Hive数据仓库--HiveUDF异常解析与其中的坑
-
IOS 中json解析异常Domain=NSCocoaErrorDomain Code=3840之诡异事件
2020-12-12 20:04:39Quick 支付需要游戏(Unity)传入一些数据到原生OC中,格式是json,在OC中打印的日志看着数据是没问题的,但是解析json却一直显示失败 。问题最终还是解决了,用倒推法给大家说一下解决的思路。 场景重现 下面代码是OC...前言
就在今天遇到一个很诡异的技术问题,Unity调用Quick苹果SDK支付。Quick 支付需要游戏(Unity)传入一些数据到原生OC中,格式是json,在OC中打印的日志看着数据是没问题的,但是解析json却一直显示失败 。问题最终还是解决了,用倒推法给大家说一下解决的思路。
场景重现
下面代码是OC中定义的支付方法,void *payData是接Unity中传过来的支付json数据,当用户点击支付按钮的时候,Unity把支付的数据传到IOS 原生OC中。没有了解过的可以看下之前写过的文章 :Unity接入ios SDK(小7手游)没有你想的那么难。
//支付 void SDk_pay(void *payData){ NSLog(@"SDk_pay"); //控制台展示这段日志说明Unity调用到了OC的支付方法 NSString *idList = [NSString stringWithUTF8String:payData]; NSLog(@"获取的支付数据=======:%@",idList); //将解析得到的内容存放字典中,编码格式为UTF8,防止取值的时候发生乱码 NSData *jsonData = [idList dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; if(err) { NSLog(@"json解析失败:%@",err); return; } }
当点击完成支付按钮后,控制台显示Json解析异常日志如下所示:
json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 "Unescaped control character around character 206." UserInfo={NSDebugDescription=Unescaped control character around character 206.}
解决问题思路和过程
上面解析Json异常去Google 上去搜了一下,根据搜索内容的解释,出现这个问题的原因就是:返回的Json字符串里面有换行符、空格。既然知道是什么原因导致的,那么我们一步步分析一下。
NSLog(@“SDk_pay”);控制台有这么一段日志,说明Unity调用OC的支付方法是没问题的,成功调用到了。再看下一个日志点,获取Unity传过来的数据 idList ,传过来的数据字段如下代码:
看着上面显示的日志乍一看返回的数据都是正常,没有什么特殊啊?但是异常报错不会错的。于是把我上面的Json数据放到了格式化工具上查看,果然发现了问题所在。Json中 orderid字段多一个空格(截图中小红点就是一个空格)。
既然知道是订单号的问题,我们来倒推一下,订单号(orderid字段)是拼的加密字符串由游戏服务器原样返回,其中一部分数据取自客户端的ChannelId。我把代码贴出来乍一看还是没问题吧。
其实所有问题的关键都指向了return MakeStringCopy(“10184”)这货。最开始我定位到GetSdkChannelId()方法里了,但是怎么看怎么也不像有空格的样子啊?于是我尝试用光标一点点试看有没有空格,一试果然试出问题了。
下面截图就是我从有问题的那段注释里copy出来放到VSCode里面,一看10184后面已有一个空格的。当时我都惊了,同一个字符串在Xcode里面显示的正常,在VSCode里面却多出一个空格。
Xcode(11.5版本)还有这个操作? 由于我不是专业搞IOS的,我查了资料还有询问了一些写IOS的朋友。最终结论基本上都是Xcode编译器自带的Bug。把空格去掉继续跑程序,一点事都没有。事情就这样解决了,你学废了吗?
结尾
如果文章对你有帮助留下一个赞呗,你的支持是我继续写下去的动力,如有不对劳烦大家多多指正。
-
springMVC解析带有中文字符的json数据异常
2014-12-19 09:44:00最近开发遇到一个bug,异常日志为:nested exception is org.codehaus.jackson.JsonParseException: Invalid UTF-8 start byte 0xbc,从日志上可以看出,springMVC在解析json数据时,发现json数据不是utf-8的格式,... -
前端JS解析超长的数字异常的问题。
2017-07-27 15:23:53问题:前段时间开发遇到了一个很奇怪的问题。创建订单之后返回给前端一个订单编号,订单编号是一个超长的数字。前端用订单编号查询订单信息的时候经常出现错误的订单信息,根据日志判断是前端传给后端的订单号是不... -
航海日志查看17夏活boss点战斗详情数据异常
2020-11-28 05:04:42ve met:查看17夏活boss点战斗详情数据解析异常 <p>{"version":"2.1","type":"Boss","map":[39,7,21],"desc":null,"time":1504857411822,"fleet":{... -
记一次java中ConcurrentModificationException异常处理和解决
2018-08-01 10:17:40从现场拿回的日志中报了一个ConcurrentModificationException的异常,第一次遇到这个异常,分析一下。 问题分析 关于该异常产生的原理和Java中的源码,可以参考Java ConcurrentModificationException异常原因和... -
Spring Aop解析自定义注解
2017-04-13 20:24:43首先我们为什么需要做日志管理,在现实的上线中我们经常会遇到系统出现异常或者问题。这个时候就马上打开CRT或者SSH连上服务器拿日子来分析。受网络的各种限制。于是我们就想为什么不能直接在管理后台查看报错的信息... -
Oracle表空间数据库文件收缩案例解析
2020-12-16 10:34:46我们经常会遇到数据库磁盘空间爆满的问题,或由于归档日志突增、或由于数据文件过多、大导致磁盘使用紧俏。这里主要说的场景是磁盘空间本身很大,但表空间对应的数据文件初始化的时候就直接顶满了磁盘空间,导致经常... -
Oracle数据库精讲与疑难解析part2
2013-07-29 11:26:3216.2 联机日志文件管理 与疑难解析 第17章 参数文件(pfile/spfile)管理 17.1 参数文件的基本概念 17.2 初始化参数文件 17.3 服务器参数文件 17.4 初始化参数的修改 17.5 参数管理 与疑难解析 ... -
Oracle数据库精讲与疑难解析part1
2013-07-29 11:24:4116.2 联机日志文件管理 与疑难解析 第17章 参数文件(pfile/spfile)管理 17.1 参数文件的基本概念 17.2 初始化参数文件 17.3 服务器参数文件 17.4 初始化参数的修改 17.5 参数管理 与疑难解析 ... -
记录工作中遇到的问题
2018-08-28 20:21:00主机解析异常,内部多个系统,系统的登录需要从CAS中心得到登录信息,如果失败会提示登录失败。今天一直跳转到失败页面,却没有提示错误信息,弄了半天都没排查到原因 为什么排查的效率慢? 没有按照日志格式输出... -
logback:no applicable action for *, current ElementPath is *异常排查
2018-09-18 00:20:22使用logback配置复杂日志处理时,遇到一个异常: 首先给出出错的配置文件部分内容: 解释: 项目启动后,logback会寻找符合要求的xml配置文件,然后把对应的配置文件的每个节点解析组装成一个一个的SaxEvent... -
Oracle数据库精讲与疑难解析.part1(共七部分)
2011-08-20 20:24:0616.2 联机日志文件管理 与疑难解析 第17章 参数文件(pfile/spfile)管理 17.1 参数文件的基本概念 17.2 初始化参数文件 17.3 服务器参数文件 17.4 初始化参数的修改 17.5 参数管理 与疑难解析 ... -
[完整][Oracle][Oracle数据库精讲与疑难解析].pdf
2012-11-17 16:25:1516.2 联机日志文件管理 与疑难解析 第17章 参数文件(PFILE/SPFILE)管理 17.1 参数文件的基本概念 17.2 初始化参数文件 17.3 服务器参数文件 17.4 初始化参数的修改 17.5 参数管理 与疑难解析 ... -
jUnit Test遇到org.apache.ibatis.binding.BindingException
2017-04-20 16:19:00在运行jUnit Test的时候遇到了一个异常情况 直觉观察可以得出,运行jUnit Test时没有找到对应的MyBatis XML文件来解析。 可是为什么系统运行正常,但是使用jUnit Test就正常呢? 带着疑问查看了一下console... -
-
-
resin3.0升级到3.1版本遇到的问题
2008-06-13 11:59:00resin3.0升级到3.1版本遇到的问题1.接手前任项目,没有测试环境(真不知前任怎么弄的),只好...跟踪了resin的输出日志,报空指针异常,怪了,明明有用户系统的配置文件啊,google了半天,终于解决,原来是reisn解析 -
-
-
python爬虫之xpath格式转换与去除多余标签、解决部分重定向问题的方法
2020-07-11 09:46:35写在前面的话: 实习了半个多月,总结一下学到的内容,还有在...为了项目的维护,所以形成了加入大量异常捕捉以及打日志的习惯,便于排错。 import pymysql pymysql.install_as_MySQLdb() from Log import Log log = Lo -
ftp上传文件一直都是0字节
2019-12-26 17:54:40记录一下我昨晚遇到的一个问题 突然直接所有的域名都突然无法访问,先后进行了一系列的排查,先查了域名解析,服务,数据库,都很正常。最后检查到ftp文件服务器,发现日志一直报错,上传文件失败,上传的文件都是0... -
构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化
2016-05-11 15:07:102.8.2异常情况测试 2.9虚拟机搭建RAC 2.9.1虚拟机Xen简介 2.9.2启动主机Xen内核 2.9.3 Xen虚拟机创建网络环境 2.9.4创建Xen存储服务器 2.9.5创建Xen数据库服务器 2.10本章小结 第3章 Clusterware集群软件 ... -
[提示] 遇到代码 in 作为 wx:for-index 时,输出错误提示及日志(示例代码:<block wx:for="{{adds}}" wx:for-index="in"></bloc>) 历史更新记录 感谢 感谢转转大佬的文章:[AST 实战]从零开始写一...
-
关于Arouter基础使用和代码分析,可以看我这篇博客:Arouter使用与代码解析 4.5 关于组件遇到的问题 那么问题有哪些呢? 组件化时资源名冲突该怎么办?比如,color,shape,drawable,图片资源,布局资源,...
-
gson负责解析json数据;glide负责加载图片;rxlifecycle负责管理view的生命周期;与网络请求共存亡;rxbinding结合databinding扩展UI事件;rxpermissions负责Android 6.0权限申请;material-dialogs一个漂亮的、流畅...
-
JAVA_API1.6文档(中文)
2010-04-12 13:31:34java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...
-
自动化测试Python3+Selenium3+Unittest
-
唐隆-源码
-
leaflet-maps-open-data-apis:包含来自Socrata和Esri ArcGIS Online的多个API数据提要的传单地图-源码
-
租房协议书.docx
-
华为1+X——网络系统建设与运维(高级)
-
java spring 登录验证_详解使用Spring3 实现用户登录以及权限认证
-
mwmui:dataspects MediaWiki Manager UI-源码
-
grunt-contrib-sass:将Sass编译为CSS-源码
-
使用 Linux 平台充当 Router 路由器
-
acm java 问题_Java之ACM注意点
-
【Python-随到随学】FLask第二周
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
java6的默认配置_java面试-JVM常用的基本配置参数有哪些?
-
java spring 登录验证_spring mvc实现登录验证码
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
SPFD5408A CPT 2.8 inch Application Note_20070706.pdf
-
java spring 事务_java 事务与spring 声明式事务
-
java数据预测_java二次指数平滑法预测未来的值
-
java8应用_Java 8之stream实际应用
-
MHA 高可用 MySQL 架构与 Altas 读写分离