在项目中遇到了一个JSON的坑。记录下。
直接上代码:
import java.util.ArrayList;
import com.alibaba.fastjson.JSON;
public class MyList extends ArrayList {
private int size;
private String specialName;
public MyList(){
super (0);
}
public MyList(int size){
super (0);
this .size = size;
}
public MyList(String specialName){
super (0);
this .specialName = specialName;
}
public MyList(int size, String specialName){
super (0);
this .size = size;
this .specialName = specialName;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this .size = size;
}
public String getSpecialName() {
return specialName;
}
public void setSpecialName(String specialName) {
this .specialName = specialName;
}
public static void main(String[] args){
MyList list = new MyList();
list.add( 1);
list.add( 2);
list.add( 3);
list.add( 4);
list.setSpecialName( "just a test");
list.setSize( 4);
System.out.println(JSON.toJSON(list));
System.out.println(JSON.toJSONString(list));
}
}
输出的结果为:
但是我们期望的结果却是类似于下面这样的结果:
{size:4, specialName:"just a test", [1,2,3,4]}
那么是哪里出问题了呢?导致 MyList的 size 属性和 specialName 在JSON格式化时,被丢弃了呢 ?
下面在看一个例子:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class MyList2 {
private int size;
private String specialName;
private List list;
public MyList2(){
}
public int getSize() {
return size;
}
public void setSize(int size) {
this .size = size;
}
public String getSpecialName() {
return specialName;
}
public void setSpecialName(String specialName) {
this .specialName = specialName;
}
public List getList() {
return list;
}
public void setList(List list) {
this .list = list;
}
public static void main(String[] args){
MyList2 myList = new MyList2();
ArrayList list = new ArrayList<>();
list.add( 1);
list.add( 2);
list.add( 3);
list.add( 4);
myList.setSpecialName( "just a test");
myList.setSize( 4);
myList.setList(list);
System.out.println(JSON.toJSON(myList));
System.out.println(JSON.toJSONString(myList));
System.out.println( "----------------");
Map map = new HashMap<>();
map.put( "size", 4);
map.put( "specialName", "just a test");
map.put( "list", list);
map.put( "myList", myList);
System.out.println(JSON.toJSON(map));
}
}
输出的结果为:
{"list":[1,2,3,4],"size":4,"specialName":"just a test"}
{ "list":[1,2,3,4],"size":4,"specialName":"just a test"}
----------------
{ "specialName":"just a test","size":4,"list":[1,2,3,4],"myList":{"list":[1,2,3,4],"size":4,"specialName":"just a test"}}
结果完全正确。
到这里,我们应该可以知道什么原因了。
上面第一段代码我们期望的结果:
{size:4, specialName:"just a test", [1,2,3,4]}
但是想一想,这个格式有什么问题吗?仔细想一想 。
FK,这个格式是完全错误的!他是不合法的。试想一下,JSON格式说白了,它是 Javascript 的一个子集,合法的json对象它是 javascript 中的对象 ,但是:
{size:4, specialName:"just a test", [1,2,3,4]}
他是一个合法的javascript对象吗????
显然,它不是的。因为其中的 [1,2,3,4] ,我们无法访问,它没有对应到一个属性 。所以我们无法访问它。所以他不是一个合法的javascript对象 ,显然也就更加不是一个合法的json对象了 。所以第一个例子,输出的结果:[1,2,3,4] 其实是可以接受的。
是我们自己想要将一个不适合转化成JSON格式的Java对象强制转化成一个json格式,所以也就难免出现意料之外的情况了 。那么 [1,2,3,4] 这个结果是如何来的呢。经过调试,其中的原因是,因为MyList继承自ArrayList,所以在JSON格式化时,就是将其作为了一个List或者说数组来处理的 ,我们看下相关源码:
public static final Object toJSON(Object javaObject) {
return toJSON(javaObject, ParserConfig.getGlobalInstance());
}
@SuppressWarnings( "unchecked")
public static final Object toJSON(Object javaObject, ParserConfig mapping) {
if (javaObject == null ) {
return null ;
}
if (javaObject instanceof JSON) {
return (JSON) javaObject;
}
if (javaObject instanceof Map) {
Map map = (Map) javaObject;
JSONObject json = new JSONObject(map.size());
for (Map.Entry entry : map.entrySet()) {
Object key = entry.getKey();
String jsonKey = TypeUtils.castToString(key);
Object jsonValue = toJSON(entry.getValue());
json.put(jsonKey, jsonValue);
}
return json;
}
if (javaObject instanceof Collection) {
Collection collection = (Collection) javaObject;
JSONArray array = new JSONArray(collection.size());
for (Object item : collection) {
Object jsonValue = toJSON(item);
array.add(jsonValue);
}
return array;
}
我们的MyList的对象,在 if (javaObject instanceof Collection) 处为true,所以被当做了JSONArray 来处理的 ,每次处理JSONArray 中的一项,所以显然就不会处理到 size属性和specialName属性了 ,所以这两个属性被抛弃了。这是 JSON.toJSON() 的处理过程。
下面看下 JSON.toJSONString(),其实也是一样,当成了数组或者说List来处理了:
public ObjectSerializer getObjectWriter(Class clazz) {
ObjectSerializer writer = get(clazz);
if (writer == null ) {
try {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
for (Object o : ServiceLoader.load(AutowiredObjectSerializer.class , classLoader)) {
if (!(o instanceof AutowiredObjectSerializer)) {
continue ;
}
AutowiredObjectSerializer autowired = (AutowiredObjectSerializer) o;
for (Type forType : autowired.getAutowiredFor()) {
put(forType, autowired);
}
}
} catch (ClassCastException ex) {
// skip
}
writer = get(clazz);
}
if (writer == null ) {
final ClassLoader classLoader = JSON.class .getClassLoader();
if (classLoader != Thread.currentThread().getContextClassLoader()) {
try {
for (Object o : ServiceLoader.load(AutowiredObjectSerializer.class , classLoader)) {
if (!(o instanceof AutowiredObjectSerializer)) {
continue ;
}
AutowiredObjectSerializer autowired = (AutowiredObjectSerializer) o;
for (Type forType : autowired.getAutowiredFor()) {
put(forType, autowired);
}
}
} catch (ClassCastException ex) {
// skip
}
writer = get(clazz);
}
}
if (writer == null ) {
if (Map.class .isAssignableFrom(clazz)) {
put(clazz, MapSerializer.instance);
} else if (List.class .isAssignableFrom(clazz)) {
put(clazz, ListSerializer.instance);
上面的代码 else if (List.class.isAssignableFrom(clazz)) 处为 true,所以其实是使用了 ListSerializer.instance 来处理了 MyList 的对象的 ,也就是当做了java.util.List 来处理的,所以自然就抛弃了 size属性和specialName属性。和上面的原理是一样的。
总结下 :
1)MyList这样继承自List的对象,并且有扩展属性的,它在json格式中是不能十分恰当的表示的,它会被当成List来处理,从而抛弃其它非List的属性。
2)避免方法就是使用组合代替继承,或者使用Map,java.util.Map 天生就和json格式是最合适的 ,其实javascript中的对象,其实在某种程度上就是一个Map而已,属性名就是map中的key, 属性的值就是map的value。
3)JSON格式介绍参见:http://www.cnblogs.com/digdeep/p/4572662.html
你可能感兴趣的:(Java中对象JSON格式化处理时的一个坑)
openwrt 桥模式下ebtables转发所有流量到三层,导致DHCP无法获取IP解决方案
wellnw
Openwrt
需求需要统计桥模式下的终端设备流量解决方案使用ebtables将二层流量转到三层然后处理,使用以下指令实现ebtables-tbroute-ABROUTING-pipv4-jredirect出现问题桥模式下接入的设备无法获取到IP地址问题分析由于插入的路由规则将所有流量转发到三层,导致DHCP数据无法正常交互解决方案ebtables-tbroute-IBROUTING-pipv4--ip-prot
openwrt 修改路由ttl值
wellnw
Openwrt
修改路由器的ttl值iptables-tmangle-IPOSTROUTING1-jTTL--ttl-set65
5G应用创新发展策略研究
米朵儿技术屋
计算机科学及电子科技技术专栏 5G
【摘要】我国高度重视5G产业发展,积极推进5G赋能垂直行业数字化转型,5G应用发展环境不断完善,5G应用进入加速导入期。主要分析了5G应用发展环境、国内外现状以及产业融合应用发展存在的问题,并给予产业应用创新发展相关建议,推动网络快速部署,加速行业数字化转型升级,实现数字经济社会新变革。【关键词】5G;融合应用;智简网络15G应用发展环境目前全球5G商用发展已初具规模,为5G应用的规模落地和创新发
Python实战:解析labelme标注数据——如何将数据转换为COCO格式
程序员杨弋
Python全栈工程师学习指南 python 开发语言
在计算机视觉中,标注数据是非常重要的,而Labelme是一个简单易用的自由标注工具,被广泛应用于图像语义分割、目标检测、实例分割等领域,然而标注数据并不总是以我们需要的格式存在,因此需要进行适当的转换,本文将详细介绍如何将Labelme标注数据转换为COCO格式。首先需要安装相关的Python库,包括labelme、numpy、matplotlib、pillow等,在安装完成后设置数据路径,并读取
论基于UML的需求分析(系统架构师2024新版)
桃花键神
uml 需求分析 系统架构
声明文章前部分范文来自网络搜集,后部分写作指导、写作建议来自原创。如有侵权联系删除摘要:2021年3月1日至12月20日,我参加了“数据安全访问平台”项目的开发,担任系统分析员的工作。该项目是某行业用户“数据中心二期”建设的主要内容,目标是:建立数据统一访问接口及其使用标准,规范、约束和审计数据应用访问数据库的行为,对数据应用提供强制审计的技术手段。由于该系统是所有应用的基础平台,对系统的可靠性与
从文化到实践:DevOps的基本概念与核心实践详解
Echo_Wish
运维探秘 让你快速入坑运维 devops 运维 linux
一、引言:什么是DevOps?在当前快速发展的IT世界中,开发与运维之间的协作显得越来越重要。传统软件开发和运维模式的“隔离”导致了沟通不畅和效率低下,而DevOps应运而生,旨在通过文化和工具的结合,将开发(Development)与运维(Operations)之间的隔阂打破。DevOps不仅是一套技术和工具,更是一种文化、一种思维方式,能够帮助组织更高效、持续地交付高质量的软件。二、DevOp
no matching cipher found问题一次解决经历
一张假钞
linux
个人博客地址:nomatchingcipherfound问题一次解决经历|一张假钞的真实世界本次问题解决纯属蒙对了,原理不清楚。当我从一台CentOS7.3的服务器通过ssh登录另外一台CentOS6.8的服务器时出现以下错误信息:[root@192-168-72-75.ssh]#ssh-p65522bddev@192.168.72.208nomatchingcipherfound:clienta
Hadoop 的分布式缓存机制是如何实现的?如何在大规模集群中优化缓存性能?
晚夜微雨问海棠呀
分布式 hadoop 缓存
Hadoop的分布式缓存机制是一种用于在MapReduce任务中高效分发和访问文件的机制。通过分布式缓存,用户可以将小文件(如配置文件、字典文件等)分发到各个计算节点,从而提高任务的执行效率。分布式缓存的工作原理文件上传:用户将需要缓存的文件上传到HDFS(HadoopDistributedFileSystem)。文件路径可以在作业配置中指定。作业提交:在提交MapReduce作业时,用户可以通过
农业土壤传感器可根据作物周期调整采集频率
百态老人
人工智能 大数据 算法
农业土壤传感器确实可以根据作物生长周期动态调整数据采集频率,这一功能主要通过先进的智能算法与传感器技术的深度融合实现。根据的描述,DeepSeek技术能够根据实际需求动态调整传感器的工作模式。例如,在农业物联网场景中,土壤传感器可以结合作物不同生长阶段的需求,灵活调节数据采集频率。这种动态调整不仅能保证监测数据的时效性,还能有效降低传感器能耗,延长电池寿命。具体来说,作物从萌芽期到成熟期对土壤参数
钢铁行业设备智能运维实战:基于DuodooBMS+SKF的减速机全生命周期管理方案
邹工转型手札
风吟九宵 企业信息化 Duodoo开源 运维 数据库 人工智能 制造 开源
(导语:在钢铁行业"设备即产能"的竞争格局下,某大型钢铁集团通过DuodooBMS+SKFObseverPhoenixAPI系统实现核心设备预测性维护,热轧产线非计划停机减少42%,设备综合效率OEE提升17%)一、钢铁企业设备管理之痛某年产800万吨的钢铁联合企业热轧车间,12台关键减速机连续发生异常磨损事故:2023年Q1因1#摆剪减速机轴承失效导致非计划停机23小时,直接损失超200万元传统
从数据到情感:全维度解析哪吒2的212亿票房之战
数据分析
综合目前的数据来看,我分析一下哪吒2的最终票房和冲击第一名可能性。当前态势:票房现状说明目前票房:110亿国内贡献:90%以上(约108亿)海外表现:仅2300万已上映:春节档15天左右三条预测路径分析(含日均计算)A.基础预测线(160-170亿)目标缺口:50-60亿时间周期:45天具体路径:第一阶段(15天)日均要求:2亿阶段贡献:30亿工作日表现:1.5亿/天周末表现:3亿/天第二阶段(1
/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc的区别
u014093837
linux
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运行bashshell的用户执行此文件.当bashshell被打开时,该文件被读取.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行
python运行路径和脚本文件所在路径
Wiseehw
Python
我在sublimeText2编辑python脚本程序,用ipython导入脚本模块,打开文件时总是报错,原来是路径问题deffile2matrix(filename):fp=open(filename,'r')datalines=fp.readlines()lenlines=len(datalines)dataSet=np.zeros((lenlines,3))labels=[]index=0fo
揭秘!100 个 Python 常用易错知识点的避坑指南
tekin
Python python Python 易错点 Python 编程避坑 Python 知识总结 Python 基础与进阶 Python 代码优化 Python 常见错误解析
目录简介1.类方法命名中的下划线2.函数形参中的*和**3.函数实参中的*4.变量作用域5.浅拷贝和深拷贝6.默认参数的陷阱7.迭代器和生成器相关迭代器使用后耗尽生成器表达式和列表推导式混淆8.异常处理相关捕获异常范围过大异常处理中的finally子句9.多线程和多进程相关全局解释器锁(GIL)误解多线程性能提升多进程中的资源共享问题10.字符串编码问题编码和解码错误11.模块导入相关循环导入问题
角色访问控制(RBAC)
IT源哥
架构设计和软件设计 user session actor uml access class
角色访问控制(RBAC)引入了Role的概念,目的是为了隔离User(即动作主体,Subject)与Privilege(权限,表示对Resource的一个操作,即Operation+Resource)。Role作为一个用户(User)与权限(Privilege)的代理层,解耦了权限和用户的关系,所有的授权应该给予Role而不是直接给User或Group。Privilege是权限颗粒,由Operat
Java学习教程,从入门到精通,Java 正则表达式知识点及案例代码(120)
知识分享小能手
编程语言如门 Java 大数据 java 学习 正则表达式 jdbc 开发语言 数据库 java后端开发
Java正则表达式知识点及案例代码一、正则表达式简介正则表达式(RegularExpression,简称regex)是一种用于描述字符串模式的强大工具。它可以用来进行字符串的匹配、查找、替换等操作。Java提供了java.util.regex包来支持正则表达式。二、Java正则表达式语法1.基本语法元字符描述.匹配除换行符以外的任意字符\d匹配数字,等价于[0-9]\D匹配非数字,等价于[^0-9
CSS 核心技术知识点详解:从基础到进阶
秋水为渡
前端 css
本文基于图中提供的17个CSS核心知识点展开讲解,涵盖基础概念、布局原理、实战技巧及性能优化等内容。每个知识点均附代码示例和原理分析,帮助读者系统性掌握CSS核心能力。1.选择器作用:定位HTML元素并应用样式。常见类型:类选择器:.class-name{...}ID选择器:#id-name{...}属性选择器:[type="text"]{...}代码示例:.button{color:red;}/
红队视角出发的k8s敏感信息收集——持久化存储与数据泄露
周周的奇妙编程
kubernetes 容器 云原生
在Kubernetes集群中,持久化存储卷如同数据的保险箱,承载着应用运行所必需的各类敏感信息。然而,从红队视角出发,这些存储卷也可能成为攻击者觊觎的目标。通过巧妙地利用配置不当或已知漏洞,攻击者能够从中收集到包括密钥、访问凭证在内的大量敏感数据,进而导致数据泄露事件的发生。攻击链示例:攻击者通过容器逃逸进入Pod→发现挂载的EBS卷并创建快照→共享快照至攻击者AWS账户→还原快照窃取数据库凭据→
pdsh 2.29 源码编译安装教程
云墨丹青
windows ssh
pdsh2.29源码编译安装教程简介pdsh(ParallelDistributedShell)是一个高效的多服务器并行shell命令执行工具。本文将详细介绍如何从源码编译安装pdsh2.29版本。环境要求Linux操作系统gcc编译器make工具足够的磁盘空间(建议至少1GB可用空间)安装步骤1.下载源码包首先,下载pdsh2.29的源码包:wgethttps://storage.googlea
网络原理之HTTP协议,及理解Cookie和Session的区别
qq_41603622
网络 http cookie session https
文章目录一、HTTP原理简介二、HTTP内容简介1.认识URL2.HTTP协议格式3.HTTP的方法4.HTTP的状态码通过Fiddler抓包工具分析请求和响应的格式5.HTTP常见Header6.Cookie和Session的简单介绍三、补充1.HttpVSHttps提示:以下是本篇文章正文内容一、HTTP原理简介 HTTP协议(超文本传输协议HyperTextTransferProtocol
labelme转YOLOv8、YOLOv5 标签格式 标注数据
一颗小树x
YOLO目标检测 实践应用 labelme YOLOv8 YOLOv5 标签格式 标注数据
前言本文分析将labelme的标签,转为YOLOv8、YOLOv5的格式,实现模型训练。首先了解YOLOv8和YOLOv5标签格式,然后了解labelme标签格式,最近实现数据格式转换。1、YOLOv8和YOLOv5标签格式YOLOv8的标签格式与YOLOv5基本相同,使用一种简单的txt文本格式,来存储每个图像的标注数据。每个图像对应一个文本文件,这些文本文件与图像文件位于同一目录并且具有相同的
探索Java设计模式:建造者模式
放码过来_
设计模式 java 设计模式 建造者模式
探索Java设计模式:深入理解与实践建造者模式在软件工程中,设计模式为解决常见的编程问题提供了最佳实践。本文将聚焦于Java编程语言中的建造者模式(BuilderPattern),通过简要介绍、实现示例及实际运用等模块,帮助读者深入理解并有效运用这一模式。一、简要介绍**建造者模式(BuilderPattern)**是一种创建型设计模式,它将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程
交换机测试内容有哪些
network_tester
交换机测试 测试工具 信息与通信 网络协议 网络 tcp/ip 网络安全 信号处理
交换机测试是确保其性能、功能和可靠性的关键步骤,通常包括以下内容:1.功能测试验证交换机的基本功能是否正常工作:MAC地址学习:检查交换机是否能正确学习和更新MAC地址表。VLAN功能:VLAN划分和隔离。Trunk端口(802.1Q)的VLAN标签处理。链路聚合(LACP):测试端口聚合功能是否正常。生成树协议(STP/RSTP/MSTP):验证环路避免和链路冗余功能。广播/组播控制:检查广播风
矢量网络分析仪测量相位的步骤
network_tester
矢量网络分析仪 测试工具 信息与通信 网络 负载均衡 压力测试 信号处理 网络协议
使用矢量网络分析仪测量相位的步骤通常包括以下几个方面:一、准备工作安装与连接:确保矢量网络分析仪已经正确安装,并连接到电脑。同时,安装最新的驱动程序和测量软件,保证仪器与电脑的通信正常。校准仪器:在进行相位测量之前,对矢量网络分析仪进行校准,以确保测量的准确性和精度。校准过程中,可以使用已知相位响应的标准件来消除系统误差。设置测量参数:根据待测信号的类型和频率范围,配置合适的测量参数,如起始频率、
PyCharm的类型警告: Expected type ‘SupportsWrite[bytes]‘, got ‘BinaryIO‘ instead
neowell
pycharm ide python
记录时使用的PyCharm版本:PyCharm2024.3(ProfessionalEdition)Build#PY-243.21565.199,builtonNovember13,2024问题描述当在PyCharm里使用pickle保存文件,比如以下代码这样:withopen(meta_save_path,'wb')asf:pickle.dump(meta,f)会发现PyCharm对此发出类型警
通过ThinkPad小红点键盘左右滑动页面
neowell
计算机外设
问题ThinkPad小红点键盘的中间按键充当鼠标中键的作用,在Windows上,可以通过键盘的中键+指点杆实现上下页面的滑动。但当页面较宽,需要进行左右滑动时,会发现中键+指点杆的操作无法实现,此时可以通过安装键盘对应的官方键盘驱动来解决这个问题。比如我之前的笔记。但我现在换了不同的操作系统,无法安装Windows端的驱动,导致无法通过键盘的中键+指点杆组合实现左右页面滑动的效果。解决首先是通用解
onnx 推理报错:onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Load mo
fengsongdehappy
python
onnx模型不匹配有可能是你转换的是gpu但是推理是cpu,也可能版本不兼容导致,因此卸载cpu版本,重新安装gpu版本或者升级gpu版本pipuninstallonnxruntime-gpupipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleonnxruntime-gpu
yolov8(8.2.10)+deepsort(demo)
fengsongdehappy
YOLO
只需要训练好yolov8的检测模型然后调用:results=model.track(frame,persist=True)#执行跟踪,persist=True表示持续跟踪。保持同一个人在多帧画面的id一就可以完整代码:importcv2importnumpyasnpfromultralyticsimportYOLOfromcollectionsimportdefaultdict#框的中心点的历史轨
ubuntu完全卸载cuda(备忘)
fengsongdehappy
ubuntu linux 运维
cuda的卸载方法网上都有很多,这些方法大同小异,几乎都是错的,我在卸载cuda时基本试了个遍,各种踩坑。能查到的方法一般都是从官方文档搬过来的,然而这种使用apt-get--purgeremove命令的方法并不能将cuda完全卸掉。这里把官方文档的方法贴出来:sudoapt-get--purgeremove"*cublas*""*cufft*""*curand*"\"*cusolver*""*c
k8s集群离线安装kuberay operator
thinkerCoder
kubernetes 容器 云原生
1,安装方式采用helm安装方式,首先下载对应的helmchart,这里采用v1.2.2版本,下载地址:https://github.com/ray-project/kuberay-helm/releases/tag/kuberay-operator-1.2.22,解压并修改镜像源由于是在内网环境下搭建,因此需要将对应的镜像下载下来,并导入到本地镜像仓库,并修改values.yaml的镜像仓库地址
Maven
Array_06
eclipse jdk maven
Maven
Maven是基于项目对象模型(POM), 信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司
ibatis的queyrForList和queryForMap区别
bijian1013
java ibatis
一.说明
iBatis的返回值参数类型也有种:resultMap与resultClass,这两种类型的选择可以用两句话说明之:
1.当结果集列名和类的属性名完全相对应的时候,则可直接用resultClass直接指定查询结果类
LeetCode[位运算] - #191 计算汉明权重
Cwind
java 位运算 LeetCode Algorithm 题解
原题链接:#191 Number of 1 Bits
要求:
写一个函数,以一个无符号整数为参数,返回其汉明权重。例如,‘11’的二进制表示为'00000000000000000000000000001011', 故函数应当返回3。
汉明权重:指一个字符串中非零字符的个数;对于二进制串,即其中‘1’的个数。
难度:简单
分析:
将十进制参数转换为二进制,然后计算其中1的个数即可。
“
浅谈java类与对象
15700786134
java
java是一门面向对象的编程语言,类与对象是其最基本的概念。所谓对象,就是一个个具体的物体,一个人,一台电脑,都是对象。而类,就是对象的一种抽象,是多个对象具有的共性的一种集合,其中包含了属性与方法,就是属于该类的对象所具有的共性。当一个类创建了对象,这个对象就拥有了该类全部的属性,方法。相比于结构化的编程思路,面向对象更适用于人的思维
linux下双网卡同一个IP
被触发
linux
转自:
http://q2482696735.blog.163.com/blog/static/250606077201569029441/
由于需要一台机器有两个网卡,开始时设置在同一个网段的IP,发现数据总是从一个网卡发出,而另一个网卡上没有数据流动。网上找了下,发现相同的问题不少:
一、
关于双网卡设置同一网段IP然后连接交换机的时候出现的奇怪现象。当时没有怎么思考、以为是生成树
安卓按主页键隐藏程序之后无法再次打开
肆无忌惮_
安卓
遇到一个奇怪的问题,当SplashActivity跳转到MainActivity之后,按主页键,再去打开程序,程序没法再打开(闪一下),结束任务再开也是这样,只能卸载了再重装。而且每次在Log里都打印了这句话"进入主程序"。后来发现是必须跳转之后再finish掉SplashActivity
本来代码:
// 销毁这个Activity
fin
通过cookie保存并读取用户登录信息实例
知了ing
JavaScript html
通过cookie的getCookies()方法可获取所有cookie对象的集合;通过getName()方法可以获取指定的名称的cookie;通过getValue()方法获取到cookie对象的值。另外,将一个cookie对象发送到客户端,使用response对象的addCookie()方法。
下面通过cookie保存并读取用户登录信息的例子加深一下理解。
(1)创建index.jsp文件。在改
JAVA 对象池
矮蛋蛋
java ObjectPool
原文地址:
http://www.blogjava.net/baoyaer/articles/218460.html
Jakarta对象池
☆为什么使用对象池
恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率。Jakarta Commons Pool组件提供了一整套用于实现对象池化
ArrayList根据条件+for循环批量删除的方法
alleni123
java
场景如下:
ArrayList<Obj> list
Obj-> createTime, sid.
现在要根据obj的createTime来进行定期清理。(释放内存)
-------------------------
首先想到的方法就是
for(Obj o:list){
if(o.createTime-currentT>xxx){
阿里巴巴“耕地宝”大战各种宝
百合不是茶
平台战略
“耕地保”平台是阿里巴巴和安徽农民共同推出的一个 “首个互联网定制私人农场”,“耕地宝”由阿里巴巴投入一亿 ,主要是用来进行农业方面,将农民手中的散地集中起来 不仅加大农民集体在土地上面的话语权,还增加了土地的流通与 利用率,提高了土地的产量,有利于大规模的产业化的高科技农业的 发展,阿里在农业上的探索将会引起新一轮的产业调整,但是集体化之后农民的个体的话语权 将更少,国家应出台相应的法律法规保护
Spring注入有继承关系的类(1)
bijian1013
java spring
一个类一个类的注入
1.AClass类
package com.bijian.spring.test2;
public class AClass {
String a;
String b;
public String getA() {
return a;
}
public void setA(Strin
30岁转型期你能否成为成功人士
bijian1013
成功
很多人由于年轻时走了弯路,到了30岁一事无成,这样的例子大有人在。但同样也有一些人,整个职业生涯都发展得很优秀,到了30岁已经成为职场的精英阶层。由于做猎头的原因,我们接触很多30岁左右的经理人,发现他们在职业发展道路上往往有很多致命的问题。在30岁之前,他们的职业生涯表现很优秀,但从30岁到40岁这一段,很多人
[Velocity三]基于Servlet+Velocity的web应用
bit1129
velocity
什么是VelocityViewServlet
使用org.apache.velocity.tools.view.VelocityViewServlet可以将Velocity集成到基于Servlet的web应用中,以Servlet+Velocity的方式实现web应用
Servlet + Velocity的一般步骤
1.自定义Servlet,实现VelocityViewServl
【Kafka十二】关于Kafka是一个Commit Log Service
bit1129
service
Kafka is a distributed, partitioned, replicated commit log service.这里的commit log如何理解?
A message is considered "committed" when all in sync replicas for that partition have applied i
NGINX + LUA实现复杂的控制
ronin47
lua nginx 控制
安装lua_nginx_module 模块
lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty
Centos和debian的安装就简单了。。
这里说下freebsd的安装:
fetch http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4
ma
java-14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字
bylijinnan
java
public class TwoElementEqualSum {
/**
* 第 14 题:
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是 O(n) 。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组 1 、 2 、 4 、 7 、 11 、 15 和数字 15 。由于
Netty源码学习-HttpChunkAggregator-HttpRequestEncoder-HttpResponseDecoder
bylijinnan
java netty
今天看Netty如何实现一个Http Server
org.jboss.netty.example.http.file.HttpStaticFileServerPipelineFactory:
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast(&quo
java敏感词过虑-基于多叉树原理
cngolon
违禁词过虑 替换违禁词 敏感词过虑 多叉树
基于多叉树的敏感词、关键词过滤的工具包,用于java中的敏感词过滤
1、工具包自带敏感词词库,第一次调用时读入词库,故第一次调用时间可能较长,在类加载后普通pc机上html过滤5000字在80毫秒左右,纯文本35毫秒左右。
2、如需自定义词库,将jar包考入WEB-INF工程的lib目录,在WEB-INF/classes目录下建一个
utf-8的words.dict文本文件,
多线程知识
cuishikuan
多线程
T1,T2,T3三个线程工作顺序,按照T1,T2,T3依次进行
public class T1 implements Runnable{
@Override
spring整合activemq
dalan_123
java spring jms
整合spring和activemq需要搞清楚如下的东东1、ConnectionFactory分: a、spring管理连接到activemq服务器的管理ConnectionFactory也即是所谓产生到jms服务器的链接 b、真正产生到JMS服务器链接的ConnectionFactory还得
MySQL时间字段究竟使用INT还是DateTime?
dcj3sjt126com
mysql
环境:Windows XPPHP Version 5.2.9MySQL Server 5.1
第一步、创建一个表date_test(非定长、int时间)
CREATE TABLE `test`.`date_test` (`id` INT NOT NULL AUTO_INCREMENT ,`start_time` INT NOT NULL ,`some_content`
Parcel: unable to marshal value
dcj3sjt126com
marshal
在两个activity直接传递List<xxInfo>时,出现Parcel: unable to marshal value异常。 在MainActivity页面(MainActivity页面向NextActivity页面传递一个List<xxInfo>): Intent intent = new Intent(this, Next
linux进程的查看上(ps)
eksliang
linux ps linux ps -l linux ps aux
ps:将某个时间点的进程运行情况选取下来
转载请出自出处:http://eksliang.iteye.com/admin/blogs/2119469
http://eksliang.iteye.com
ps 这个命令的man page 不是很好查阅,因为很多不同的Unix都使用这儿ps来查阅进程的状态,为了要符合不同版本的需求,所以这个
为什么第三方应用能早于System的app启动
gqdy365
System
Android应用的启动顺序网上有一大堆资料可以查阅了,这里就不细述了,这里不阐述ROM启动还有bootloader,软件启动的大致流程应该是启动kernel -> 运行servicemanager 把一些native的服务用命令启动起来(包括wifi, power, rild, surfaceflinger, mediaserver等等)-> 启动Dalivk中的第一个进程Zygot
App Framework发送JSONP请求(3)
hw1287789687
jsonp 跨域请求 发送jsonp ajax请求 越狱请求
App Framework 中如何发送JSONP请求呢?
使用jsonp,详情请参考:http://json-p.org/
如何发送Ajax请求呢?
(1)登录
/***
* 会员登录
* @param username
* @param password
*/
var user_login=function(username,password){
// aler
发福利,整理了一份关于“资源汇总”的汇总
justjavac
资源
觉得有用的话,可以去github关注:https://github.com/justjavac/awesome-awesomeness-zh_CN 通用
free-programming-books-zh_CN 免费的计算机编程类中文书籍
精彩博客集合 hacke2/hacke2.github.io#2
ResumeSample 程序员简历
用 Java 技术创建 RESTful Web 服务
macroli
java 编程 Web REST
转载:http://www.ibm.com/developerworks/cn/web/wa-jaxrs/
JAX-RS (JSR-311) 【 Java API for RESTful Web Services 】是一种 Java™ API,可使 Java Restful 服务的开发变得迅速而轻松。这个 API 提供了一种基于注释的模型来描述分布式资源。注释被用来提供资源的位
CentOS6.5-x86_64位下oracle11g的安装详细步骤及注意事项
超声波
oracle linux
前言:
这两天项目要上线了,由我负责往服务器部署整个项目,因此首先要往服务器安装oracle,服务器本身是CentOS6.5的64位系统,安装的数据库版本是11g,在整个的安装过程中碰到很多的坑,不过最后还是通过各种途径解决并成功装上了。转别写篇博客来记录完整的安装过程以及在整个过程中的注意事项。希望对以后那些刚刚接触的菜鸟们能起到一定的帮助作用。
安装过程中可能遇到的问题(注
HttpClient 4.3 设置keeplive 和 timeout 的方法
supben
httpclient
ConnectionKeepAliveStrategy kaStrategy = new DefaultConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
long keepAlive
Spring 4.2新特性-@Import注解的升级
wiselyman
spring 4
3.1 @Import
@Import注解在4.2之前只支持导入配置类
在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean
3.2 示例
演示java类
package com.wisely.spring4_2.imp;
public class DemoService {
public void doSomethin