param

PHP快递单号识别查询api接口调用对接(快递鸟示例)

坚强是说给别人听的谎言 提交于 2019-11-28 22:29:09
背景: 不久前,自己对接调用实现了中通快递api的功能,发现如果换了其它快递再重新对接,岂不是会浪费太多的时间,物流这个接口对接是一个难题,要么需要逐一连接多家快递公司进行发货每对接一个快递公司就要开发十余个接口,开发工作量繁琐复杂。 所以选个第三方提供的快递API是最为合理的,下面给出快递鸟的api接口的设计实现。 《即时查询》的接口: RequestData和DataSign 都是签名后的数据。其他三个都是固定写法。 快递鸟 快递鸟api实现物流即时查询 1.首先要有一个快递鸟账号,根据对方的要求,完善用户申请。 2.根据自己的需求,开通服务 3.进入“我的API接口”,根据“接口”中的开发文档了解设计需求,下载官方demo,编辑为适合自己的代码。 【即时查询】代码实现 1.修改官方的demo代码,我在此分离出了一个快递类,提高适用性 2.引入类文件,实例化并进行测试 package com.zs.app; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net

spring boot 自定义repository

时光毁灭记忆、已成空白 提交于 2019-11-28 20:39:17
spring boot 提供的默认repository 适合大多场景,对于一些特殊场景,需要特殊的方法,除了使用@NAMEQUERY @QUERY 自定义sql语句外,还可以自定义基础repository 这里记录一些踩到的坑或者说遇到的需要注意的地方 1、自定义查询条件,使用specification自定义查询条件 注意的地方root 获取属性, criteriaBuilder自定义条件 package com.duoke.demo.bean; import static com.google.common.collect.Iterables.toArray; import org.springframework.data.jpa.domain.Specification; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax

Log4Net - 日志记录

妖精的绣舞 提交于 2019-11-28 20:12:13
log4net 使用方法 日志记录在我们开发中经常使用,任何在生产环境中的项目都应该有着良好的日志记录。 安装方法: 方法一(官网下载) 官方网址: http://logging.apache.org/log4net/ 下载后解压,在项目中添加引用即可。 方法二(NuGet) 搜索 “log” 开头的,,第一个就是。 快速使用 添加 “App.Config” 或 “Web.Config” 添加如下配置: 参考原文: https://www.cnblogs.com/lsgsanxiao/p/5845300.html <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <log4net> <logger name="logInfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <appender name="InfoAppender" type="log4net.Appender

图片压缩java工具类

喜你入骨 提交于 2019-11-28 19:09:30
package com.net.util; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.web.multipart.MultipartFile; import com.net.entity.ImgzipResult; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /************************************** * Description:图片上传压缩工具类 * @author zhangdi * @version 1

【转帖】Linux的NUMA机制

旧巷老猫 提交于 2019-11-28 18:58:29
Linux的NUMA机制 http://www.litrin.net/2014/06/18/linux的numa机制/ NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”,对于Linux内核来说最早出现在2.6.7版本上。这种特性对于当下大内存+多CPU为潮流的X86平台来说确实会有不少的性能提升,但相反的,如果配置不当的话,也是一个很大的坑。本文就从头开始说说Linux下关于CPU NUMA特性的配置和调优。 最早Intel在Nehalem架构上实现了NUMA,取代了在此之前一直使用的FSB前端总线的架构,用以对抗AMD的HyperTransport技术。一方面这个架构的特点是内存控制器从传统的北桥中移到了CPU中,排除了商业战略方向的考虑之外,这样做的方法同样是为了实现NUMA。 在SMP多CPU架构中,传统上多CPU对于内存的访问是总线方式。是总线就会存在资源争用和一致性问题,而且如果不断的增加CPU数量,总线的争用会愈演愈烈,这就体现在4核CPU的跑分性能达不到2核CPU的2倍,甚至1.5倍!理论上来说这种方式实现12core以上的CPU已经没有太大的意义。 Intel的NUMA解决方案,Litrin始终认为它来自本家的安藤。他的模型有点类似于MapReduce。放弃总线的访问方式,将CPU划分到多个Node中

序列化 反 序列化

孤者浪人 提交于 2019-11-28 17:47:49
class Tools { public Tools() { } /// <summary> /// 添加标志位后的字符串,字节数组 /// </summary> /// <param name="mark"></param> /// <param name="msg"></param> /// <returns></returns> public byte[] ConvertToBytesWithMark(byte mark, string msg) { return ByteAddHead(mark, ConvertToBytes(msg)); } /// <summary> /// 添加标志位的byte数组 /// </summary> /// <param name="mark"></param> /// <param name="buf"></param> /// <returns></returns> public byte[] ByteAddHead(byte mark, byte[] buf) { byte[] MarkedBuf = new byte[buf.Length + 1]; MarkedBuf[0] = mark;//标志位 Buffer.BlockCopy(buf, 0, MarkedBuf, 1, buf.Length); return

前后端数据交互,跳转

倖福魔咒の 提交于 2019-11-28 17:33:02
概述 作为一枚菜鸟,前后端交互可是大问题,经常数据交互失败,不知道怎么跳转。在这分享一下交互的小心得。 我们不妨先大概了解一下整个访问流程: 用户从输入网址按下回车,交互就已经开始了。 浏览器会将请求按照http 协议 (或者其他https,ftp等)将请求数据封装包从电脑的端口发出 -> 路由器 -> 运营商(域名解析之类的)-> 目标服务器(可能会有代理,负载均衡等等) 最终从服务器开放的端口,进入到服务器(TCP三次握手和四次挥手,Tomcat之类的,会 根据协议的内容进行解析 )-> web项目进行具体的逻辑处理 -> 返回数据 -> 浏览器接收数据( 根据协议内容进行解析 ) 整个过程,协议很重要,因为客户端和服务器都是通过协议来解析和发送信息的,最常见的http协议,协议头部的参数常用的哪几个,有什么影响。 Http协议的简介,说的很有意思: https://blog.csdn.net/u010256388/article/details/68491509/ 还有缓存问题(cookie、session、localstorage、cashe-controller等),不仅提高效率,而且有时候你 更改了代码测试却没变化的重要原因 : https://www.jianshu.com/p/9ed3e8759ce3 相应的后台tomcat的缓存处理: http://www

文件打包下载工具类 java

泄露秘密 提交于 2019-11-28 15:36:36
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 文件下载工具类 */ public class Download { /** * 普通java文件下载方法,适用于所有框架 * @param request * @param res * @param filePaths 需要打包下载的文件路径集合 路径必须是绝对路径 否则无法下载 * @param zipBasePath 下载文件压缩包之前,必须创建一个空的文件压缩包(下载完成之后删除压缩文件包),zipBasePath 是此文件压缩包所在的文件目录 * @param zipName 下载压缩包的名称 * @return * @throws IOException */ public static String downloadFilesTest(HttpServletRequest request,

springcloud+kafka集群

主宰稳场 提交于 2019-11-28 14:45:11
上节说了kafka在linux环境下怎么搭建集群。这节写一下怎么在springcloud中以stream流方式去做kafka集群对接。 1.yml配置 #spring Cloud kafka -- streams -- cloud: stream: kafka: binder: minPartitionCount: 3 # 分区数量,主要就是为了减轻单台服务器的压力,扩大并发量 brokers: 192.168.100.100:9092,192.168.100.101:9092,192.168.100.102:9092 # kafka服务地址和端口 autoCreateTopics: true autoAddPartitions: true 2.消息发送 @RestController @RequestMapping("/kafka") @EnableBinding(value = {WarningStreams.class}) public class kafkaTest { @Autowired private MessageService messageService; /** * 测试消息发送,入参就是你的topic,进行发送的时候就算kafka中没有该topic,他也会自动创建一个你传入的topic * 这里面的Msg是我封装的一个消息对象,可以是随意的一个消息对象

【shell脚本】$ 在shell脚本中的使用

戏子无情 提交于 2019-11-28 13:26:40
shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。 例如,第一个参数是$1,第二个参数是$2 $# 传递给脚本或函数的参数个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或函数的所有参数 $? 上个命令的退出状态 $$ 当前Shell进程ID $() 与 `(反引号) 一样用来命令替换使用 ${} 引用变量划分出边界 注释:$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数 #! /bin/bash echo "file name $0" echo "first param $1" echo "pid $$" echo "total num of param $#" echo "last status $?" echo "$@" echo "$*" 执行 ./1.sh hello mayuan file name ./1.sh first param hello pid