Msgpack简介
MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.
MessagePack是一个基于二进制高效的对象序列化Library用于跨语言通信。它可以像JSON那样,在许多种语言之间交换结构对象;但是它比JSON更快速也更轻巧。 支持Python、Ruby、Java、C/C++、Javascript等众多语言。 比Google Protocol Buffers还要快4倍。
Graddle依赖管理
// msgpack
compile 'org.msgpack:msgpack:0.6.12' // 依赖javassist和json-simple
//slf-logback
compile 'org.slf4j:jcl-over-slf4j:1.7.7'
compile 'org.slf4j:jcl-over-slf4j:1.7.7' // 依赖lf4j-api,故lf4j-api可以不单独配置
compile 'org.slf4j:slf4j-api:1.7.7'
// javassist
compile 'org.javassist:javassist:3.20.0-GA' // 如果其他有依赖,则可不单独配置
compile 'com.googlecode.json-simple:json-simple:1.1.1'
使用Msgpack解析yii2 session中的数据
yii2将session数据写入redis中,为了在java api中可以使用后台用户登录的信息,则需要通过java解析session数据。 先看看如何使用:
// sessionBytes是byte类型
if (null != sessionBytes) {
MessagePack pack = new MessagePack(); // new一个msgpack对象
Map map = null;
try {
map = (Map) pack.read(sessionBytes); // 通过Msgpack的read读取字节,强制转换为Map对象
} catch (IOException e) {
LOGGER.warn("get request user from redis failed: ", e);
}
if (!com.joyven.util.Utils.isEmpty(map)) {
map.forEach((k, v) -> {
String key = String.valueOf(k);
String value = String.valueOf(v);
if (Const.SESSION_KEY_UID.equals(key)) {
user.setUid(Long.parseLong(trim(value, USER_STRING_REDUNDANCY)));
}
if (Const.SESSION_KEY_USERNAME.equals(key)) {
user.setUsername(trim(value, USER_STRING_REDUNDANCY));
}
if (Const.SESSION_KEY_AVATAR.equals(key)) {
user.setAvatar(trim(value, USER_STRING_REDUNDANCY));
}
if (Const.SESSION_KEY_CST.equals(key)) {
user.setCraftsmanStatus(Integer.parseInt(trim(value,
USER_STRING_REDUNDANCY)) + 1);
}
if (Const.SESSION_KEY_MOBILE.equals(key)) {
user.setMobile(trim(value, USER_STRING_REDUNDANCY));
}
});
}
}
上述代码中常量的定义:
public static final String SESSION_KEY_UID = "\"uid\"";
public static final String SESSION_KEY_USERNAME = "\"un\"";
public static final String SESSION_KEY_AVATAR = "\"avt\"";
public static final String SESSION_KEY_CST = "\"cst\"";
public static final String SESSION_KEY_MOBILE = "\"mbl\"";
public static final String USER_STRING_REDUNDANCY = "\"";
php写入的数据是uid、un、avt、cst、mbl这样的key,经过Msgpack序列化后的key都加上了\"
,强制转换为Map对象后,map中的key并没有去掉这些转义字符,value也不例外,因此使用trim去掉了value两边的\"
。需要注意,如果是yii2的话,一般key都有前缀,此处作者把前缀删掉了,下面所有代码均如此。
此处的trim是经过封装的,和php中trim api类似。
上面的这块代码,Msgpack反序列化可以抽象封装为工具类:
@SuppressWarnings("unchecked")
public static Map getMessagePackValue(final byte[] bytes) throws IOException {
MessagePack pack = new MessagePack();
Map map = (Map) pack.read(bytes);
Map result = new HashMap<>();
if (null != map) {
map.forEach((k, v) -> result.put(trim(String.valueOf(k), USER_STRING_REDUNDANCY),
trim(String.valueOf(v), USER_STRING_REDUNDANCY)));
}
return result;
}
优化getMessagePackValue方法,不再使用trim处理数据
@SuppressWarnings("unchecked")
public static Map getMessagePackValue(final byte[] bytes) throws IOException {
MessagePack pack = new MessagePack();
Map map = (Map) pack.read(bytes, Templates.tMap(Templates.TString,
Templates.TValue));
Map result = new HashMap<>();
if (map != null) {
map.forEach((k, v) -> {
Object object = rawObjToObj(v);
result.put(k, object);
});
}
return result;
}
Msgpack有很多数据模板,这里使用TString模板和TValue模板。相关模板均在org.msgpack.template.Template
类中定义,诸如:TValue、TByte、TShort、TInteger、TLong、TCharacter、TBigInteger、TBigDecimal、TFloat、TBoolean、TString、TByteArray、TByteBuffer、TDate、tNotNullable、tList、tMap、tCollection、tOrdinalEnum。
private static Object rawObjToObj(Object obj) {
Object objResu = null;
if (obj instanceof IntegerValue) {
objResu = ((IntegerValue) obj).asIntegerValue();
} else if (obj instanceof ArrayValue) {
ArrayValue v = ((ArrayValue) obj).asArrayValue();
List ret = new ArrayList<>(v.size());
v.forEach(x -> ret.add(x));
objResu = ret;
} else if (obj instanceof BooleanValue) {
objResu = ((BooleanValue) obj).asBooleanValue();
} else if (obj instanceof FloatValue) {
objResu = ((FloatValue) obj).asFloatValue();
} else if (obj instanceof MapValue) {
MapValue value = ((MapValue) obj).asMapValue();
Map map = new HashMap<>(value.size());
value.forEach((k, v) -> {
map.put(k, rawObjToObj(v));
});
objResu = map;
} else {
objResu = ((RawValue) obj).asRawValue().getString();
}
return objResu;
}
优化后的使用方法
// appId 为php中的session id
public User getAdminUser(String appId) {
byte[] sessionKey = getSessionKey(appId).getBytes();
byte[] sessionAdmin;
User user = new User();
try (Jedis jedis = jedisPool.getResource()) {
jedis.select(RedisDB.DB12);
sessionAdmin = jedis.get(sessionKey);
user.setExpire(jedis.ttl(sessionKey));
}
if (sessionAdmin != null) {
Map map = new HashMap<>();
try {
map = Utils.getMessagePackValue(sessionAdmin);
} catch (IOException e) {
LOGGER.warn("parse session admin error: " + e.getMessage());
}
if (!isEmpty(map)) {
if (map.containsKey("id")) {
if (map.get("id") instanceof IntegerValue) {
user.setAid(((IntegerValue) map.get("id")).longValue());
} else if(!isEmpty((String) map.get("id"))){
user.setAid(Long.parseLong((String) map.get("id")));
} else {
user.setAid(0L);
}
}
if (map.containsKey("un")) {
user.setUsername((String) map.get("un"));
}
if (map.containsKey("rn")) {
user.setRealname((String) map.get("rn"));
}
}
}
return user;
}
错误:org.msgpack.type.intValueImpl cannot be cast to java.lang.Long
先看看这段代码:
if (map.containsKey("id")) {
if (map.get("id") instanceof IntegerValue) {
user.setAid(((IntegerValue) map.get("id")).longValue());
} else if(!isEmpty((String) map.get("id"))){
user.setAid(Long.parseLong((String) map.get("id")));
} else {
user.setAid(0L);
}
}
反序列化后获取id,因为User中id是Long类型,这里面id可能是String,也可能是Integer,因此需要注意。最开的代码是这样写的:
if (map.containsKey("id") && !isEmpty((String) map.get("id"))) {
user.setAid(Long.parseLong((String) map.get("id")));
}
通过Long.parseLong解析id报错,错误:org.msgpack.type.intValueImpl cannot be cast to java.lang.Long,于是修改为下面这般,如果是IntegerValue的实例,则强制转换为Long类型,但是依然报错:
if (map.containsKey("id")) {
if (map.get("id") instanceof IntegerValue) {
user.setAid((Long) map.get("id"));
} else if(!isEmpty((String) map.get("id"))){
user.setAid(Long.parseLong((String) map.get("id")));
} else {
user.setAid(0L);
}
}
最后强制类型转换IntegerValue,再获取longValue,即为上面函数中的那般才解决此错误。
参考资料
你可能感兴趣的:(java,msgpack)
《Java核心技术 卷II》本地日期
阿立聊全栈
《Java核心技术II》 数据库 Java Java核心II 时间
本地日期从绝对时间转向人类时间,JavaAPI中两类人类时间。本地日期/时间:包含当天的日期和时间,与时区信息没有任何关联,并不对应精准的时刻。1903年6月14日。时区日期/时间:包括时区,表示时间线上的一个精确的时刻。1969年7月16日09:32:00EDT(阿波罗11号发射的时刻)。API设计者推荐程序员不要使用时区时间,除非想要表示绝对时间的实例。生日,假期,计划时间通常做好表示为本地日
Mybatis
一十一code
javaEE mybatis
什么是MyBatis?MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录。mybatis和hibernate的比较mybati
java中的四舍五入
代码小白 ac
java 开发语言
在Java中,四舍五入可以通过多种方式实现,具体取决于你想要达到的精度以及你正在处理的数据类型。以下是几种常用的方法:1:Math.round():Math.round()方法适用于float和double类型,它会将数值四舍五入到最接近的整数。对于float,它返回long类型的结果;对于double,则返回long类型的结果。但是,值得注意的是,Math.round()实际上是在数值加上0.5
JavaWeb中的Session与Cookie机制:会话管理的隐秘角落
杨胜增
前端 java 开发语言
JavaWeb中的Session与Cookie机制:会话管理的隐秘角落在现代Web开发中,如何处理用户状态和会话信息是一个非常重要的问题。JavaWeb中的Session与Cookie机制便是实现会话管理的两大法宝。虽然它们看似简单,但在实际应用中却涉及到复杂的机制与潜在的隐患。今天,我们将深入解析Session与Cookie的工作原理,探讨它们的优缺点,并分析如何避免常见的陷阱,确保Web应用的
Python版的Mybatis ORM:mybatis-py(类似java的mybatis)
moontourse
python orm python mybatis java
入门mybatis-py是一个和mybatis很相似的轻量级的半自动的ORM,它的功能如下:主要功能如下:1、半自动化的ORM;2、支持像mybatis那样的动态SQL;3、支持类似mybatis注解的装饰器;4、支持LRU缓存,支持缓存过期机制;5、尽可能地使用Preparedstatement,避免SQL字符串拼接,能有效地防止SQL注入;6、预防大对象机制,避免OOM。7、支持mysql和p
每日 Java 面试题分享【第 12 天】
一只蜘猪
【2025最新版】Java 基础面试题 java 开发语言 面试
欢迎来到每日Java面试题分享栏目!订阅专栏,不错过每一天的练习今日分享3道面试题目!评论区复述一遍印象更深刻噢~目录问题一:Java中final、finally和finalize各有什么区别?问题二:为什么在Java中编写代码时会遇到乱码问题?问题三:为什么JDK9中将String的char数组改为byte数组?问题一:Java中final、finally和finalize各有什么区别?fina
Python 和 Java 区别是什么?哪个运行效率高?为什么?
海姐软件测试
经验分享 面试 笔记 职场和发展 其他
一、Python和Java的区别1.编程风格•Python是一种解释型动态编程语言,语法简洁、灵活,代码较为简洁直观,注重代码的可读性和简洁性,使用缩进来表示代码块。•Java是一种编译型静态编程语言,语法相对严谨,代码风格较为规范,需要明确声明变量类型,使用大括号来表示代码块。2.内存管理•Python有自动的内存管理机制,开发者不需要手动管理内存的分配和释放,减少了内存泄漏的风险,但可能在某些
Java 的线程通信机制是怎样的呢?
海姐软件测试
其他 笔记 经验分享 职场和发展 面试
在Java中,线程通信机制主要有以下几种方式:一、共享内存这是最常见的线程通信方式。多个线程可以访问同一个共享对象,通过对这个对象的读写来实现通信。1.使用volatile关键字:•保证变量的可见性,即当一个线程修改了一个volatile变量的值,其他线程能够立即看到这个变化。•例如,在多线程环境下,一个线程负责修改某个标志位,其他线程通过读取这个标志位来决定是否执行特定的操作。2.使用synch
看Java代码,学命令注入
IronSec
java 开发语言
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。关注VX公粽号“信安魔方”查阅更多实战案例!Part-01命令注入基本知识命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如果系统命令代码未对用户可控参数做过滤,则当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从
构建动态React作品集:Portfolio-In-React实战指南
yang lebron
本文还有配套的精品资源,点击获取简介:“Portfolio-In-React”是一个利用React技术构建的个人作品集项目,旨在通过JavaScript库创建一个动态和交互式的在线展示平台。项目使用了React组件化、JSX语法、状态管理、生命周期方法、ReactRouter、CSS-in-JS、响应式设计、状态管理库如Redux、测试与调试、代码优化以及CI/CD实践,涵盖了前端开发的多个关键方
React Native项目开发实战:react-native-insider-tempo
大思兄的视界
本文还有配套的精品资源,点击获取简介:react-native-insider-tempo是一个利用ReactNative框架构建的JavaScript跨平台移动应用项目。它展示了如何使用ReactNative创建可重用组件,使用JavaScript编程,集成状态管理库(如Redux或MobX),与后端API交互,实现样式与布局设计,处理原生模块集成,以及进行热重载、性能优化、测试和版本控制。该项
Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
字节全栈_prI
maven mybatis mysql
7.4、spring配置文件application.xml:classpath:properties/*.properties-->${jdbc_driverClassName}${jdbc_url}${jdbc_username}${jdbc_password}-->8、接口和类的配置:8.1、com.luo.domain下添加User.java文件:packagecom.luo.domain;
扩展Spring MVC框架的消息转化器
Frank_LFC
spring mvc java
扩展SpringMVC框架的消息转化器SpringMVC框架的消息转换器是用来处理请求和响应的数据格式转换的组件.在SpringMVC中,java对象转JSON对象是通Jackson实现的,涉及到SpringMVC中的消息转换器MappingJackson2HttpMessageConverter.当请求和响应的数据格式不匹配时,就需要对消息转换器功能进行拓展.步骤:1.涉及工具——对象转换器Ja
Java 使用雪花算法生成全局 ID 介绍、应用场景和示例代码
小信丶
算法相关技术栈 java 算法 dreamweaver
一、雪花算法概述雪花算法(Snowflake)是Twitter开发的一种全局唯一ID生成算法。其生成的ID是64位的长整型,具有全局唯一性且趋势递增,常用于全局系统中需要生成唯一标识符的场景。雪花算法ID结构:雪花算法生成的64位二进制数字由以下几部分组成:1位符号:始终为41位数据:记录10位机器标识:12位序列号:在同一毫秒内的生成序号(每毫秒最多生成4096个)特点:性能:本地生成,无高可用
SpringBoot 整合 Mybatis:提升你的Java项目开发效率
苏-言
java spring boot mybatis
第一章:数据自动管理引入JDBC的依赖和SpringBoot的应用场景:org.springframework.bootspring-boot-starter-jdbcorg.apache.commonscommons-dbcp2mysqlmysql-connector-javaruntime创建application.yaml进行配置:spring:datasource:username:roo
Spring MVC 消息转换器概述
PqCybersecurity
spring mvc java
SpringMVC是一种基于Java的开发框架,用于构建Web应用程序。它提供了一种灵活的方式来处理请求和响应,并支持多种数据格式。SpringMVC的消息转换器(MessageConverters)是其中一个重要的特性,它可以方便地处理请求和响应报文的转换工作。消息转换器在SpringMVC中的作用是将请求和响应报文转换为特定的数据格式,从而方便开发人员进行处理。常见的数据格式包括JSON、XM
Java生成JWT令牌的工具类
Miketutu
java python 开发语言
packagecom.itheima.utils;importio.jsonwebtoken.Claims;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importjava.util.Date;importjava.util.Map;publicclassJwtUtils{privatestaticStri
JavaScript系列(59)--微服务架构设计详解
ᅟᅠ 一进制
JavaScript javascript 微服务 开发语言
JavaScript微服务架构设计详解️今天,让我们深入探讨JavaScript的微服务架构设计。微服务架构是一种将应用拆分为小型、独立服务的架构模式,每个服务都运行在自己的进程中,通过轻量级的通信机制进行交互。微服务基础架构小知识:微服务架构的核心是将单体应用拆分为一组小型服务,每个服务都能独立部署、扩展和升级,从而提高系统的可维护性和可扩展性。//1.基础服务类classMicroServic
Java数据结构-交换排序
Lydia ,
Java数据结构 数据结构 排序算法 算法
一.冒泡排序1.基本思想冒泡排序(BubbleSort)是一种简单的排序算法,其基本思想是通过反复比较相邻的元素并交换位置,将最大(或最小)的元素逐步“冒泡”到序列的末尾(或开头),从而实现排序。2.代码实现publicstaticvoidbubbleSort(int[]array){for(inti=0;iarray[j+1]){//如果修改为>=就是不稳定的,因此冒泡排序是不稳定的swap(a
MongoMongo简介
lfsf802
J2EE 框架/工具 mongodb
简介MongMongo是一个用Java写的ODM框架,使得对MongoDB的操作更加便捷。MongoMongo努力为Java开发者提供类似于ActiveORM或者Hibernate的操作API,并且保留了MongoDB的schemaless,document-based设计,动态查询,原子修改操作等特性。当然你可以很方便的绕开MongoMongo而使用JavaDriver原生提供的功能。示例代码p
python日志处理logging
aiweker
跟我学python python 开发语言
python日志处理logging在项目开发中,日志信息是程序中必不可少的组成部分。每一种语言都有相应的日志模块,如java中log4j,而python中是通过logging模块来提供日志功能。日志要哪些本质功能?在分享日志logging模块之前,先来思考下我们需要哪些的日志信息?或者日志信息给我们提供什么样的价值?基本功能1.首先:日志应该包含程序运行的基本信息,比如运行时间,**运行的位置信息
Java 编程中的 9 个性能提升技巧
eqa11
java 开发语言
文章目录Java编程中的9个性能提升技巧一、引言二、优化内存使用1、合理使用数据结构2、优化字符串操作三、提升代码执行效率3、优化循环结构4、缓存计算结果四、多线程与并发优化5、使用线程池6、锁优化五、JVM调优7、调整堆内存大小8、选择合适的垃圾回收器六、I/O操作优化9、使用缓冲流四、使用示例五、总结Java编程中的9个性能提升技巧一、引言在Java开发中,性能优化是提升用户体验和系统效率的关
java基本语法
在下陈平安
java java
基本语法类与对象主方法标识符关键字类与对象Java是面向对象的语言,所有代码都写在类中。类是对象的模板,对象是类的实例主方法publicstaticvoidmain(String[]args)是Java程序的入口点标识符类名、方法名、变量名等统称为标识符,命名规则为字母、数字、下划线和美元符号组成,不能以数字开头关键字如class,public,static,void,int等,具有特殊含义,不能
20250108慧能科技前端面试
uperficialyu
前端面试实战整理 前端
目录ajax怎么取消请求移动端怎么实现px尺寸vite和webpack的区别设计模式讲一下什么是原型链讲一下什么是闭包实现eventbus事件循环项目发布后,如何对项目进行优化,怎么优化vue2的diff算法和vue3的diff算法的区别1.ajax怎么取消请求原生JavaScript(XMLHttpRequest)创建XMLHttpRequest对象发送请求,通过调用其abort()方法来取消请
ORA-01555 的应对方法?思维导图 代码示例(java 架构)
用心去追梦
java 架构 oracle
ORA-01555是Oracle数据库中的一个错误代码,表示“快照太旧(snapshottooold)”。这个错误通常发生在读取一致性查询时,当查询需要的数据已经被覆盖或移除,而这些数据对于恢复查询的一致性视图是必需的。这种情况可能会在长时间运行的查询中发生,尤其是在高并发和频繁更新的环境中。应对ORA-01555的方法为了有效应对ORA-01555错误,可以采取以下几种策略:增大UNDO表空间增
Maven在项目开发中到底起着什么作用?小白参考!
码场老菜鸟
maven java
Maven是一个非常流行的工具,主要用来帮助Java开发者管理项目的构建、依赖、测试和发布。对于初学者来说,它的作用可以理解为以下几点:项目构建管理:Maven通过定义项目的pom.xml文件来管理项目的构建过程。它会根据配置的插件来执行编译、打包、测试、部署等任务。例如,通过mvncleaninstall命令,Maven会自动清理项目、编译源代码、运行单元测试,并将生成的文件打包成一个可执行的J
刷题前必学!字符串实战!用JavaScript学数据结构与算法
JavaScript算法与数据结构-HowieCong务必要熟悉JavaScript使用再来学!一、基础算法技能会根据基础算法技能去衍生问题(1)反转字符串反转字符串可以直接调用相关API即可//定义被反转的字符串conststr='howiecong'//定义反转后的字符串constres=str.split('').reverse().join('')console.log(res)//gn
Java——MVC架构编写游戏管理系统
db_lrj_2015
java mvc
文章目录前言一、运行环境二、创建项目2.1创建新模块2.2选择依赖2.3对应的Maven依赖如下(pom.xml):三、项目架构3.1项目结构3.2连接数据库3.3配置数据库(application.properties):四、Model层五、Repository层六、Service层6.1接口6.2实现七、Controller层八、View层8.1index.html8.2new_equipme
【无标题】docker-compose一键部署项目,haproxy容器代理多个web或java容器
m0_68739559
linux
#创建脚本,可以在java环境中运行任何的jar包或者war包 #!/bin/bash /usr/local/jdk/bin/java-jar/java/src/*.?ar一、思路分析:(1)nginx1、下载镜像,将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/2、启动容器3、该项目是一个前后端分离的项目,并非所有的请求都是来自同一个位置,设置请求的时候还是需要
【2024年华为OD机试】(B卷,100分)- 喊7的次数重排(Java & JS & Python&C/C++)
妄北y
java 华为od javascript python c语言
一、问题描述题目描述喊7是一个传统的聚会游戏,N个人围成一圈,按顺时针从1到N编号。编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1,但是当将要喊出来的数字是7的倍数或者数字本身含有7的话,不能把这个数字直接喊出来,而是要喊”过”。假定玩这个游戏的N个人都没有失误地在正确的时机喊了”过”,当喊到数字K时,可以统计每个人喊”过”的次数。现给定一个长度为N的数组,存储了打乱顺序的每个人喊
插入表主键冲突做更新
a-john
有以下场景:
用户下了一个订单,订单内的内容较多,且来自多表,首次下单的时候,内容可能会不全(部分内容不是必须,出现有些表根本就没有没有该订单的值)。在以后更改订单时,有些内容会更改,有些内容会新增。
问题:
如果在sql语句中执行update操作,在没有数据的表中会出错。如果在逻辑代码中先做查询,查询结果有做更新,没有做插入,这样会将代码复杂化。
解决:
mysql中提供了一个sql语
Android xml资源文件中@、@android:type、@*、?、@+含义和区别
Cb123456
@+ @ ? @*
一.@代表引用资源
1.引用自定义资源。格式:@[package:]type/name
android:text="@string/hello"
2.引用系统资源。格式:@android:type/name
android:textColor="@android:color/opaque_red"
数据结构的基本介绍
天子之骄
数据结构 散列表 树、图 线性结构 价格标签
数据结构的基本介绍
数据结构就是数据的组织形式,用一种提前设计好的框架去存取数据,以便更方便,高效的对数据进行增删查改。正确选择合适的数据结构,对软件程序的高效执行的影响作用不亚于算法的设计。此外,在计算机系统中数据结构的作用也是非同小可。例如常常在编程语言中听到的栈,堆等,就是经典的数据结构。
经典的数据结构大致如下:
一:线性数据结构
(1):列表
a
通过二维码开放平台的API快速生成二维码
一炮送你回车库
api
现在很多网站都有通过扫二维码用手机连接的功能,联图网(http://www.liantu.com/pingtai/)的二维码开放平台开放了一个生成二维码图片的Api,挺方便使用的。闲着无聊,写了个前台快速生成二维码的方法。
html代码如下:(二维码将生成在这div下)
? 1
&nbs
ImageIO读取一张图片改变大小
3213213333332132
java IO image BufferedImage
package com.demo;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* @Description 读取一张图片改变大小
* @author FuJianyon
myeclipse集成svn(一针见血)
7454103
eclipse SVN MyEclipse
&n
装箱与拆箱----autoboxing和unboxing
darkranger
J2SE
4.2 自动装箱和拆箱
基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用。
4.2.1 autoboxing和unboxing
在Java中,所有要处理的东西几乎都是对象(Object)
ajax传统的方式制作ajax
aijuans
Ajax
//这是前台的代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+
只用jre的eclipse是怎么编译java源文件的?
avords
java eclipse jdk tomcat
eclipse只需要jre就可以运行开发java程序了,也能自动 编译java源代码,但是jre不是java的运行环境么,难道jre中也带有编译工具? 还是eclipse自己实现的?谁能给解释一下呢问题补充:假设系统中没有安装jdk or jre,只在eclipse的目录中有一个jre,那么eclipse会采用该jre,问题是eclipse照样可以编译java源文件,为什么呢?
&nb
前端模块化
bee1314
模块化
背景: 前端JavaScript模块化,其实已经不是什么新鲜事了。但是很多的项目还没有真正的使用起来,还处于刀耕火种的野蛮生长阶段。 JavaScript一直缺乏有效的包管理机制,造成了大量的全局变量,大量的方法冲突。我们多么渴望有天能像Java(import),Python (import),Ruby(require)那样写代码。在没有包管理机制的年代,我们是怎么避免所
处理百万级以上的数据处理
bijian1013
oracle sql 数据库 大数据 查询
一.处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 o
mac 卸载 java 1.7 或更高版本
征客丶
java OS
卸载 java 1.7 或更高
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
成功执行此命令后,还可以执行 java 与 javac 命令
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane
成功执行此命令后,还可以执行 java
【Spark六十一】Spark Streaming结合Flume、Kafka进行日志分析
bit1129
Stream
第一步,Flume和Kakfa对接,Flume抓取日志,写到Kafka中
第二部,Spark Streaming读取Kafka中的数据,进行实时分析
本文首先使用Kakfa自带的消息处理(脚本)来获取消息,走通Flume和Kafka的对接 1. Flume配置
1. 下载Flume和Kafka集成的插件,下载地址:https://github.com/beyondj2ee/f
Erlang vs TNSDL
bookjovi
erlang
TNSDL是Nokia内部用于开发电信交换软件的私有语言,是在SDL语言的基础上加以修改而成,TNSDL需翻译成C语言得以编译执行,TNSDL语言中实现了异步并行的特点,当然要完整实现异步并行还需要运行时动态库的支持,异步并行类似于Erlang的process(轻量级进程),TNSDL中则称之为hand,Erlang是基于vm(beam)开发,
非常希望有一个预防疲劳的java软件, 预防过劳死和眼睛疲劳,大家一起努力搞一个
ljy325
企业应用
非常希望有一个预防疲劳的java软件,我看新闻和网站,国防科技大学的科学家累死了,太疲劳,老是加班,不休息,经常吃药,吃药根本就没用,根本原因是疲劳过度。我以前做java,那会公司垃圾,老想赶快学习到东西跳槽离开,搞得超负荷,不明理。深圳做软件开发经常累死人,总有不明理的人,有个软件提醒限制很好,可以挽救很多人的生命。
相关新闻:
(1)IT行业成五大疾病重灾区:过劳死平均37.9岁
读《研磨设计模式》-代码笔记-原型模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* Effective Java 建议使用copy constructor or copy factory来代替clone()方法:
* 1.public Product copy(Product p){}
* 2.publi
配置管理---svn工具之权限配置
chenyu19891124
SVN
今天花了大半天的功夫,终于弄懂svn权限配置。下面是今天收获的战绩。
安装完svn后就是在svn中建立版本库,比如我本地的是版本库路径是C:\Repositories\pepos。pepos是我的版本库。在pepos的目录结构
pepos
component
webapps
在conf里面的auth里赋予的权限配置为
[groups]
浅谈程序员的数学修养
comsci
设计模式 编程 算法 面试 招聘
浅谈程序员的数学修养
批量执行 bulk collect与forall用法
daizj
oracle sql bulk collect forall
BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。通常可以在SELECT INTO、
FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。本文将逐一描述BULK COLLECT在这几种情形下的用法。
有关FORALL语句的用法请参考:批量SQL之 F
Linux下使用rsync最快速删除海量文件的方法
dongwei_6688
OS
1、先安装rsync:yum install rsync
2、建立一个空的文件夹:mkdir /tmp/test
3、用rsync删除目标目录:rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。
Yii CModel中rules验证规格
dcj3sjt126com
rules yii validate
Yii cValidator主要用法分析:
yii验证rulesit 分类: Yii yii的rules验证 cValidator主要属性 attributes ,builtInValidators,enableClientValidation,message,on,safe,skipOnError
基于vagrant的redis主从实验
dcj3sjt126com
vagrant
平台: Mac
工具: Vagrant
系统: Centos6.5
实验目的: Redis主从
实现思路
制作一个基于sentos6.5, 已经安装好reids的box, 添加一个脚本配置从机, 然后作为后面主机从机的基础box
制作sentos6.5+redis的box
mkdir vagrant_redis
cd vagrant_
Memcached(二)、Centos安装Memcached服务器
frank1234
centos memcached
一、安装gcc
rpm和yum安装memcached服务器连接没有找到,所以我使用的是make的方式安装,由于make依赖于gcc,所以要先安装gcc
开始安装,命令如下,[color=red][b]顺序一定不能出错[/b][/color]:
建议可以先切换到root用户,不然可能会遇到权限问题:su root 输入密码......
rpm -ivh kernel-head
Remove Duplicates from Sorted List
hcx2013
remove
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return&
Spring4新特性——JSR310日期时间API的支持
jinnianshilongnian
spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
浅谈enum与单例设计模式
247687009
java 单例
在JDK1.5之前的单例实现方式有两种(懒汉式和饿汉式并无设计上的区别故看做一种),两者同是私有构
造器,导出静态成员变量,以便调用者访问。
第一种
package singleton;
public class Singleton {
//导出全局成员
public final static Singleton INSTANCE = new S
使用switch条件语句需要注意的几点
openwrt
c break switch
1. 当满足条件的case中没有break,程序将依次执行其后的每种条件(包括default)直到遇到break跳出
int main()
{
int n = 1;
switch(n) {
case 1:
printf("--1--\n");
default:
printf("defa
配置Spring Mybatis JUnit测试环境的应用上下文
schnell18
spring mybatis JUnit
Spring-test模块中的应用上下文和web及spring boot的有很大差异。主要试下来差异有:
单元测试的app context不支持从外部properties文件注入属性
@Value注解不能解析带通配符的路径字符串
解决第一个问题可以配置一个PropertyPlaceholderConfigurer的bean。
第二个问题的具体实例是:
Java 定时任务总结一
tuoni
java spring timer quartz timertask
Java定时任务总结 一.从技术上分类大概分为以下三种方式: 1.Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务; 说明: java.util.Timer定时器,实际上是个线程,定时执行TimerTask类 &
一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法
yangshangchuan
rank 相似度计算 文本相似度 词袋模型 余弦相似度
本文描述了一种在ITEYE博客频道上面出现的新型的商业广告形式及其应对方法,对于其他的用户生成内容站点类型也具有同样的适用性。
最近在ITEYE博客频道上面出现了一种新型的商业广告形式,方法如下:
1、注册多个账号(一般10个以上)。
2、从多个账号中选择一个账号,发表1-2篇博文