在项目中遇到了一个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格式化处理时的一个坑)
C++ Primer 运算符优先级表
c-c-developer
C++Primer c++
欢迎阅读我的【C++Primer】专栏专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!目录4.12运算符优先级表4.12运算符优先级表表4.4:运算符优先级结合律运算符功能用法左::全局作用域::name左::类作用域class::n
max96712+max96717驱动调试
芒果520
SerDes 驱动开发 嵌入式硬件
最近进行多路3M模组同步出图调试,以防时间长了忘记,现将相应的调试步骤记录如下。该项目模组端所用的serializer为max96717,控制器端所采用的deserilalizer为max96712。MAX96712解串器将GMSL2或GMSL1串行输入转换为MIPICSI-2D-PHY或C-PHY格式的输出。该设备允许每个链路在进行正向视频传输时同时传输双向控制信道数据。MAX96712可以使用
【Redis】golang操作Redis基础入门
寸 铁
go 数据库 Redis redis golang 数据库 CRUD 基本操作 分布式 键值对
【Redis】golang操作Redis基础入门大家好我是寸铁总结了一篇【Redis】golang操作Redis基础入门sparkles:喜欢的小伙伴可以点点关注Redis的作用Redis(RemoteDictionaryServer)是一个开源的内存数据库,它主要用于存储键值对,并提供多种数据结构的支持。Redis的主要作用包括:1.缓存:Redis可以作为缓存系统,将常用的数据缓存在内存中,以
fastadmin后台使用websocket
玉阳软件yuyangdev_cn
workerman
直接使用gatewayworker。在backend-init.js中:断线重连、心跳检测define(['backend'],function(Backend){varsocket;//websocket的实例varlockReconnect=false;//避免重复连接reconnect();functiongetwebsocket(){//新建websocket的函数页面初始化断开连接时重新
C++primer第五版 函数重载及函数匹配
elma_tww
C++语法
函数重载即同一作用域内的几个函数名字相同但形参列表不同,注意,不允许两个函数除了返回类型外其他所有的要素都相同。在大多数情况下,我们容易确定某次调用应该选用哪个重载函数,然而,当几个重载函数的形参数量相等以及某些形参可以由其他类型转换得来时,就比较复杂了。函数匹配首先是确定候选函数和可行函数,再寻找最佳匹配。如果有且只有一个函数满足下列条件,则匹配成功:1.该函数每个实参的匹配都不劣于其他可行函数
MAX9295配置说明:高效视频传输与图像处理的利器
段惟果Edwin
MAX9295配置说明:高效视频传输与图像处理的利器【下载地址】MAX9295配置说明MAX9295配置说明项目地址:https://gitcode.com/Open-source-documentation-tutorial/5d74a项目介绍在现代视频传输和图像处理领域,高效、稳定的信号转换是关键。MAX9295芯片作为一款专为MIPI转GMSL2设计的芯片,凭借其卓越的性能和灵活的配置,成为
GMSL max9286应用参考原理图:硬件工程师的利器
杜文岱Igor
GMSLmax9286应用参考原理图:硬件工程师的利器【下载地址】GMSLmax9286应用参考原理图本仓库提供了一个名为“GMSLmax9286应用参考原理图”的资源文件。该文件详细展示了max9286芯片在GMSL(GigabitMultimediaSerialLink)系统中的应用原理图项目地址:https://gitcode.com/Open-source-documentation-tu
AWS ECS Fargate 实现批量启用部署断路器
flybirding10011
aws 服务器 云计算 运维
背景介绍在AWSElasticContainerService(ECS)中,部署断路器是服务滚动更新过程中的一项重要功能。它可以持续监控新版本任务的运行状况,判断它们是否已达到稳定状态。如果新版本任务无法正常运行,部署断路器将自动停止部署并回滚到先前的稳定版本,从而确保服务的高可用性。启用部署断路器是一种最佳实践,可以降低由于新任务定义部署失败而导致的服务中断风险。然而,手动为每个服务启用部署断路
AWS ECS Fargate 中处理部署失败事件
flybirding10011
aws 云计算
AWSElasticContainerService(ECS)是一项高度可扩展、高性能的容器编排服务,可轻松运行和扩展容器化应用程序。作为无服务器计算模式,Fargate允许您在AWS上运行容器,而无需管理底层EC2实例。然而,在滚动部署过程中,可能会出现部署失败的情况,这可能会影响应用程序的可用性和可靠性。本文将介绍如何使用AWSEventBridge和Lambda函数来监控和处理ECSFarg
vue3.x 的 toRef详细解读
黑码小帅
前端知识总结 vue.js javascript 前端 vue bootstrap less node.js
在Vue3.x中,toRef是一个用于创建响应式引用的工具函数。它可以将一个响应式对象的某个属性转换为一个独立的ref对象,同时保持与原始属性的响应式连接。以下是toRef的详细解读和示例。1.toRef的作用核心功能toRef用于从响应式对象(reactive对象)中提取一个属性,并将其转换为一个ref对象。这个ref对象会与原始属性保持同步:修改ref对象的值会更新原始属性,反之亦然。使用场景
cmake 编译找不到 Qt5WebKitConfig.cmake
SimpleForest
杂七杂八
用cmake编译时出现如下错误提示:CMakeErroratCMakeLists.txt:313(FIND_PACKAGE):Bynotproviding"FindQt5WebKit.cmake"inCMAKE_MODULE_PATHthisprojecthasaskedCMaketofindapackageconfigurationfileprovidedby"Qt5WebKit",butCMa
OpenGL ES 文字渲染进阶--渲染中文字体
字节流动
OpenGL ES 3.0 OpenGL 文字渲染 C++ Android
旧文OpenGLES文字渲染方式有几种?一文中分别介绍了OpenGL利用Canvas和FreeType绘制文字的方法。无论采用哪种方式进行渲染,本质上原理都是纹理贴图:将带有文字的图像上传到纹理,然后进行贴图。渲染中文字体利用Canvas绘制中文字体和绘制其他字体在操作方式上没有区别,但是使用FreeType绘制中文字体,在编码方式、加载方式以及字体属性上面会有一些坑要踩,这里本人已经踩过,将在本
Golang使用redis实现分布式锁(redigo框架)
DDDerek~
golang redis 分布式
本文思路来自Wx公众号:小徐生先生的变成世界,原文地址分布式锁个人理解分布式锁是分布式服务器的单机锁,对于单机锁是保证服务器在同一时间只能有一个线程能访问该方法。但是对于分布式服务器来说,可能存在多台服务器接收用户请求,这样请求在不同服务器的数据就没办法通过单机锁来阻塞。所以才需要通过额外的组件,实现多服务器之间的管理。选型Redis的原因Redis高效且具备高可用性,当提供分布式锁服务的基础组件
sort快排
勾魂凉皮
算法 排序算法 c++
当然可以!让我们通过类似的详细步骤来解释快速排序(QuickSort)的原理和实现,就像之前解释a&=(a-1)的原理一样。快速排序(QuickSort)原理快速排序是一种高效的排序算法,其核心思想是分而治之。它通过选择一个“基准值”(pivot),将数组分为两部分:一部分包含所有小于基准值的元素;另一部分包含所有大于基准值的元素。然后,对这两部分分别递归地进行快速排序,最终整个数组变得有序。详细
PAT乙级真题 — 1087 有多少不同的值(java)
黄昏岭
算法 数据结构
当自然数n依次取1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值?(注:⌊x⌋为取整函数,表示不超过x的最大自然数,即x的整数部分。)输入格式:输入给出一个正整数N(2≤N≤104)。输出格式:在一行中输出题面中算式取到的不同值的个数。输入样例:2017输出样例:1480思路:先找最大值——10000/2+10000/3+10000/5=10335,然后定义10335
C语言【基础篇】之简单语法——构建程序大厦的基石解析
EnigmaCoder
c c语言 开发语言
简单语法前言第一个程序分析✍️注释常量与变量强制类型转换️标识符与关键字scanf与printf介绍⚙️转义字符总结前言大家好!我是EnigmaCoder。本文收录于我的专栏C,希望能帮助到您!前文我们讲解了该如何搭建环境。链接:C语言【基础篇】之搭建环境——从新手到实战的必备前奏本文我们介绍一下C语言最基础的一些知识,为构建程序大厦打好基石。第一个程序分析HelloWorld程序分析#inclu
3G无线技术全面指南:基础、架构、应用与未来
啊湫湫湫丶
本文还有配套的精品资源,点击获取简介:3G无线技术是移动通信领域的一大跃进,提供比2G更高的数据速率和更丰富的服务内容。本资料包旨在全面介绍3G的关键知识点,包括但不限于3G标准、网络架构、数据传输速度、多媒体服务、CDMA原理、移动IP技术、QoS管理、演进至4G、网络部署、终端设备和安全性。学习这些内容有助于深入理解3G技术的发展及其在移动互联网时代的重要作用,并为应对未来通信技术的发展做好准
C++入门之《类和对象中》的构造函数和析构函数
YueiL
C++入门 c++
构造函数定义构造函数是一种特殊的成员函数,它在创建对象时自动调用,主要用于对象的初始化操作,比如为对象的数据成员赋初值等。特点函数名与类名相同:构造函数的名称必须和它所属的类的名称完全一致。没有返回类型:构造函数不声明返回类型,也不能有返回值。可以重载:一个类可以有多个构造函数,它们可以根据参数的类型、个数和顺序的不同来区分,以满足不同的初始化需求。自动调用:当创建类的对象时,系统会自动调用构造函
Python实现AWS Fargate自动化部署系统
ivwdcwso
运维 开发 python aws 自动化 ecs 开发 Fargate 运维
一、背景介绍在现代云原生应用开发中,自动化部署是提高开发效率和保证部署质量的关键。AWSFargate作为一项无服务器计算引擎,可以让我们专注于应用程序开发而无需管理底层基础设施。本文将详细介绍如何使用Python实现AWSFargate的完整自动化部署流程。©ivwdcwso(ID:u012172506)二、技术栈选择Python3.8+:作为主要开发语言boto3:AWS官方PythonSDK
golang使用redis实现全文搜索
千年死缓
golang redis 开发语言
简介使用redis实现全部文章精确到段落的搜索实现思路文章分段,使用一张表单独记录下段落信息段落分词,把段落划分成词分词后使用有序集合记录到redis中,每个词语后记录含有该分词的段落ID集使用一个哈希键记录下每个段落的分词,用于分词信息的删除查询时先分词,再根据分的词把分词查到的对应的段落返回结果具体实现文章分段文章段落表结构typeTextModelstruct{gorm.ModelArtic
DeepSeek为什么超越了OpenAI
deepseek
DeepSeek的超越源于四大关键差异:技术架构的垂直整合优势、数据策略的动态闭环设计、商业模式的场景化落地能力、行业定位的差异化突围。其中,技术架构的突破最具革命性——DeepSeek创造性地采用"混合专家系统+领域预训练"架构,在特定领域的推理效率比OpenAI的GPT-4提升40%以上(根据2023年MLPerch基准测试)。这种技术路线选择,使其在医疗诊断、工业质检等垂直场景的准确率达到9
YOLOv8中Bottleneck模块详解
王了了哇
YOLO 计算机视觉 深度学习 pytorch python
1.Bottleneck模块介绍Bottleneck模块在YOLOv8中的作用是进行特征提取和增强,是网络中的核心构建模块之一。它的主要功能是通过卷积操作来处理输入特征图,并在适当情况下应用残差连接,使得信息能够有效地通过网络层进行传播。2.Bottleneck模块的位置和作用在YOLOv8的网络结构中,Bottleneck模块被多次使用,主要出现在以下几个部分:Backbone部分:在多个层次上
DOS命令行乱码解决办法
王了了哇
windows
DOS中文乱码解决在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。如果想正确显示UTF-8字符,可以按照以下步骤操作:1、打开CMD.exe命令行窗口2、通过chcp命令改变代码页,UTF-8的代码页为65001ch
Github 2025-02-13Go开源项目日报 Top10
老孙正经胡说
github 开源 Github趋势分析 开源项目 Python Golang
根据GithubTrendings的统计,今日(2025-02-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下:开发语言项目数量Go项目10TypeScript项目1InnoSetup项目1Kubernetes:容器化应用程序管理系统创建周期:3618天开发语言:Go协议类型:ApacheLicense2.0Star数量:106913个Fork数量:38445次关注人数:10
常用的系统操作日志记录实现方式
程序员蔡徐坤
java 网络 mybatis kafka spring
1.AOP(面向切面编程)实现原理通过拦截方法调用(如Controller层或Service层),在方法执行前后插入日志记录逻辑,实现业务代码与日志逻辑的解耦。技术实现(以SpringAOP为例):@Aspect@ComponentpublicclassLogAspect{@Pointcut("execution(*com.example.service.*.*(..))")publicvoids
2025-02-13 学习记录--C/C++-PTA 7-14 求整数段和
小呀小萝卜儿
学习-C/C++ 学习 c语言
一、题目描述⭐️给定两个整数A和B,输出从A到B的所有整数以及这些数的和。输入格式:给定两个整数A和B,输出从A到B的所有整数以及这些数的和。输出格式:首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum=X的格式输出全部数字的和X。输入样例:-38输出样例:二、代码(C语言)⭐️#includeintmain(){intA,B,//2个整数A和
【学习笔记】李宏毅2021春机器学习课程第2.3节:Adaptive Learning Rate
Harryline-lx
机器学习 机器学习 人工智能 深度学习
文章目录Trainingstuck≠SmallGradientDifferentparametersneedsdifferentlearningrateRootmeansquareAdagradRMSPropAdamLearningRateSchedulingTrainingstuck≠SmallGradient首先要明确的一点是,目前当我们用gradientdescend来做optimizati
Flink-k8s弹性扩缩容原理和部署步骤
spring208208
flink kubernetes 贪心算法
背景和现状目前行内提交flink作业采用Nativekubernetes模式,提交作业时会指定并行度和taskmanager使用的内存及cpu数量。这种情况下会导致在作业运行高峰可能存在资源不足问题运行低峰又会造成资源浪费,这种粗放的使用资源的模式在实时计算业务量不多的时候还可以勉强接受,而随着实时计算业务的增多,则会造成大量的资源浪费和性能瓶颈。为了使存储和计算资源得到更加合理有效的使用,能跟据
hive spark读取hive hbase外表报错分析和解决
spring208208
hive hive spark hbase
问题现象使用Sparkshell操作hive关联Hbase的外表导致报错;hive使用tez引擎操作关联Hbase的外表时报错。问题1:使用tez或spark引擎,在hive查询时只要关联hbase的hive表就会有问题其他表正常。“org.apache.hadoop.hbase.client.RetriesExhaustedException:Can’tgetthelocations”问题2:s
算法面试题
后端
以下是一些常见的算法面试题:一、排序算法请简述快速排序算法的时间复杂度和空间复杂度,并说明其稳定性。答案:时间复杂度:平均情况:$O(nlogn)$,其中$n$是待排序元素的数量。这是因为快速排序每次划分大致将数组分成两半,需要进行$logn$次划分,每次划分的操作近似为线性时间。最坏情况:$O(n^2)$,当每次划分都极度不平衡(例如已经有序的数组,且选择的基准元素总是最小或最大的元素)时会出现
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