开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

Dubbo优雅服务降级之mock

Dubbo优雅服务降级之Stub dubbo作为国内互联网最常用的Java开源服务治理框架,在提供了远程调用的同时也提供了服务降级功能。 首先可以考虑一下服务降级的需求===》考虑在系统服务调用失败时可以返回指定消息而不是异常 通常来说选用dubbo的Mock功能可以实现。 在上一篇中描述到MockClusterWrapper几乎是必须的操作,实质上Mock也是通过其生成的MockClusterInvoker来实现。 public Result invoke(Invocation invocation) throws RpcException { Result result = null; String value = directory.getUrl().getMethodParameter(invocation.getMethodName(), Constants.MOCK_KEY, Boolean.FALSE.toString()).trim(); if (value.length() == 0 || value.equalsIgnoreCase("false")){ //no mock result = this.invoker.invoke(invocation); } else if (value.startsWith("force")) { if (logger.isWarnEnabled()) { logger.info("force-mock: " + invocation.getMethodName() + " force-mock enabled , url : " + directory.getUrl()); } //force:direct mock ...
Mr_Qi 发布于 2天前 阅读 248

全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

#前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份[简历](http://www.veton.cc:8080/LiveDemo/resume)吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就有几千号人,但是实时在线观看量有的居然到了惊人的百万级别,特别是游戏主播,可想而知,直播间是一个磁铁式的广告传播媒介,也难怪这么多巨头公司都抢着做直播。我不太清楚直播行业技术有多深,毕竟自己没做过,但是咱们可以自己实现一个满足几百号人同时观看的直播间呀。 ---------- # 最终成果 * [演示地址(电脑端与移动端效果不同哦)](http://www.veton.cc:8080/LiveDemo/live_room) * [服务端项目地址](https://github.com/jack-hoo/LiveRoomDemo_Server) * [客户端项目地址](https://github.com/jack-hoo/LiveRoomDemo_Client) > 手机端效果 ![动图](http://www.veton.cc/LiveDemo/dongtai1.gif ) 这个场景很熟悉吧~~ 通过obs推流软件来推流。 ![图片描述](https://static.oschina.net/uploads/img/201706/23132352_igQv.png "在这里输入图片标题")![] 户外直播,通过yas...
jack-hoo 发布于 2天前 阅读 1245 评论 25 点赞 7

深入浅出 spring-data-elasticsearch - 实战案例详解(四)

『  热烈的爱情到订婚早已是定点,婚一结一切了结。现在订了婚,彼此间还留着情感发展的余地,这是桩好事。- 《我们仨》 』 「系列文章」 深入浅出 spring-data-elasticsearch - ElasticSearch 架构初探(一) 深入浅出 spring-data-elasticsearch - 概述(二) 深入浅出 spring-data-elasticsearch - 基本案例详解(三) 深入浅出 spring-data-elasticsearch - 实战案例详解(四) 深入浅出 spring-data-elasticsearch - 架构原理以及源码浅析(五)(拼命编写ing) 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2 本文提纲 一、搜索实战场景需求 二、运行 spring-data-elasticsearch-query 工程 三、spring-data-elasticsearch-query 工程代码详解   一、搜索实战场景需求 搜索的场景会很多,常用的搜索场景,需要搜索的字段很多,但每个字段匹配到后所占的权重又不同。比如电商网站的搜索,搜到商品名称和商品描述,自然商品名称的权重远远大于商品描述。而且单词匹配肯定不如短语匹配。这样就出现了新的需求,如何确定这些短语,即自然分词。那就利用分词器,即可得到所需要的短语,然后进行...
泥沙砖瓦浆木匠 发布于 3天前 阅读 774 评论 1 点赞 1

.NET Core程序中使用User Secrets存储敏感数据

## 前言 在开发中经常会用到一些敏感数据,比如AppSecret或数据库连接字符串,无论是硬编码还是写在配置文件中,最终都要push到svn或git上。对于开源项目,这些敏感数据就无隐私可言了,对于私有项目,一旦源代码管理服务器被黑,这些敏感数据也将暴露无遗。所以,最佳实践就是不要将敏感数据写到源代码中。 以往我们常常将数据库连接字符串写在web.config中,.NET Core中写在appsettings.json中,开发环境下如果一个开发者修改了连接字符串,为了不影响其他开发者,每次提交代码的时候就应该忽略该配置文件,如果还添加了其他配置,必须提交的话,要么先撤销连接字符串的修改再提交,要么直接提交会影响其他开发人员。很多时候,我们就是直接提交了,大不了其他开发者pull下来代码再修改一下。但是,最佳实践就是不要写在配置文件中。 注意,上面提到的问题都是在开发环境下。 ## Secret Manager .NET Core中为我们提供了叫Secret Manager的工具,可以实现上文中的最佳实践,再次强调一次,Secret Manager只适用于开发环境中。 下面说一下Secret Manager,它帮我们抽象了一些细节,比如数据存储在哪以及如何存储的问题。简单来说它帮助我们将数据以明文的形式...
程序旅途 发布于 3天前 阅读 104 评论 1

那一天,我们做了一个尖尖的堡垒,今天却爆了自己的菊

关于java,关于sqlserver,关于事务隔离级别的问题,问题初级,高手绕道
卡尔码农 发布于 3天前 阅读 900 评论 18 点赞 2

dubbo源码系列之filter的前生

为什么说dubbo的声明式缓存不好用!!! dubbo源码系列之filter的今世 dubbo的filter类似于spring的aop,提供了环绕增强功能。 参考dubbo缓存代码分析 缓存是filter的一个很典型的实现。 那么filter是如何被调用的呢? 收到spring荼毒多年很自然的想到了spring的aop实现===》换汤不换药的动态代理 整篇故事要从invoker讲起。 首先介绍一下Protocol接口 /* * Copyright 1999-2011 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.dubbo.rpc; import com.alibaba.dubbo.commo...
Mr_Qi 发布于 4天前 阅读 400 评论 2

分布式系统理论(二):一致性协议Paxos

分布式系统理论第二章,此系列主要以理论为主。
月冷X心寒 发布于 4天前 阅读 394 点赞 1

DNS劫持原理与实现

    上篇说到旁路劫持的原理与实现,主要还是针对TCP下HTTP服务而言的,有粉儿问了二个问题,一个问题是基于TCP的HTTP服务可以防劫持吗,网上有许多关于HTTP防劫持的办法,有说检测服务地址的,有说分片传输请求的,有说检测ttl值异常的,有说禁止重定向的,结论是都没用,伪造报文里网络层地址原本就是用户的目标地址,否则还叫什么伪造呢,请求报文分片web端能识别劫持设备就能识别,况且你确定你分片的报文在网络设备层发送前不会合并吗,ttl异常检测完全不靠谱,不用重定向200OK照样让你乖乖跳转;另一个问题是UDP能实现旁路劫持控制吗,结论是可以,UDP不同于TCP无连接无状态,只要数据合法先到先得,早年运营商控制P2P数据传输对带宽的占用就使用过类似方法,直接看代码吧不复杂。 DNS协议 // 0 1--4 05 06 07 08 9-11 12-15 // +----+--------+----+----+----+----+--------+-------+ // | QR | opcode | AA | TC | RD | RA | <zero> | rcode | // +----+--------+----+----+----+----+--------+-------+ // +--------------------------------+ // | DNS Header: ID + flags | // +--------------------------------+ // | Quest...
厉力文武 发布于 5天前 阅读 1302 评论 5 点赞 2

深入浅出 spring-data-elasticsearch - 基本案例详解(三

『  风云说:能分享自己职位的知识的领导是个好领导。 』   欢迎来 Spring For All , 和我探讨 Spring 相关的分享。 http://spring4all.com   运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2   本文提纲 一、spring-data-elasticsearch-crud 的工程介绍 二、运行 spring-data-elasticsearch-crud 工程 三、spring-data-elasticsearch-crud 工程代码详解 一、spring-data-elasticsearch-crud 的工程介绍 spring-data-elasticsearch-crud 的工程,介绍 Spring Data Elasticsearch 简单的 ES 操作。Spring Data Elasticsearch 可以跟 JPA 进行类比。其使用方法也很简单。 二、运行 spring-data-elasticsearch-crud 工程 注意的是这里使用的是 ElasticSearch 2.3.2。是因为版本对应关系 https://github.com/spring-projects/spring-data-elasticsearch/wiki/Spring-Data-Elasticsearch---Spring-Boot---version-matrix;  Spring Boot Version (x)    Spring Data Elasticsearch Version (y)    Elasticsearch Version (z) x <= 1.3.5    y <= 1.3.4    z <= 1.7.2* x >= 1.4.x    2....
泥沙砖瓦浆木匠 发布于 5天前 阅读 2044 评论 3

Redis 通信协议-了解 Redis 客户端实现原理

# 简介 几乎所有的主流编程语言都有Redis的客户端(http://redis.io/clients),不考虑Redis非常流行的原因,如果站在技术的角度看原因还有两个: 1. 客户端与服务端之间的通信协议是在 **TCP 协议**之上构建的。 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 `\r\n` (CRLF)结尾。 2. Redis制定了 RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。 # 发送命令 RESP 在 Redis 1.2 版本中引入, 并最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式。 在这个协议中, 所有发送至 Redis 服务器的参数都是二进制安全(binary safe)的。 RESP 的规定一条命令的格式如下: ```shell *<参数数量> CR LF $<参数 1 的字节数量> CR LF <参数 1 的数据> CR LF ... $<参数 N 的字节数量> CR LF <参数 N 的数据> CR LF ``` **命令本身也作为协议的其中一个参数来发送。** 例如我们经常执行的 SET 命令,在命令行中我们输入如下: ```shell SET key value ``` 使用 RESP 协议规定的格式: ```shell *3 $3 SET...
拿客-三产 发布于 5天前 阅读 2828 评论 6 点赞 5

Redis 发布订阅

# 简介 Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息(频道没有”创建“的概念,可以直接订阅、亦可直接发布消息)。 # 命令 ### 发布消息 #### PUBLISH > **自2.0.0可用。** > > **时间复杂度:**O(N+M),其中 `N` 是频道 `channel` 的订阅者数量,而 `M` 则是使用模式订阅(subscribed patterns)的客户端的数量。 ##### 语法:**PUBLISH channel message** ##### 说明: 将信息 `message` 发送到指定的频道 `channel` 。 ##### 返回值: 接收到信息 `message` 的订阅者数量。 ##### 示例: ```shell # 向没有订阅者的频道发送信息 coderknock> PUBLISH new_channel "test publish" (integer) 0 # 向有订阅者的频道发送信息 coderknock> PUBLISH channel1 "new channel1" (integer) 1 ``` ### 订阅 #### SUBSCRIBE > **自2.0.0可用。** > > **时间复杂度:**O(N),其中 `N` 是订阅的频道的数量。 ##### 语法:**SUBSCRIBE channel [channel ...]** ##### 说明: 订阅给定的一个或多个频道的信息。 ##### 返回值: 接收到的信息(请参...
拿客-三产 发布于 6天前 阅读 2704 评论 10 点赞 4

使用 Elasticsearch 的 NGram 分词器处理模糊匹配

接到一个任务:用 Elasticsearch 实现搜索银行支行名称的功能。大概就是用户输入一截支行名称或拼音首字母,返回相应的支行名称。比如,用户输入"工行"或者"gh",我需要返回"工行XXX分行"类似这样的结果。 我心里嘀咕着:数据库不是支持通配符查询吗?为什么不直接用数据库查询? 说归说,但是任务还是要完成的。之前有在网上看过一篇文章,主要就是说用 Elasticsearch 处理通配符查询不太适合,然后我在评论中看到作者推荐了一个分词器 NGram。 这个分词器可以让通配符查询和普通的查询一样迅速,因为该分词器在数据索引阶段就把所有工作做完了: An n-gram can be best thought of as a moving window on a word. The n stands for a length. If we were to n-gram the word quick, the results would depend on the length we have chosen: Length 1 (unigram): [ q, u, i, c, k ] Length 2 (bigram): [ qu, ui, ic, ck ] Length 3 (trigram): [ qui, uic, ick ] Length 4 (four-gram): [ quic, uick ] Length 5 (five-gram): [ quick ] 若要使用 NGram 分词器作为某个字段的分词器,可在索引创建时指定,也可以更新映射关系,以下展示如何在索引创建时指定 NGram 分词...
VenyoWang 发布于 6天前 阅读 287 评论 1

python爬取淘宝商品信息并加入购物车

输入任意淘宝链接,选择属性和购买数,自动加入购物车
GaiSama 发布于 7天前 阅读 861 评论 3 点赞 6

spring boot / cloud (十) 使用quartz搭建调度中心

# spring boot / cloud (十) 使用quartz搭建调度中心 ##前言 ###quartz介绍: >Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0 ##思路 将quartz集成进spring boot,并且提供一下内容: - 配置 - 样例作业和触发器 ##实现 ###1.配置 引入maven依赖(这里的quartz使用的是2.2.3) ``` xml org.springframework spring-context-support org.quartz-scheduler quartz ${quartz.version} ``` 编写AutowiringSpringBeanJobFactory类 ``` java public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { /** * 描述 : beanFactory */ private AutowireCapableBeanFactory beanFactory; @Override public void setApplicationContext(final ApplicationContext context) { beanFactory = context.getAutowireCapableBeanFactory(); } @Override protected Object createJobInstance(final Trigger...
wangkang80 发布于 7天前 阅读 762 评论 3 点赞 2

基于jfinal Template的Shiro 标签

基于jfinal Template的Shiro 标签
冷冷gg 发布于 7天前 阅读 310 评论 4 点赞 2

springmvc集成shiro后,session、request姓汪还是姓蒋?

# 1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢慢地产生了下面几个疑惑,本篇文章将会带着疑问慢慢地解析shiro源码,从而解开心里面的那点小纠纠。 (1)** 在spring controller中,request有何不同呢 **? 于是,在controller中打印了request的类对象,发现request对象是org.apache.shiro.web.servlet.ShiroHttpServletRequest ,很明显,此时的 request 已经被shiro包装过了。 (2)众所周知,spring mvc整合shiro后,可以通过两种方式获取到session: **通过Spring mvc中controller的request获取session** ``` Session session = request.getSession(); ``` ** 通过shiro获取session ** ``` Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); ``` 那么,问题来了,** 两种方式获取的session是否相同呢 **? 这里需要看一下项目中的shiro的securityManager配置,因为配置影响了shiro session的来源。这里没有配置session管理器。 ``` ``` 在controller中再次打印了session,发现前者的session类型是 org.apache.catalina.session.StandardSessionFacade ,后者的session类型...
细肉云吞 发布于 1周前 阅读 2991 评论 15 点赞 15

Maven工程配置代码覆盖工具Jacoco

本篇博文我们将给出示例理解如何在Maven工程中配置Jacoco和如何使用Jacoco查看代码覆盖报告~ Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。 Maven工程 创建Maven工程 打开Eclipse,File->New->Project->Maven Project,新建一个Maven工程~ 点击“Next”按钮,然后填写groupId和artifactId信息后点击"Finish"按钮即可~ groupId -->  com.xxx.tutorial artifactId --> jacoco-demo 配置Jacoco 添加maven-complier-plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <skipMain>true</skipMain> <skip>true</skip> <source>1.7</source> <target>1.7</target> </configuration> </plugin> 添加jacoco-maven-plugin <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.v...
王孟君 发布于 1周前 阅读 1360 评论 3 点赞 3

iText生成中文PDF行首标点处理

我用的是iText-5.5.10,版本差别不是很大的话,应该都可以这么修改 最近在使用iText生成PDF时,遇到了行首标点问题,可是找了半天,也没找到一个明确的可行解决方案,后来找到一个看着比较靠谱的,http://bbs.csdn.net/topics/380075439,也说的模模糊糊的,试了也没好使,不过也提供了一个思路。 下面直接上干货 下载iText源码,改源码是最直接有效的 解压后将itext子项目导入开发工具中,待会改完后还要重新打包的 添加一个中文标点数据类 package com.itextpdf.text.pdf; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/6/16. */ public class ChineseSymbolSplit { public static List<Character> chSymSplits; static { chSymSplits = new ArrayList<Character>(); chSymSplits.add(','); chSymSplits.add('、'); chSymSplits.add('。'); chSymSplits.add(':'); chSymSplits.add('!'); chSymSplits.add(';'); chSymSplits.add('?'); /** 添加你所需的标点 ***/ } }   找到类com.itextpdf.text.pdf.PdfChunk的spl...
lixuelong 发布于 1周前 阅读 42

docker搭建oracle开发环境

oracle太大了,对于开发人员来说,在本机安装一个oracle代价不菲。 在docker环境中,我找了很久,发现wnameless/oracle-xe-11g 镜像还不错,很方便搭建起来。 但是也发现一个问题,挂载本地卷遇到了麻烦。一旦挂载,就无法登陆了。从官方的issues中发现,有一个fork版本解决了这个问题,记录一下。 创建docker-compose工作目录 --- ``` mkdir -p oracle/data cd oracle touch docker-compose.yml ``` 配置docker-compose.yml --- ```yaml version: '2' services: oracle: image: sath89/oracle-xe-11g container_name: oracle ports: - 1521:1521 volumes: - ./data:/u01/app/oracle ``` 启动容器 --- ``` #启动oracle docker-compose up -d #关闭容器 docker-compose kill ``` 登录oracle --- 登录使用的参数: ``` SID: xe username: system password: oracle ``` 注意:原文写错了用户名,不是admin,是system,sorry 进入后自行修改密码,创建用户等即可。 为什么要绑定本地卷 --- wnameless版本无法绑定本地卷的问题,会导致我们一旦重启容器或重建容器,我们在数据库中的所有操作、创建的表以及数据等等全部丢失了。 绑定了本地卷,可以让容器的数据持久化到本机。就...
polly 发布于 1周前 阅读 2165 评论 13 点赞 4

dubbo缓存代码分析

dubbo是Ali出品的soa框架,属于互联网企业常见的rpc选择框架。 前几篇分析了多级缓存的相关代码,本篇就dubbo的缓存进行梳理。 dubbo的缓存针对的是客户端的缓存,可以设计相关的缓存策略 结果缓存,用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用户加缓存的工作量。 lru 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。 threadlocal 当前线程缓存,比如一个页面渲染,用到很多portal,每个portal都要去查用户信息,通过线程缓存,可以减少这种多余访问。 jcache 与JSR107集成,可以桥接各种缓存实现。 默认情况下使用的是lru策略。 dubbo中关于各种配置选择了扩展点作为配置选项 通常情况下使用SPI声明 / 此方法已经getExtensionClasses方法同步过。 private Map<String, Class<?>> loadExtensionClasses() { final SPI defaultAnnotation = type.getAnnotation(SPI.class); if(defaultAnnotation != null) { String value = defaultAnnotation.value(); if(value != null && (value = value.trim()).length() > 0) { String[] names = NAME_SEPARATOR.split(value); if(names.length > 1) { ...
Mr_Qi 发布于 1周前 阅读 51

常用 maven 仓库

共有的仓库 http://repo1.maven.org/maven2/ http://repository.jboss.com/maven2/ http://repository.sonatype.org/content/groups/public/ http://mirrors.ibiblio.org/pub/mirrors/maven2/org/acegisecurity/ 私有的仓库 http://repository.codehaus.org/ http://snapshots.repository.codehaus.org/ http://people.apache.org/repo/m2-snapshot-repository http://people.apache.org/repo/m2-incubating-repository/ 搜索    http://mvnrepository.com/    http://search.maven.org/#search
双峪 发布于 2年前 阅读 10

存储过程简单例子

以前一直不明白存储过程,也没有用过,现在通过一个简单例子终于搞懂,以后可以深入
金樽清酒斗十千 发布于 4个月前 阅读 5

redis数据结构之zskiplist详解

跳跃表是一种有序的数据结构,其通过在每个节点中维护多个指向其他的节点的指针而达到快速查询的目的。跳跃表的平均时间复杂度为O(logN),最坏复杂度为O(N),其性能一般情况下可以与平衡树相媲美。
爱宝贝丶 发布于 4个月前 阅读 16

开源中国杭州源创会报名开始,剖析无人驾驶背后的数据库(PostgreSQL)。

趁着六月美景正好,OSC源创会带着自由、开放、分享的开源精神,也带着满满的干货主题,邀请杭州的各位来约。
源创会

Zookeeper序列化组件Jute分析

简介 Jute是Zookeeper中的序列化组件,最初也是Hadoop中的默认序列化组件,前身就是Hadoop Record IO,后来由于Apache Avro具有更好的跨语言性,丰富的数据结构和对MapReduce的支持,并且能够方便的用于RPC调用;因此Hadoop废弃了Record IO,开始使用Avro,并且将Record IO剥离出来,成为了一个独立的序列化组件,重新命名为Jute。 Zookeeper从最早的版本开始就一直使用Jute作为序列化工具,直到现在最新的版本zookeeper-3.4.9依然使用Jute;至于为什么没有换成性能更好,通用性更强的如:Apache Avro,Thrift,Protobuf等序列化组件,主要还是由于考虑到新老版本序列化组件的兼容性,另一方面Jute并没有成为Zookeeper的瓶颈所在;下面针对Jute使用和部分源码的分析。 简单使用 首先对Jute简单使用,对Jute有一个初步的了解: 1.提供一个实现接口Record的bean public class TestBean implements Record { private int intV; private String stringV; public TestBean() { } public TestBean(int intV, String stringV) { this.intV = intV; this.stringV = stringV; } //get/set方法 @Override publ...
ksfzhaohui 发布于 6个月前 阅读 58 点赞 1

node 用ws写的WebSocket服务端连接数总在1000左右的坑

node ws 连接数只在1000左右问题
skq 发布于 12个月前 阅读 78

RocketMQ 事务消息

    RocketMQ将事务拆分成小事务异步执行的方式来执行。     RocketMQ第一阶段发送Prepared消息时,会拿到消息的地址,第二阶段执行本地事物,第三阶段通过第一阶段拿到的地址去访问消息,并修改状态。RocketMQ会定期扫描消息集群中的事物消息,这时候发现了Prepared消息,它会向消息发送者确认,RocketMQ会根据发送端设置的策略来决定是回滚还是继续发送确认消息。这样就保证了消息发送与本地事务同时成功或同时失败。 RocketMQ事务消息: TransactionCheckListenerImpl: package aaron.mq.producer; import com.alibaba.rocketmq.client.producer.LocalTransactionState; import com.alibaba.rocketmq.client.producer.TransactionCheckListener; import com.alibaba.rocketmq.common.message.MessageExt; /** * Created by Aaron Sheng on 10/19/16. * TransactionCheckListenerImpl handle transaction unsettled. * Broker will notify producer to check local transaction. */ public class TransactionCheckListenerImpl implements TransactionCheckListener { @Override public LocalTransactionState checkLocalTransactionState(Messag...
AaronSheng 发布于 8个月前 阅读 318

用redis实现消息队列

通过Redis实现消息队列,FIFO、优先级队列以及定时队列
Fly的狐狸 发布于 2年前 阅读 3539 评论 12 点赞 2

Django REST framework的各种技巧——3.权限

django内置强大的权限系统,restframework也完全支持,为什么不用呢?
duoduo3_69 发布于 1年前 阅读 416 点赞 2

redis对zset操作总结

redis:ZSet类型的操作命令 1:zadd:添加元素,格式是zadd zset的key score值项的值,Score和项可以是多对,score可以是整数, 也可以是浮点数,还可以是+inf表示正无穷大,-inf表示负无穷大 2:zrange:获取索引区间内的元素,格式是zrange zset的key 起始索引终止索引(withscores) 3:zrangebyscore:获取分数区间内的元素,格式是zrangebyscore zset的key 起始score 终止score (withscores),默认是包含端点值的,如果加上“(”表示不包含;后面还可以加上limit来限制 4:zrem:删除元素,格式是zrem zset的key 项的值,项的值可以是多个 5:zcard:获取集合中元素个数,格式是zcard zset的key 6:zincrby:增减元素的Score,格式是zincrby zset的key 正负数字项的值 7:zcount:获取分数区间内元素个数,格式是zcount zset的key 起始score 终止score 8:zrank:获取项在zset中的索引,格式是zrank zset的key 项的值 9:zscore:获取元素的分数,格式是zscore zset的key 项的值,返回项在zset中的score 10:zrevrank:获取项在zset中倒序的索引,格式是zrevrank zset的key 项的值 11:zrevrange:获取索引区间内的元素,格式是zrevrange zset的key 起始索引终止索引(wi...
daydayup08 发布于 1年前 阅读 237 点赞 1

Debian vps使用DenyHosts防止SSH密码暴力破解

在Debian VPS常用安全设置一文中我介绍了vps的一些基本的安全设置,如修改SSH端口,禁止root用户登陆等等。今天主要介绍使用DenyHosts防止SSH密码暴力破解。 DenyHosts介绍 DenyHosts是一款python脚本,它能够分析/var/log/secure(centos),/var/log/auth.log(debian)等SSH日志文件,当发现同一IP在进行多次SSH密码尝试(穷举扫描,字典攻击)时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。目前DenyHosts最新版本为2.6版本。 官方地址:http://denyhosts.sourceforge.net/ DenyHosts安装 DenyHosts基本的安装要求为: Python v2.3 及以上; SSH server支持w/ tcp_wrappers ,这个一般是支持的。 由于DenyHosts会在安装好之后对/var/log/auth.log文件进行分析,如果之前有过登陆失败的情况可能会导致自己的IP被屏蔽。因此,在安装之前最好要清空/var/log/auth.log,使用以下代码 1 echo "" > /var/log/auth.log 下面开始介绍DenyHosts在debian上的具体安装过程。 1、下载 DenyHosts 并解压 1 2 3 wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz tar zxvf DenyHosts-2.6.tar.gz cd DenyHosts-2.6 2、安装pyt...
神勇小白鼠 发布于 3周前 阅读 27

MAC pf 防火墙OS 10.10 开启80(http)端口的方法

MAC OS 本质上还是 Unix 系统, Unix 系统大多默认情况下非root用户是无法使用小于1024的常用端口的.这时候如果你开发中需要在普通用户下用到80端口, 比如 tomcat, 比如 vitualbox 下构建了一个 http 服务, 若你想直接通过 浏览器的 localhost 访问的话(比用加上莫名其妙的”:端口”的话)你就需要做一些系统端口转发的工作. MAC OS 10.10 上 pfctl 就可以做这一件事情, 详情请参见 man pfctl 或者 man pf.conf 具体操作如下: 首先在 /etc/pf.anchors/ 新建一个 http 文件内容如下: rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080 rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 4443 然后使用 pfctl 命令检测配置文件 sudo pfctl -vnf /etc/pf.anchors/http 如果没有报错(正确的打印了配置信息, 没有明显的出错信息), 即修改pf的主配置文件/etc/pf.conf, 来引入这个转发规则: 在 rdr-anchor "com.apple/*" 下, 添加如下 anchor 声明: rdr-anchor "http-forwarding" pf.conf对指令的顺序有严格要求, 否则会报出 Rules must be in order: options, normalization, queueing, translation, filtering 的...
china008 发布于 3年前 阅读 217

xml 3 字节的 UTF-8 序列的字节 3 无效

xml 出现3 字节的 UTF-8 序列的字节 3 无效
evil_01 发布于 1年前 阅读 1530 点赞 2

openssl rsa 私钥加密,公钥解密测试

1)生成RSA密钥文件 2)从RSA密钥文件中进行加载密钥
迷尘中一条狗 发布于 2年前 阅读 1070

使用phpexcel解析Excel数据表并存储到数据库中全过程_PHP_thinkphp_cmf

使用PHPExcel解析Excel数据表并存储到数据库中全过程,thinkphp模板
尘世如潮 发布于 1年前 阅读 409 评论 1 点赞 2

maven 通过cargo配置运行到web服务器

1.配置standalone将本地tomcat服务器配置拷贝下来,并运行在standalone指定的目录下,可以运行为指定端口 [html] view plaincopy <plugin>       <groupId>org.codehaus.cargo</groupId>       <artifactId>cargo-maven2-plugin</artifactId>       <version>1.2.4</version>       <configuration>           <container>               <containerId>tomcat7x</containerId>               <home>${env.CATALINA_HOME}</home>           </container>           <configuration>               <type>standalone</type>               <home>${project.build.directory}/target/tomcat7x</home>               <properties>                   <cargo.servlet.port>9234</cargo.servlet.port>               </properties>           </configuration>       </configuration>   </plugin> 执行mvn package cargo:start 2.下载web服务器并运行 [html] view plaincopy <container>...
liangxiao 发布于 3年前 阅读 787

【AngularJs学习笔记四】Grunt+Bower+Requirejs+Angular

#0 系列目录# - AngularJs学习笔记 - [【AngularJs学习笔记一】Bower解决js的依赖管理](http://my.oschina.net/xianggao/blog/607613) - [【AngularJs学习笔记二】Yeoman自动构建js项目](http://my.oschina.net/xianggao/blog/608046) - [【AngularJs学习笔记三】Grunt任务管理器](http://my.oschina.net/xianggao/blog/608551) - [【AngularJs学习笔记四】Grunt + Bower + Requirejs + Angular](http://my.oschina.net/xianggao/blog/608779) #1 前端开发工具介绍# 1. **Grunt – Js任务管理工具**,通过各种插件对项目进行各种操作,比如文件转换、运行测试、打包部署等。相当于java里的ant/maven/gradle,ruby中的rack,scala中的sbt。 2. **Bower – Js库依赖管理工具**,当你需要jquery时,不需要手动下载,只需要执行 bower install jquery。 3. **RequireJs – Js库加载管理,及模块化支持**,可以按需及并行加载js库,可以把我们的代码以模块化的方式组织。 4. **AngularJs – Js前端框架**,支持依赖注入,双向绑定等我认为很重要的功能。 这套东西都是比较基础且使用比较广泛的。一般一旦在项目中引入前端框架,或者需要写比较多的Js代码时,我们都会采用它们,所...
陶邦仁 发布于 1年前 阅读 699 点赞 1

terracotta + tomcat + nginx集群

今天研究了一下terracotta + tomcat的集群,记录一下。  一、环境      本机,ip:192.168.2.158  win7 64位      虚拟机,ip:192.168.81.128 RedHat 64位      本机装两个tomcat 和 一个terracotta,虚拟机装一个teracotta。      虚拟机也要装jdk,因为terracotta需要jdk的支持。      terracotta安装目录,win7为G:\java_workspaces\terracotta-3.7.7  虚拟机为/usr/lws_life/terracotta-3.7.7  二、步骤      1、将terracotta安装目录下sessions文件夹里的terracotta-session-1.3.7.jar 和 common文件夹里的 terracotta-toolkit-1.6-runtime-5.7.0.jar 文件 都拷贝到 tomcat的lib中(两个tomcat都需要拷贝)。      2、在terracotta安装目录下创建tc-config.xml的配置文件,内容如下  <?xml version="1.0" encoding="UTF-8" ?> <tc:tc-config xmlns:tc="http://www.terracotta.org/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-6.xsd"> <tc-properties> <property name="l2.nha.dirtydb.autoDelete" value="true"/> ...
幽冥领域 发布于 6个月前 阅读 78

nodejs中req.body 为空的问题

nodejs中req.body 为空的问题
wangxuxu 发布于 3年前 阅读 5838 评论 2

基于Maven 构建rpm包

Java maven rpm
linking12 发布于 2年前 阅读 1501 评论 4 点赞 1

lintCode --- Combinations(组合)

###题目: > Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. > 给你两个整数 n 和 k ,从 **1 -- n** 中返回所有可能的长度为 **k** 的组合 >**Example:** >If n = 4 and k = 2, >a solution is:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]] ###分析: 题目目的是列举出所有的可能的组合。 从第1个数为 **1** 开始,将之后的所有可能的组合,分别 `add()`进数组。 然后是第二个数为 **2** ... 以此类推。 因此将之归纳为 **深度优先搜索**,先探索到底,再重新开始搜索。 ###代码: ``` public class Solution { /** * @param n: Given the range of numbers * @param k: Given the numbers of combinations * @return: All the combinations of k numbers out of 1..n */ public List> combine(int n, int k) { // write your code here List> listFi = new ArrayList>(); List listSe = new ArrayList(); combine(listFi,listSe,1 , n ,k); return listFi; } public void combine(List> li , List lis , int start ,int n, int k){ if(lis.size() == k){ li.add(new ArrayList(lis)); return; } //深度优先。先完成i=1的归并。 ...
柳初心 发布于 3小时前 阅读 2

【福利】蓝色巨人的云计算PaaS平台IBM Bluemix免费试用!

IBM Bluemix,包含认知、物联网、大数据分析、安全、DevOps、应用、应用整合、移动、计算、网络、存储等 11 大类共 140 多个服务的云计算平台。
IBM Bluemix

springmvc集成shiro后,session、request姓汪还是姓蒋?

# 1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢慢地产生了下面几个疑惑,本篇文章将会带着疑问慢慢地解析shiro源码,从而解开心里面的那点小纠纠。 (1)** 在spring controller中,request有何不同呢 **? 于是,在controller中打印了request的类对象,发现request对象是org.apache.shiro.web.servlet.ShiroHttpServletRequest ,很明显,此时的 request 已经被shiro包装过了。 (2)众所周知,spring mvc整合shiro后,可以通过两种方式获取到session: **通过Spring mvc中controller的request获取session** ``` Session session = request.getSession(); ``` ** 通过shiro获取session ** ``` Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); ``` 那么,问题来了,** 两种方式获取的session是否相同呢 **? 这里需要看一下项目中的shiro的securityManager配置,因为配置影响了shiro session的来源。这里没有配置session管理器。 ``` ``` 在controller中再次打印了session,发现前者的session类型是 org.apache.catalina.session.StandardSessionFacade ,后者的session类型...
细肉云吞 发布于 1周前 阅读 2991 评论 15 点赞 15

知名公司拿我的开源软件( XXL-JOB)申请国家知识专利,我该怎么办?

>关于这件事情我们的本意和唯一诉求是 “就事论事,撤销专利”,无意伤害任何人。为了防止事情被误导和进一步扩大,我隐去了发明人、代理人和申请人的相关信息,在此希望大家不要转发和恶意评论此事,理智对待切勿网络暴力。我们的最终目标是要解决问题,希望大家可以提供一个协商解决的环境。 ## 请大家理智对待,不要发表过激言论 感谢各位的关注,相关事情已经委托"开源中国"处理,正在和对方沟通中。我们的诉求只有两点: - 1、对方撤销专利。(专利发明人已积极道歉并,且勿网络暴力); - 2、对方正面声明。(给关注的朋友一个交代); ## 声明 - 1、XXL-JOB自始至终是一款开源软件,永远开源免费,社区成员将会持续提供技术支持。 - 2、XXL-JOB一直以来是GPL协议开源,目的是为了禁止各种定制版本变相收费,我们承诺产品免费。 - 3、希望冒名申请国家发明专利的公司和个人正视问题:**尽快撤销申请专利,并且公开声明**。 - 4、请大家就事论事,不要变成网络暴力,也不要偏离主题啊。 >抛开冒名申请国家发明专利不谈,在此我有几个问题: - 开源软件是否能够申请国家知识专利? - 开源软件如何进行保护,开源协议还是专利? - 开源作者的辛苦成果,如何保证不会变成...
许雪里 发布于 2周前 阅读 75340 评论 418 点赞 102 打赏 4

DNS劫持原理与实现

    上篇说到旁路劫持的原理与实现,主要还是针对TCP下HTTP服务而言的,有粉儿问了二个问题,一个问题是基于TCP的HTTP服务可以防劫持吗,网上有许多关于HTTP防劫持的办法,有说检测服务地址的,有说分片传输请求的,有说检测ttl值异常的,有说禁止重定向的,结论是都没用,伪造报文里网络层地址原本就是用户的目标地址,否则还叫什么伪造呢,请求报文分片web端能识别劫持设备就能识别,况且你确定你分片的报文在网络设备层发送前不会合并吗,ttl异常检测完全不靠谱,不用重定向200OK照样让你乖乖跳转;另一个问题是UDP能实现旁路劫持控制吗,结论是可以,UDP不同于TCP无连接无状态,只要数据合法先到先得,早年运营商控制P2P数据传输对带宽的占用就使用过类似方法,直接看代码吧不复杂。 DNS协议 // 0 1--4 05 06 07 08 9-11 12-15 // +----+--------+----+----+----+----+--------+-------+ // | QR | opcode | AA | TC | RD | RA | <zero> | rcode | // +----+--------+----+----+----+----+--------+-------+ // +--------------------------------+ // | DNS Header: ID + flags | // +--------------------------------+ // | Quest...
厉力文武 发布于 5天前 阅读 1302 评论 5 点赞 2

全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

#前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份[简历](http://www.veton.cc:8080/LiveDemo/resume)吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就有几千号人,但是实时在线观看量有的居然到了惊人的百万级别,特别是游戏主播,可想而知,直播间是一个磁铁式的广告传播媒介,也难怪这么多巨头公司都抢着做直播。我不太清楚直播行业技术有多深,毕竟自己没做过,但是咱们可以自己实现一个满足几百号人同时观看的直播间呀。 ---------- # 最终成果 * [演示地址(电脑端与移动端效果不同哦)](http://www.veton.cc:8080/LiveDemo/live_room) * [服务端项目地址](https://github.com/jack-hoo/LiveRoomDemo_Server) * [客户端项目地址](https://github.com/jack-hoo/LiveRoomDemo_Client) > 手机端效果 ![动图](http://www.veton.cc/LiveDemo/dongtai1.gif ) 这个场景很熟悉吧~~ 通过obs推流软件来推流。 ![图片描述](https://static.oschina.net/uploads/img/201706/23132352_igQv.png "在这里输入图片标题")![] 户外直播,通过yas...
jack-hoo 发布于 2天前 阅读 1245 评论 25 点赞 7

Maven工程配置代码覆盖工具Jacoco

本篇博文我们将给出示例理解如何在Maven工程中配置Jacoco和如何使用Jacoco查看代码覆盖报告~ Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。 Maven工程 创建Maven工程 打开Eclipse,File->New->Project->Maven Project,新建一个Maven工程~ 点击“Next”按钮,然后填写groupId和artifactId信息后点击"Finish"按钮即可~ groupId -->  com.xxx.tutorial artifactId --> jacoco-demo 配置Jacoco 添加maven-complier-plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <skipMain>true</skipMain> <skip>true</skip> <source>1.7</source> <target>1.7</target> </configuration> </plugin> 添加jacoco-maven-plugin <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.v...
王孟君 发布于 1周前 阅读 1360 评论 3 点赞 3

那一天,我们做了一个尖尖的堡垒,今天却爆了自己的菊

关于java,关于sqlserver,关于事务隔离级别的问题,问题初级,高手绕道
卡尔码农 发布于 3天前 阅读 900 评论 18 点赞 2

docker搭建oracle开发环境

oracle太大了,对于开发人员来说,在本机安装一个oracle代价不菲。 在docker环境中,我找了很久,发现wnameless/oracle-xe-11g 镜像还不错,很方便搭建起来。 但是也发现一个问题,挂载本地卷遇到了麻烦。一旦挂载,就无法登陆了。从官方的issues中发现,有一个fork版本解决了这个问题,记录一下。 创建docker-compose工作目录 --- ``` mkdir -p oracle/data cd oracle touch docker-compose.yml ``` 配置docker-compose.yml --- ```yaml version: '2' services: oracle: image: sath89/oracle-xe-11g container_name: oracle ports: - 1521:1521 volumes: - ./data:/u01/app/oracle ``` 启动容器 --- ``` #启动oracle docker-compose up -d #关闭容器 docker-compose kill ``` 登录oracle --- 登录使用的参数: ``` SID: xe username: system password: oracle ``` 注意:原文写错了用户名,不是admin,是system,sorry 进入后自行修改密码,创建用户等即可。 为什么要绑定本地卷 --- wnameless版本无法绑定本地卷的问题,会导致我们一旦重启容器或重建容器,我们在数据库中的所有操作、创建的表以及数据等等全部丢失了。 绑定了本地卷,可以让容器的数据持久化到本机。就...
polly 发布于 1周前 阅读 2165 评论 13 点赞 4

spring boot / cloud (十) 使用quartz搭建调度中心

# spring boot / cloud (十) 使用quartz搭建调度中心 ##前言 ###quartz介绍: >Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0 ##思路 将quartz集成进spring boot,并且提供一下内容: - 配置 - 样例作业和触发器 ##实现 ###1.配置 引入maven依赖(这里的quartz使用的是2.2.3) ``` xml org.springframework spring-context-support org.quartz-scheduler quartz ${quartz.version} ``` 编写AutowiringSpringBeanJobFactory类 ``` java public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { /** * 描述 : beanFactory */ private AutowireCapableBeanFactory beanFactory; @Override public void setApplicationContext(final ApplicationContext context) { beanFactory = context.getAutowireCapableBeanFactory(); } @Override protected Object createJobInstance(final Trigger...
wangkang80 发布于 7天前 阅读 762 评论 3 点赞 2

Redis 发布订阅

# 简介 Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息(频道没有”创建“的概念,可以直接订阅、亦可直接发布消息)。 # 命令 ### 发布消息 #### PUBLISH > **自2.0.0可用。** > > **时间复杂度:**O(N+M),其中 `N` 是频道 `channel` 的订阅者数量,而 `M` 则是使用模式订阅(subscribed patterns)的客户端的数量。 ##### 语法:**PUBLISH channel message** ##### 说明: 将信息 `message` 发送到指定的频道 `channel` 。 ##### 返回值: 接收到信息 `message` 的订阅者数量。 ##### 示例: ```shell # 向没有订阅者的频道发送信息 coderknock> PUBLISH new_channel "test publish" (integer) 0 # 向有订阅者的频道发送信息 coderknock> PUBLISH channel1 "new channel1" (integer) 1 ``` ### 订阅 #### SUBSCRIBE > **自2.0.0可用。** > > **时间复杂度:**O(N),其中 `N` 是订阅的频道的数量。 ##### 语法:**SUBSCRIBE channel [channel ...]** ##### 说明: 订阅给定的一个或多个频道的信息。 ##### 返回值: 接收到的信息(请参...
拿客-三产 发布于 6天前 阅读 2704 评论 10 点赞 4

深入浅出 spring-data-elasticsearch - 实战案例详解(四)

『  热烈的爱情到订婚早已是定点,婚一结一切了结。现在订了婚,彼此间还留着情感发展的余地,这是桩好事。- 《我们仨》 』 「系列文章」 深入浅出 spring-data-elasticsearch - ElasticSearch 架构初探(一) 深入浅出 spring-data-elasticsearch - 概述(二) 深入浅出 spring-data-elasticsearch - 基本案例详解(三) 深入浅出 spring-data-elasticsearch - 实战案例详解(四) 深入浅出 spring-data-elasticsearch - 架构原理以及源码浅析(五)(拼命编写ing) 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2 本文提纲 一、搜索实战场景需求 二、运行 spring-data-elasticsearch-query 工程 三、spring-data-elasticsearch-query 工程代码详解   一、搜索实战场景需求 搜索的场景会很多,常用的搜索场景,需要搜索的字段很多,但每个字段匹配到后所占的权重又不同。比如电商网站的搜索,搜到商品名称和商品描述,自然商品名称的权重远远大于商品描述。而且单词匹配肯定不如短语匹配。这样就出现了新的需求,如何确定这些短语,即自然分词。那就利用分词器,即可得到所需要的短语,然后进行...
泥沙砖瓦浆木匠 发布于 3天前 阅读 774 评论 1 点赞 1

基于jfinal Template的Shiro 标签

基于jfinal Template的Shiro 标签
冷冷gg 发布于 7天前 阅读 310 评论 4 点赞 2

python爬取淘宝商品信息并加入购物车

输入任意淘宝链接,选择属性和购买数,自动加入购物车
GaiSama 发布于 7天前 阅读 861 评论 3 点赞 6

dubbo源码系列之filter的前生

为什么说dubbo的声明式缓存不好用!!! dubbo源码系列之filter的今世 dubbo的filter类似于spring的aop,提供了环绕增强功能。 参考dubbo缓存代码分析 缓存是filter的一个很典型的实现。 那么filter是如何被调用的呢? 收到spring荼毒多年很自然的想到了spring的aop实现===》换汤不换药的动态代理 整篇故事要从invoker讲起。 首先介绍一下Protocol接口 /* * Copyright 1999-2011 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.dubbo.rpc; import com.alibaba.dubbo.commo...
Mr_Qi 发布于 4天前 阅读 400 评论 2

分布式系统理论(二):一致性协议Paxos

分布式系统理论第二章,此系列主要以理论为主。
月冷X心寒 发布于 4天前 阅读 394 点赞 1

Spring定时任务的几种实现

近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。   从任...
beibugulf 发布于 7天前 阅读 211

持续集成篇 --Hudson持续集成服务器的安装配置与使用

样例项目参考视频教程:http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53   IP:192.168.4.221  8G内存(Hudson多个工程在同时构建的情况下比较耗内存) 环境:CentOS 6.6、JDK7 Hudson不需要用到数据库   Hudson只是一个持续集成服务器(持续集成工具),要想搭建一套完整的持续集成管理平台,还需要用到前面课程中所讲到的SVN、Maven、Sonar等工具,按需求整合则可。                                               1、  安装JDK并配置环境变量(略) JAVA_HOME=/usr/local/java/jdk1.7.0_72   2、  Maven本地仓库的安装(使用Maven作为项目构建与管理工具): (1)下载maven-3.0.5 (注意:建议不要下载3.1或更高版本的Maven,因为与Hudson进行集成时会有问题,之前有遇到过): # wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz   (2)解压: # tar -zxvf apache-maven-3.0.5-bin.tar.gz # mv apache-maven-3.0.5 maven-3.0.5   (3)配置Maven环境变量: # vi /etc/profile ## maven env export MAVEN_HOME=/root/maven-3.0.5 export PATH=$PATH:$MAVEN...
赵蕊 发布于 7天前 阅读 153 评论 2

spring boot / cloud (八) 使用RestTemplate来构建远程调用服务

# spring boot / cloud (八) 使用RestTemplate来构建远程调用服务 ##前言 上周因家里突发急事,请假一周,故博客没有正常更新 ###RestTemplate介绍: >RestTemplate是spring框架中自带的rest客户端工具类,具有丰富的API,并且在spring cloud中,标记@LoadBalanced注解,可以实现客户端负载均衡的rest调用. ##思路 RestTemplate虽然提供了丰富的API,但是这些API过于底层,如果不稍加控制,让开发人员随意使用,那后续的代码也将会变的五花八门,难以维护. 同时,当系统规模大了之后,将会有更多的服务,并且服务之间的调用关系也将更加复杂,如果不进行管控治理的话,同样,项目同期也将越来越不可控, 最后,服务间调用也需要有明确的权限认证机制,最好是能通过配置的方式来明确,哪些服务可以调用那些服务.从而来把控项目的复杂度. 本文将从以下几点来提供一个解决问题的思路: - 通过spring boot的@ConfigurationProperties机制来定义远程服务的元数据,从而实现权限认证的配置化 - 使用HandlerInterceptor来进行拦截,实现权限的验证 - 定义通用Rms类,来规范RestTemplate的使用 ##实现 ###1.实现权限配置 ####1.定义Application元数据 ``` java public class ApplicationMeta implements Seria...
wangkang80 发布于 2周前 阅读 2635 评论 5 点赞 6

Spring Boot中文文档(官方文档翻译 基于1.5.2.RELEASE)

Spring Boot官方文档中文翻译(更新至 29. 使用SQL数据库)
侯法超 发布于 3个月前 阅读 6997 评论 19 点赞 14

基于Dubbo的分布式事务框架(LCN)

基于Dubbo的分布式事务框架(LCN) 该框架依赖Redis/dubbo/txManager服务。依赖第三方框架lorne_core 原理与功能 基于对spring tx PlatformTransactionManager的本地模块事务控制从而达到全局控制事务的目的。该框架兼容任何依赖PlatformTransactionManager的DB框架。利用三阶段提交的方式来确保事务的一致性,支持本地事务和分布式事务框架共存,当方法进入的是本地事务方法,框架将不做任何分布式事务处理。当需要用到分布式事务的时候只需要在方法上添加分布式事务的注解即可。框架由于基于Spring本地事务做的封装,基本支持依赖spring的所有db框架。并在帖子底部提供了对springjdbc/hibernate/mybatis的演示demo。 该框架在设计时就考虑到大型分布式的应用场景,因此框架支持对于dubbo单个模块的集群化。并且TxManager也支持集群化。 框架基于三阶段提交: 锁定事务单元 确认事务模块状态 通知事务 关于LCN框架的详细设计请见txManager说明 框架使用教程 需要先部署redis服务。 部署TxManager全局事务协调管理器。 本地项目依赖transaction库. maven仓库地址     <repositories>         <repository>             <id>lorne</id>             <u...
赵蕊 发布于 3天前 阅读 126

Redis 通信协议-了解 Redis 客户端实现原理

# 简介 几乎所有的主流编程语言都有Redis的客户端(http://redis.io/clients),不考虑Redis非常流行的原因,如果站在技术的角度看原因还有两个: 1. 客户端与服务端之间的通信协议是在 **TCP 协议**之上构建的。 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 `\r\n` (CRLF)结尾。 2. Redis制定了 RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。 # 发送命令 RESP 在 Redis 1.2 版本中引入, 并最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式。 在这个协议中, 所有发送至 Redis 服务器的参数都是二进制安全(binary safe)的。 RESP 的规定一条命令的格式如下: ```shell *<参数数量> CR LF $<参数 1 的字节数量> CR LF <参数 1 的数据> CR LF ... $<参数 N 的字节数量> CR LF <参数 N 的数据> CR LF ``` **命令本身也作为协议的其中一个参数来发送。** 例如我们经常执行的 SET 命令,在命令行中我们输入如下: ```shell SET key value ``` 使用 RESP 协议规定的格式: ```shell *3 $3 SET...
拿客-三产 发布于 5天前 阅读 2828 评论 6 点赞 5

加权随机的JAVA实现

我们的小程序上有个随机显示一张壁纸的功能。最近产品提出,这个壁纸不能完全随&...
许乌龙 发布于 55分钟前 阅读 1

《Inside C#》笔记(七) Attribute

Attribute特性可以说是具有开创新的意义,因为一般的语言在被设计出来后,它所具有的能力就已经固定了。而借助Attribute特性,我们可以为C#已有的类型附加信息,既可以在编程时(design-time)附加(如代码描述)、也可以附加运行时(run-time)信息(如数据库字段映射)、还可以使用Attribute控制代码的行为(如权限检查)。Attribute可以提供无限的可能。   一 Attribute的声明 在使用Attribute标签之前,首先要定义它     上面的代码就是Attribute的声明方式,[RegistryKey]标签的背后是一个继承了System.Attribute的类RegistryKeyAttribute,类的构造函数有两个参数,那么使用时也要对应传递两个参数   约定Attribute声明时类名称使用***Attribute,以Attribute结尾,在使用时则可以省去结尾的Attribute。   二 Attribute的使用 为了查找附加在一个类型上的Attribute,需要用反射的方式。 a) 类上的Attribute 定义一个Attribute如下     然后在MyRemoteableClass标记     那么,RemoteObjectAttribute的使用方式就可以是这样的。 使用typeof获取到类型后,使用.GetCustomAttributes()方法可以获取所有附加的Attribute     b) 方法上的Attribute 比如有一个T...
zhixin9001 发布于 2小时前 阅读 2

SpringBoot集成Redis来实现缓存技术方案

概述 在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求。 Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,Redis 的优势包括它的速度、支持丰富的数据类型、操作原子性,以及它的通用性。 案例整合 本案例是在之前一篇SpringBoot + Mybatis + RESTful的基础上来集成Redis的,所以大家如有什么不明白的地方可以前往https://my.oschina.net/feinik/blog/879266,由于篇幅原因这里不一一贴出所有的代码,具体完整案例代码可以看这里:https://github.com/AIFEINIK/SpringBoot-Learn/tree/master/spring-boot-redis2,关于Redis如何安装可自行google。 1、在Maven pom.xml文件中加入Redis包 <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>${boot.version}</version> </dependency> 2、SpringBoot配置文件中配置Redis连接(YAML方式配置) spring: application: ...
FEINIK 发布于 2小时前 阅读 4

lintCode --- Combinations(组合)

###题目: > Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. > 给你两个整数 n 和 k ,从 **1 -- n** 中返回所有可能的长度为 **k** 的组合 >**Example:** >If n = 4 and k = 2, >a solution is:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]] ###分析: 题目目的是列举出所有的可能的组合。 从第1个数为 **1** 开始,将之后的所有可能的组合,分别 `add()`进数组。 然后是第二个数为 **2** ... 以此类推。 因此将之归纳为 **深度优先搜索**,先探索到底,再重新开始搜索。 ###代码: ``` public class Solution { /** * @param n: Given the range of numbers * @param k: Given the numbers of combinations * @return: All the combinations of k numbers out of 1..n */ public List> combine(int n, int k) { // write your code here List> listFi = new ArrayList>(); List listSe = new ArrayList(); combine(listFi,listSe,1 , n ,k); return listFi; } public void combine(List> li , List lis , int start ,int n, int k){ if(lis.size() == k){ li.add(new ArrayList(lis)); return; } //深度优先。先完成i=1的归并。 ...
柳初心 发布于 3小时前 阅读 2

Maven+SSM框架整合

先一块一块学了Spring、Spring MVC、MyBatis和Maven,貌似都会了,整合才是根本……
MR_DY 发布于 4小时前 阅读 7

sentry8.15禁用注册

##序 sentry默认是开启注册的,这个放开的话,不好管理权限,特别是项目的权限,所以安全起见,关闭注册功能是最为保险和省事的。 ##配置 ``` FROM sentry:8.15 RUN echo "SENTRY_FEATURES['auth:register'] = False" >> /etc/sentry/sentry.conf.py RUN echo "SENTRY_FEATURES['social-auth:register'] = False" >> /etc/sentry/sentry.conf.py ``` >然后重启一下 ![输入图片说明](https://static.oschina.net/uploads/img/201706/25203631_PpcC.png "在这里输入图片标题") ##doc - [How to disable user register on self hosted server ?](https://github.com/getsentry/sentry/issues/2663)
go4it 发布于 5小时前 阅读 2

Eclipse的Debug调试技巧大全

一、Debug视图   调试中最常用的窗口是: 窗口 说明 Debug窗口 主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码) 断点Breakpoints窗口 => 断点列表窗口,可以方便增加断点,设置断点条件,删除断点等 变量Variables窗口 => 显示当前方法的本地变量,非static方法,包含this应用,可以修改变量值 代码编辑窗口 => 这个不用多说了 输出Console窗口 => 日志等输出内容,调试时,可以将关注的组件级别设置低一点,以便获得跟多输出信息     另外辅助的窗口有: 窗口 说明 表达式expression窗口 => 写上自己需要观察的数据的表达式,或者修改变量值 Display窗口 => 可以在display中执行代码块,输出内容等 大纲Outline窗口 => 查看当前类的方法,变量等 类型层级Type hierarchy窗口 => 查看当前所在类的继承层次,包括实现接口,类继承层次 方法调用关系Call hierarchy窗口 => 查看当前方法被哪些方法调用,调用方法在哪些类中、第几行,可以直接打开对应的方法 搜索结果Search窗口 => 结合快捷键可以查看变量、方法等在工作空间、项目、工作集中被引用或定义的代码位置   1)窗口全览:       2)Debug View(线程堆栈视图):   debug视图允许您在工作台上管理...
sunru 发布于 6小时前 阅读 5 点赞 1

Maven项目导出War包

1、配置pom.xml,在overview视窗里,配置packaging为 war 2、解决错误:web.xml is missing and <failOnMissingWebXml> is set to true 在pom.xml文件里添加以下内容 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> 3、在项目上右键,执行Maven->Update 4、在项目上右键,执行Run As->Maven install 5、如果需要引入非Maven仓库的jar包,添加如下配置 <dependency> <groupId>org.apache</groupId> <artifactId>test</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/taobao-sdk-java-auto_1455552377940-20160607.jar</systemPath> </dependency>  ...
士龙 发布于 6小时前 阅读 4

深入分析分布式事务问题及解决方案

什么是事务? 什么是全局事务? 什么是分布式事务? Base理论? CAP定理?
吴-志-斌 发布于 6小时前 阅读 6

beautifulsoup的简单用法

取得html檔 在Python可以很輕易的用urllib來達成 webfile = urllib.urlopen(url) 讀取內容可以用 webcontext = wefbfile.read() or webcontext = webfile.read().decode("UTF-8") 如果不指定decode方式則以系統預設方式decode 交由BeautifulSoup處理 soup = BeautifulSoup.BeautifulStoneSoup(webcontext) 此時soup為html( 節點)或xml的root node 在html可以用soup = soup.body移至節點上 使用soup = soup.nextSibling可以將point移至上 可以利用這些數狀結構的操作在tree裡面移動 以CSS樣式來存取node 以上方式當檔案在結構上有些問題的時候就會出問題 所以可以利用findAll的方式直接去存取想要的node htmldata = soup.findAll("p", {"class" : "right"}) 尋找所有   的node並return一個list給htmldata變數 以屬性方式存取node htmltitle = soup.findAll(id = "title") 尋找所有的node(XX為任意名稱) 取得node裡的內容 取得屬性 想取得像href這類超連結時可用(以下為soup指到node情況下) url = soup['href'] 取得內容 如果是string的情況下可以使用 context = soup.string 如果要取得所有內容的話,可使用 plist = soup.contents 把所有內容都存入plist內 基本上使用上面...
lwaif 发布于 9小时前 阅读 5

CentOS7 Broadcom无线网卡驱动安装

一台使用多年的联想G450笔记本,在退休之际,还可以用来研究一下Linux,于是装上了CentOS7,但安装后发现竟然无法使用WiFi,搜索一圈之后,才知道机器自带的博通(Broadcom)无线网卡的Linux驱动是需要自己安装的。于是,就这个安装的过程,竟然耗费了我1天的时间,所以记录在这里。 网上也有不少的文章,但是安装到一半,总是出现这种错那种错,后来看到CentOS官方论坛上有一篇关于如何在CentOS环境中安装Broadcom无线网卡驱动的WiKi,这篇文章极大的帮助了我,并最终伴我安装成功(事实证明,还是官方文档靠谱)。本文和原文会有大部分重复的内容,但这里旨在记录我自己安装的整个过程。 CentOS版本: [user@host ~]$ uname -a Linux host 3.10.0-514.21.2.el7.x86_64 #1 SMP Tue Jun 20 12:24:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 第 1 步:辨认无线网络芯片及安装时依赖的组件 确定无线网卡型号,我这里是BCM4312: [user@host ~]$ lspci | grep Broadcom 04:00.0 Network controller: Broadcom Limited BCM4312 802.11b/g LP-PHY (rev 01) 07:00.0 Ethernet controller: Broadcom Limited NetLink BCM5906M Fast Ethernet PCI Express (rev 02) 安装网卡驱动...
摆渡的人 发布于 9小时前 阅读 10

Python 常用库

环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具。官网 pyenv:简单的 Python 版本管理工具。官网 Vex:可以在虚拟环境中执行命令。官网 virtualenv:创建独立 Python 环境的工具。官网 virtualenvwrapper:virtualenv 的一组扩展。官网 包管理 管理包和依赖的工具。 pip:Python 包和依赖关系管理工具。官网 pip-tools:保证 Python 包依赖关系更新的一组工具。官网 conda:跨平台,Python 二进制包管理工具。官网 Curdling:管理 Python 包的命令行工具。官网 wheel:Python 分发的新标准,意在取代 eggs。官网 包仓库 本地 PyPI 仓库服务和代理。 warehouse:下一代 PyPI。官网 Warehouse:PyPA 提供的 PyPI 镜像工具。官网 bandersnatch devpi:PyPI 服务和打包/测试/分发工具。官网 localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。官网 分发 打包为可执行文件以便分发。 PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。官网 dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。官网 Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。官网 py2app:将 Python 脚本变为独立软件...
Ryan-瑞恩 发布于 10小时前 阅读 6

TCP长连接出现的延时问题

前两天看一些关于网络编程的博客,提到了长连接时小数据包发送出现的延时问题。今天打算把这块大概整理梳理一下。   TCP_NODELAY与Nagle算法 问题描述:在tcp长连接时出现发送延时,且延时基本固定在40ms上。 那么最有可能的问题就是没有设置TCP_NODELAY参数。关于这个参数,我们要先了解一下Nagle算法。Nagle算法是拥塞避免相关的算法,在tcp中默认启用,目的是解决大量小数据包造成的带宽浪费。 我们知道,tcp数据包的结构是至少20字节的TCP头+传送内容,当然,还有更前面的20字节的IP头部。显而易见的,当包中传输内容越少,头部占的比重就越大,当出现大量有效报文长度很小(如1字节)的包时,便会造成网络拥塞。于是我们便需要一个解决方案,就是Nagle算法。   Nagle算法之所以可以减少小包的数量,是因为它可以将小包拼接起来发送。 原则上只允许1个未ACK的数据包存在网络,事实上,Nagle算法可以理解为小数据包的停-等协议。 其算法规则如下: 如果包长度达到MSS(最大报文段长度),允许发送; 如果该包含有FIN,允许发送; 设置了TCP_NODELAY选项(相当于直接给禁用了),允许发送; 未设置TCP_CORK选项时,若所有发出去的小数据包(长度小于MSS)均被确认,则允...
以年 发布于 10小时前 阅读 4

centos6 编译安装python3.5.3

centos 编译安装 Python3
明月知心 发布于 11小时前 阅读 4

运算符

package javase.com.xhe.test; /** * 运算符 * @author xhe * */ public class TestOperator { public static void main(String[] args) { // double d = 10.2%3; // System.out.println(d); // int a = 3; // int b = a++; //执行完后,b=3。先给b赋值,再自增 // int c = ++a; //执行完后,c=5。先自增,再给b赋值 // System.out.println(a); // System.out.println(b); // System.out.println(c); //int c = 3/0; 报错 by zero //boolean c = 1<2&&2>(3/0); 报错 //System.out.println(c); //测试位运算 /*int m = 8; //二进制为1000 int n = 4; //二进制为 100 System.out.println(m&n); //位与( & ) 取相同的值00。也就是0 System.out.println(m|n); //取不同的数运算后二进制为1100 也就是12 System.out.println(~m); // System.out.println(m^n);*/ /*int a = 3*2*2; int b = 3<<3; //相当于:3*2*2 int c = 12/2/2; int d = 12>>2; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); boolean b1 = true&false; System.out.pr...
大爱猫plus 发布于 12小时前 阅读 2

学习框架的感受

不要过分迷恋框架,找些设计精巧的小框架来学习,参考大系统的架构设计,提高编程能力可以闲时实现一些有趣的算法,为了技术成长唯有造轮子,找一门适合造轮子的语语言。 比如orm/mybatis,当自己能编写出同类型的框架时,再参考其架构设计,将其优秀的部分融入到自己设计框架之中。 至少要维护一个开源项目,洞悉同类项目的槽点,改善项目。
icngor 发布于 13小时前 阅读 9

数据库设计之拆分与数据类型选择

本文主要介绍数据库的垂直拆分与数据类型的选择。
trayvon 发布于 14小时前 阅读 2

ipset 配置

``` sudo yum install ipset 首先,让我们创建一条新的IP集,名为xyjsafe(名字任意): sudo ipset create xyjsafe hash:net sudo ipset list sudo ipset add xyjsafe 112.66.28.89 sudo ipset add xyjsafe 118.247.142.160 sudo ipset add xyjsafe 111.230.136.157 sudo ipset add xyjsafe 112.213.124.66 sudo ipset add xyjsafe 116.231.92.66 sudo ipset add xyjsafe 42.49.46.91 sudo ipset add xyjsafe 116.54.83.78 sudo ipset add xyjsafe 122.114.180.76 sudo ipset add xyjsafe 14.127.122.84 sudo ipset add xyjsafe 223.157.12.70 sudo ipset add xyjsafe 223.157.108.133 sudo ipset add xyjsafe 218.90.3.251 sudo ipset add xyjsafe 123.207.123.125 sudo ipset add xyjsafe 114.224.97.56 sudo ipset add xyjsafe 118.180.232.108 sudo ipset add xyjsafe 180.123.152.205 sudo ipset add xyjsafe 117.61.3.186 sudo ipset add xyjsafe 60.181.186.137 sudo ipset add xyjsafe 58.221.44.176 sudo ipset add xyjsafe 124.231.204.199 sudo ipset add xyjsafe 198.55.123.243 sudo ipset add xyjsafe 14.127.123.201 sudo ipset add xyjsafe 113.242.250.1...
林伟琨 发布于 14小时前

使用过滤器 配置jsp文件到缓存html 到redis

web.xml ``` stateHtmlFilter org.springframework.web.filter.DelegatingFilterProxy targetBeanName stateHtmlFilter stateHtmlFilter /* ``` ``` package cn.com.czw.front.filter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.List; import java.util.Set; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import redis.clients.jedis.Jedis; import cn.com.czw.front.ut...
林伟琨 发布于 14小时前

spring redis 配置二级域名共享session

redis添加 ``` ``` web.xml 添加到最前面 ``` springSessionRepositoryFilter org.springframework.web.filter.DelegatingFilterProxy springSessionRepositoryFilter /* REQUEST ERROR ```
林伟琨 发布于 14小时前 阅读 6

深入浅出 spring-data-elasticsearch - 实战案例详解(四)

『  热烈的爱情到订婚早已是定点,婚一结一切了结。现在订了婚,彼此间还留着情感发展的余地,这是桩好事。- 《我们仨》 』 「系列文章」 深入浅出 spring-data-elasticsearch - ElasticSearch 架构初探(一) 深入浅出 spring-data-elasticsearch - 概述(二) 深入浅出 spring-data-elasticsearch - 基本案例详解(三) 深入浅出 spring-data-elasticsearch - 实战案例详解(四) 深入浅出 spring-data-elasticsearch - 架构原理以及源码浅析(五)(拼命编写ing) 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2 本文提纲 一、搜索实战场景需求 二、运行 spring-data-elasticsearch-query 工程 三、spring-data-elasticsearch-query 工程代码详解   一、搜索实战场景需求 搜索的场景会很多,常用的搜索场景,需要搜索的字段很多,但每个字段匹配到后所占的权重又不同。比如电商网站的搜索,搜到商品名称和商品描述,自然商品名称的权重远远大于商品描述。而且单词匹配肯定不如短语匹配。这样就出现了新的需求,如何确定这些短语,即自然分词。那就利用分词器,即可得到所需要的短语,然后进行...
泥沙砖瓦浆木匠 发布于 3天前 阅读 774 评论 1 点赞 1

深入浅出 spring-data-elasticsearch - 基本案例详解(三

『  风云说:能分享自己职位的知识的领导是个好领导。 』   欢迎来 Spring For All , 和我探讨 Spring 相关的分享。 http://spring4all.com   运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2   本文提纲 一、spring-data-elasticsearch-crud 的工程介绍 二、运行 spring-data-elasticsearch-crud 工程 三、spring-data-elasticsearch-crud 工程代码详解 一、spring-data-elasticsearch-crud 的工程介绍 spring-data-elasticsearch-crud 的工程,介绍 Spring Data Elasticsearch 简单的 ES 操作。Spring Data Elasticsearch 可以跟 JPA 进行类比。其使用方法也很简单。 二、运行 spring-data-elasticsearch-crud 工程 注意的是这里使用的是 ElasticSearch 2.3.2。是因为版本对应关系 https://github.com/spring-projects/spring-data-elasticsearch/wiki/Spring-Data-Elasticsearch---Spring-Boot---version-matrix;  Spring Boot Version (x)    Spring Data Elasticsearch Version (y)    Elasticsearch Version (z) x <= 1.3.5    y <= 1.3.4    z <= 1.7.2* x >= 1.4.x    2....
泥沙砖瓦浆木匠 发布于 5天前 阅读 2044 评论 3

Redis 通信协议-了解 Redis 客户端实现原理

# 简介 几乎所有的主流编程语言都有Redis的客户端(http://redis.io/clients),不考虑Redis非常流行的原因,如果站在技术的角度看原因还有两个: 1. 客户端与服务端之间的通信协议是在 **TCP 协议**之上构建的。 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 `\r\n` (CRLF)结尾。 2. Redis制定了 RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。 # 发送命令 RESP 在 Redis 1.2 版本中引入, 并最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式。 在这个协议中, 所有发送至 Redis 服务器的参数都是二进制安全(binary safe)的。 RESP 的规定一条命令的格式如下: ```shell *<参数数量> CR LF $<参数 1 的字节数量> CR LF <参数 1 的数据> CR LF ... $<参数 N 的字节数量> CR LF <参数 N 的数据> CR LF ``` **命令本身也作为协议的其中一个参数来发送。** 例如我们经常执行的 SET 命令,在命令行中我们输入如下: ```shell SET key value ``` 使用 RESP 协议规定的格式: ```shell *3 $3 SET...
拿客-三产 发布于 5天前 阅读 2828 评论 6 点赞 5

springmvc集成shiro后,session、request姓汪还是姓蒋?

# 1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢慢地产生了下面几个疑惑,本篇文章将会带着疑问慢慢地解析shiro源码,从而解开心里面的那点小纠纠。 (1)** 在spring controller中,request有何不同呢 **? 于是,在controller中打印了request的类对象,发现request对象是org.apache.shiro.web.servlet.ShiroHttpServletRequest ,很明显,此时的 request 已经被shiro包装过了。 (2)众所周知,spring mvc整合shiro后,可以通过两种方式获取到session: **通过Spring mvc中controller的request获取session** ``` Session session = request.getSession(); ``` ** 通过shiro获取session ** ``` Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); ``` 那么,问题来了,** 两种方式获取的session是否相同呢 **? 这里需要看一下项目中的shiro的securityManager配置,因为配置影响了shiro session的来源。这里没有配置session管理器。 ``` ``` 在controller中再次打印了session,发现前者的session类型是 org.apache.catalina.session.StandardSessionFacade ,后者的session类型...
细肉云吞 发布于 1周前 阅读 2991 评论 15 点赞 15

Maven工程配置代码覆盖工具Jacoco

本篇博文我们将给出示例理解如何在Maven工程中配置Jacoco和如何使用Jacoco查看代码覆盖报告~ Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。 Maven工程 创建Maven工程 打开Eclipse,File->New->Project->Maven Project,新建一个Maven工程~ 点击“Next”按钮,然后填写groupId和artifactId信息后点击"Finish"按钮即可~ groupId -->  com.xxx.tutorial artifactId --> jacoco-demo 配置Jacoco 添加maven-complier-plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <skipMain>true</skipMain> <skip>true</skip> <source>1.7</source> <target>1.7</target> </configuration> </plugin> 添加jacoco-maven-plugin <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.v...
王孟君 发布于 1周前 阅读 1360 评论 3 点赞 3

docker搭建oracle开发环境

oracle太大了,对于开发人员来说,在本机安装一个oracle代价不菲。 在docker环境中,我找了很久,发现wnameless/oracle-xe-11g 镜像还不错,很方便搭建起来。 但是也发现一个问题,挂载本地卷遇到了麻烦。一旦挂载,就无法登陆了。从官方的issues中发现,有一个fork版本解决了这个问题,记录一下。 创建docker-compose工作目录 --- ``` mkdir -p oracle/data cd oracle touch docker-compose.yml ``` 配置docker-compose.yml --- ```yaml version: '2' services: oracle: image: sath89/oracle-xe-11g container_name: oracle ports: - 1521:1521 volumes: - ./data:/u01/app/oracle ``` 启动容器 --- ``` #启动oracle docker-compose up -d #关闭容器 docker-compose kill ``` 登录oracle --- 登录使用的参数: ``` SID: xe username: system password: oracle ``` 注意:原文写错了用户名,不是admin,是system,sorry 进入后自行修改密码,创建用户等即可。 为什么要绑定本地卷 --- wnameless版本无法绑定本地卷的问题,会导致我们一旦重启容器或重建容器,我们在数据库中的所有操作、创建的表以及数据等等全部丢失了。 绑定了本地卷,可以让容器的数据持久化到本机。就...
polly 发布于 1周前 阅读 2165 评论 13 点赞 4

spring boot / cloud (八) 使用RestTemplate来构建远程调用服务

# spring boot / cloud (八) 使用RestTemplate来构建远程调用服务 ##前言 上周因家里突发急事,请假一周,故博客没有正常更新 ###RestTemplate介绍: >RestTemplate是spring框架中自带的rest客户端工具类,具有丰富的API,并且在spring cloud中,标记@LoadBalanced注解,可以实现客户端负载均衡的rest调用. ##思路 RestTemplate虽然提供了丰富的API,但是这些API过于底层,如果不稍加控制,让开发人员随意使用,那后续的代码也将会变的五花八门,难以维护. 同时,当系统规模大了之后,将会有更多的服务,并且服务之间的调用关系也将更加复杂,如果不进行管控治理的话,同样,项目同期也将越来越不可控, 最后,服务间调用也需要有明确的权限认证机制,最好是能通过配置的方式来明确,哪些服务可以调用那些服务.从而来把控项目的复杂度. 本文将从以下几点来提供一个解决问题的思路: - 通过spring boot的@ConfigurationProperties机制来定义远程服务的元数据,从而实现权限认证的配置化 - 使用HandlerInterceptor来进行拦截,实现权限的验证 - 定义通用Rms类,来规范RestTemplate的使用 ##实现 ###1.实现权限配置 ####1.定义Application元数据 ``` java public class ApplicationMeta implements Seria...
wangkang80 发布于 2周前 阅读 2635 评论 5 点赞 6

Thrift不同服务类型的使用探索

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的、高效的服务。 Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 本篇博文编写的目的是对Thrfit不同的服务类型进行整理,并结合代码示例进行说明~ 目标 本篇博文编写的目的是对Thrfit不同的服务类型进行整理,并结合代码示例进行说明~ 博文主要包含如下几个部分: 1. 实例代码准备 2. 对不同的服务类型进行介绍说明,并给出示例 3. 异步客户端调用实例 4. Nifty库的使用,包含服务端和客户端代码示例 实例 说明 在这个示例中,我们主要在用户接口中定义三个接口:保存用户,根据name获取用户列表以及删除用户 如:   /** * 保存用户 * * @param user */ public boolean save(com.xxx.tutorial.thrift.entity....
王孟君 发布于 2周前 阅读 1462 评论 2 点赞 4

Java关键字volatile的理解与正确使用

概述 Java语言中关键字 volatile 被称作轻量级的 synchronized,与synchronized相比,volatile编码相对简单且运行的时的开销较少,但能够正确合理的应用好 volatile 并不是那么的容易,因为它比使用锁更容易出错,接下来本文主要介绍 volatile 的使用准则,以及使用过程中需注意的地方。 为何使用volatile? (1)简易性:在某些需要同步的场景下使用volatile变量要比使用锁更加简单 (2)性能:在某些情况下使用volatile同步机制的性能要优于锁 (3)volatile操作不会像锁一样容易造成阻塞 volatile特性 (1)volatile 变量具有 synchronized 的可见性特性,及如果一个字段被声明为volatile,java线程内存模型确保所有的线程看到这个变量的值是一致的 (2)禁止进行指令重排序 (3)不保证原子性 注: ① 重排序:重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段 ② 原子性:不可中断的一个或一系列操作 ③ 可见性:锁提供了两种主要特性:互斥和可见性,互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确...
FEINIK 发布于 3周前 阅读 3739 评论 22 点赞 18

Web性能测试工具Siege参数详解 & 示例

在上一篇博文【CentOS上安装Web性能测试工具Siege & 示例】中,给出了CentOS上安装Web性能测试工具Siege的步骤,并给出了一个简单的示例,如 示例 ==> 并发请求指定URL  http://download.joedog.org/ siege -c 5 -r 2 http://download.joedog.org/ 参数说明: -c 是并发量,并发数为5,  -r 是重复次数, 重复2次 某次运行的结果~ Transactions: 30 hits ## 完成处理数30 Availability: 100.00 % ## 可用,成功率100% Elapsed time: 4.67 secs ## 耗时4.67秒 Data transferred: 0.07 MB ## 数据传输0.07MB Response time: 0.50 secs ## 响应时间0.50秒 Transaction rate: 6.42 trans/sec ## 每秒完成6.42个处理 Throughput: 0.01 MB/sec ## 吞吐量,每秒传输0.01MB Concurrency: 3.21 ## 实际最高并发连接数 Successful transactions: 30 ## 成功完成处理30次 Failed transactions: 0 ## 失败0次 Longest transaction: 2.25 ## 每次传输所花最长时间 Shortest transac...
王孟君 发布于 3周前 阅读 1286 评论 1 点赞 3

Java并发编程之Semaphore(信号量)

概述 通常情况下,可能有多个线程同时访问数目很少的资源,如客户端建立了若干个线程同时访问同一数据库,这势必会造成服务端资源被耗尽的地步,那么怎样能够有效的来控制不可预知的接入量呢?及在同一时刻只能获得指定数目的数据库连接,在JDK1.5 java.util.concurrent 包中引入了Semaphore(信号量),信号量是在简单上锁的基础上实现的,相当于能令线程安全执行,并初始化为可用资源个数的计数器,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。例如我们可以将一个信号量初始化为可获得的数据库连接个数。一旦某个线程获得了信号量,可获得的数据库连接数减1。线程消耗完资源并释放该资源时,计数器就会加1。当信号量控制的所有资源都已被占用时,若有线程试图访问此信号量,则会进入阻塞状态,直到有可用资源被释放。简单理解就是:如去银行办理业务,只有6个窗口,所以可同时给6个客户办理业务,其他客户只能等待,当有其中一个窗口办理完业务时就会通知下一个客户办理。 主要方法 1、构造方法       Semaphore提供了一个带有boolean参数的构造方法,true代表公平锁,false代表非公平锁,默认实现是非公平锁 Semaphore(int permits) //创建具有给定许...
FEINIK 发布于 4周前 阅读 3359 评论 16 点赞 12

深入select多路复用内核源码加驱动实现

问题      本文尝试解决以下几个问题: select中1024限制指的是select监听的文件描述符个数最多为1024还是说监听的最大文件描述符不能超过1024? select第一个参数为什么是最大文件描述符加一? select的返回值表示的是就绪的文件描述符个数还是就绪的事件个数? 一个设备或资源要支持select机制,驱动需要做哪些实现和改变? 概述       用户空间在调用select库函数之后,最终会陷入内核态调用系统调用函数(sys_select),如果对系统调用原理感兴趣的可以看我的另一篇文章从glibc源码看系统调用原理,下面先大致看一下select中内核函数都有哪些。                                                                          源码实现 #undef __NFDBITS #define __NFDBITS (8 * sizeof(unsigned long)) #undef __FD_SETSIZE #define __FD_SETSIZE 1024 #undef __FDSET_LONGS #define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS) typedef struct { unsigned longfds_bits [__FDSET_LONGS]; //1024个bit。可以看到可以支持1024个描述符 } __kernel_fd_set; //系统调用(内核态) //参数为...
黑客画家 发布于 4周前 阅读 1665 评论 10 点赞 4 打赏 1

一步步完成thrift Java示例

一步步完成
王孟君 发布于 1个月前 阅读 1802 点赞 3 打赏 1

基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

![poi](http://poi.apache.org/resources/images/pb-poi.png "poi") # 注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能。过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好。 # 序 由于 poi 本身只是针对于 excel 等office软件的一个工具包,在一些常规的 excel 导入导出时,还需要再做一次精简的封装,简化代码耦合。 ## 一、现状 本人经历过几家公司的代码封装,导入导出一般存在下面的情况。 ### 1.1 导入 1. 传入文件地址,返回 Sheet 对象,在业务代码中进行循环遍历,做相对应的类型转换,业务处理(二零零几年的代码框架) 2. 传入文件地址,返回 List 的对象,外部直接做强转 3. 传入文件地址,返回 List 的对象,外部将字符串对象转换为对应的类型 总结:如果只有上述的选择,本人是比较倾向于第二种,毕竟对外层是非常友好的 ### 1.2 导出 1. 直接在逻辑代码中进行遍历封装sheet,传入到生成file的方法中(二零零几年的代码框架) 2. 先循环遍历 List 对象,转换为 List> 对象,带上 fieldName 传入到封装好excel生成的方法中,内部则使用 map.get() 方法操作 3. 直接将 List 对象带上 fieldName 传入到封装...
倚楼听风雨_ 发布于 1个月前 阅读 4385 评论 17 点赞 6

Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 - 《史蒂夫·乔布斯传》 』 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+,ElasticSearch 2.3.2 本文提纲 一、ES 的使用场景 二、运行 springboot-elasticsearch 工程 三、springboot-elasticsearch 工程代码详解   推荐 -  「springboot-learning-example」开源项目,Fork 一下,多多 Pull Request~ spring boot 实践学习案例,是 spring boot 初学者及核心技术巩固的最佳实践。 https://git.oschina.net/jeff1993/springboot-learning-example 一、ES 的使用场景 简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎。 在《Elasticsearch 和插件 elasticsearch-head 安装详解》  和 《Elasticsearch 默认配置 IK 及 Java AnalyzeRequestBuilder 使用》 我详细的介绍了如何安装,初步使用了 IK 分词器。 这里,我主要讲下 SpringBoot 工程中如何使用 ElasticSearch。 ES 的使用场景大致分为两块 1. 全文检索。加上分词(IK 是其中一个)、拼音插件等可以成为强大的全文搜索引擎。 2. 日志统计分析。可以...
泥沙砖瓦浆木匠 发布于 1个月前 阅读 4898 评论 14 点赞 5

Spring思维导图,让Spring不再难懂(ioc篇)

>写在前面 写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是从ioc容器中直接获取对象。 就好像我们无需考虑对象的销毁回收一样,因为java垃圾回收机制帮助我们实现了这个过程;而ioc则是让我们无需考虑对象的创建过程,由ioc容器帮我们实现对象的创建、注入等过程。 ![Spring知识细节.png](http://upload-images.jianshu.io/upload_images/4120002-55b18f0249f25054.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >控制反转 ![Spring ioc简介.png](http://upload-images.jianshu.io/upload_images/4120002-7e89f6da34fe7bc9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) >spring ioc容器 在Spring框架中的核心组件只有三个:Core、Context和Bean。它们构建起了整个Spring的骨骼架构,没有它们就不可能有AOP、Web等特性功能。 ![Spring 整体结构图.jpg](http://upload-images.jianshu.io/upload_images/4120002-1ad5bb59e5e9f209.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 如果说在三个核心中再选出一个核心,那就非Bean莫属了。可以说,Spring就是面向B...
java思维导图 发布于 1个月前 阅读 11276 评论 28 点赞 25

解Bug之路-Druid的Bug

#解Bug之路-Druid的Bug 笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug。现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后的工作中能够少踩点坑。 #前言 此Bug是Druid低版本的Bug,此Bug至少在1.0.12版本就已经修复。 #Druid的Bug现场 在紧张的新项目开发的日子里,突然收到线上某系统的大量报警,对应系统的人员发现此系统在某一台机器上dump了大量的error日志。日志基本都是: ``` Druid: GetConnectionTimeoutException ``` 此系统所有用到数据库的地方都抛出此异常。于是祭出重启大法,重启过后,一切Okay。然后对应的系统人员开始排查这个问题,一直没有结果。 过了两天,又收到此类型的error日志报警,而且这一次是有两台系统同时爆出此种错误。紧急重启后,将此问题紧急报到我们这边处理。鉴于本人有丰富的IO处理经验,当然落到了本人头上。 #Bug复盘 此系统是通过Druid连接后面的数据库分库分表Proxy,再由此Proxy连接后面的数据库。示意图如下所示: ![输入图片说明](https://static.oschina.net/uploads/img/201705/15104710_ieM5.png "在这里输入图片标题") ##缩小Bug范围 获取连接超时(GetConnectionTimeo...
无毁的湖光-Al 发布于 1个月前 阅读 2859 评论 45 点赞 28 打赏 1

详解 awk 工具的使用方法

当你第一次拿起双手在电脑上使用 awk 命令处理一个或者多个文件的时候,它会依次读取文件的每一行内容, 然后对其进行处理,awk 命令默认从 stdio 标准输入获取文件内容, awk 使用一对单引号来表示 一些可执行的脚本代码,在可执行脚本代码里面,使用一对花括号来表示一段可执行代码块,可以同时存在多个代码块。 awk 的每个花括号内同时又可以有多个指令,每一个指令用分号分隔,awk 其实就是一个脚本编程语言。说了这么多,你肯定还是一脸的懵逼。你猜对了,上面这些都是废话。先别急,客官请往下看。。。 **awk 命令的基本格式** ``` awk [options] 'program' file ``` `options` 这个表示一些可选的参数选项,反正就是你爱用不用,不用可以拉到。。。 `program` 这个表示 awk 的可执行脚本代码,这个是必须要有的。 `file` 这个表示 awk 需要处理的文件,注意是纯文本文件,不是你的 mp3,也不是 mp4 啥的。。 **先来一个 awk 的使用例子热热身** ``` $ awk '{print $0}' /etc/passwd ``` awk 命令的可执行脚本代码使用单引号括起来,紧接着里面是一对花括号,记住是 "花括号" 不是 "花姑娘",然后花括号里面就是一些可执行的脚本代码段,当 awk 每读取一行之后,它会依...
Jarly 发布于 1个月前 阅读 3444 评论 16 点赞 19

t-io 入门篇(三)即时消息发送demo学习

T-io Im聊天demo分析
卡尔码农 发布于 1个月前 阅读 3643 评论 14 点赞 6

惊呆了,Servlet3.0的这个特性竟然99%的人都还不知道!

目前tomcat8和java8基本上得道了普及,基于Servlet3.0(tomcat7就支持)来设计我们的java mvc框架显然会使我们的框架更加轻量! 今天我要说的是:`ServletContainerInitializer`Servlet容器初始化器。 很多小伙伴对她并不陌生,例如Spring中的无web.xml配置也采用她来加载自定义WebApplicationInitializer。 ```java @HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer { // 省略部分代码和注释 } ``` 然而好像大家都是在使用她查找自定义实现类,我脑洞大开可以使用她来查找注解类吗? 查看文档无果,没有说明是否支持注解!直接上代码测试吧~ ### 实现类 ```java package net.dreamlu.learn.core; import java.util.Set; import javax.servlet.ServletContainerInitializer; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.HandlesTypes; import net.dreamlu.learn.ioc.annotation.Component; import net.dreamlu.learn.ioc.annotation.Service; import net.dreamlu.learn.mvc.annotation.Controller; /** * 采用...
如梦技术 发布于 2个月前 阅读 5317 评论 30 点赞 3
顶部