开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

拯救小容量,6 款开源图片无损优化工具推荐

科技在进步,相机、手机拍出来的照片越来越清晰也越来越大时,容量小一点的手机、磁盘开始有些吃紧了。目前其实有很多工具可进行低损,甚至是无损优化、压缩图片,能帮你保存更多的照片。 1、OptiPNG OptiPNG 是一个专门的 PNG 图像优化工具,可将图像文件重新压缩为更小尺寸,且不会丢失任何信息。 OptiPNG 还可将其它格式(BMP、GIF、PNM 和 TIFF )转换为优化的 PNG 格式,并执行 PNG 完整性检查和校正。  2、Jpegoptim Jpegoptim 是一个专门用来优化 JPEG 文件的工具,提供无损的优化(基于哈夫曼表),同时也可设置质量因子实现的有损优化。 3、Leanify Leanify 是一个轻量级的文件无损压缩器/优化器。它会删除不必要的数据(调试信息、注释、元数据等),并重新压缩文件以减小文件大小。 Leanify 支持 jpeg、svg、png 等图片格式,完全无损,不会降低图像质量。此外,还支持递归缩减,以及其他非图片格式,包括压缩格式、文档格式等。无外部依赖,跨平台,支持 Windows、Linux 和 Mac 。能够通过其数据而不是名称来识别文件格式。 4、Pngcrush Pngcrush 是一个非常实用的图像优化命令行工具,可用来批量压缩 PNG 格式图片大小。它主要是通过尝试各种压缩级别和 PN...
编辑部的故事 发布于 22小时前 阅读 906 评论 2

JDBC【数据库连接池、DbUtils框架、分页】

1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的。。。 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开、关闭连接造成系统性能低下 编写连接池 编写连接池需实现java.sql.DataSource接口 创建批量的Connection用LinkedList保存【既然是个池,当然用集合保存、、LinkedList底层是链表,对增删性能较好】 实现getConnetion(),让getConnection()每次调用,都是在LinkedList中取一个Connection返回给用户 调用Connection.close()方法,Connction返回给LinkedList private static LinkedList<Connection> list = new LinkedList<>(); //获取连接只需要一次就够了,所以用static代码块 static { //读取文件配置 InputStream inputStream = Demo1.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); try { properties.load(inputStream); String url = properties.getProperty("url"); String username = properties.getProperty("username"); St...
Java3y 发布于 1天前 阅读 523 评论 2 点赞 1

Solidity 智能合约开发语言·数据类型

int/uint:变长的有符号或无符号整型。变量支持的步长以8递增,支持从uint8到uint256,以及int8到int256。需要注意的是,uint和int默认代表的是uint256和int256。 有符号整型能够表示负数的代价是其能够存储正数的范围的缩小,因为其约一半的数值范围要用来表示负数。如:uint8的存储范围为0 ~ 255,而int8的范围为-127 ~ 127
neo-chen 发布于 2天前 阅读 119

Java 9 新特性概述

Java 9 正式发布于 2017 年 9 月 21 日 。作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外,还有一些新的特性。 本文对 Java9 中包含的新特性做了概括性的介绍,可以帮助你快速了解 Java 9
IBM Cloud

开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!

Tutorialzine 每个月都会公布一次当月新增的 JS 和 CSS 库。2018 新年之际,该网站整理出了 2017 年最受用户欢迎和喜爱的一些 JS 和 CSS 库,供大家学习和参考。 JavaScript 本地存储库 localForage localForage 是一个 JavaScript 库,提升了应用程序的离线体验,通过使用异步的数据存储,提供简单的类似 localStorage 的 API,允许开发者存储多种类型数据。 CSS3 驱动的动画滚动库 AOS AOS(Animate on scroll)是小型动画滚动库,可在页面滚动时给元素添加动画效果。CSS3 驱动,效果类似于 WOWJS。 响应式邮件标识语言 MJML MJML 是一个标识语言,用来减少编写响应式邮件的复杂度。其语义语法在展示丰富邮件内容时更加简单和直观。该项目提供一个开源的引擎用来将 MJML 标识语言转成 HTML。 基于浏览器的代码编辑器 Monaco-Editor Monaco Editor 是微软开源的基于 VS Code 的代码编辑器,运行在浏览器环境中。编辑器提供代码提示,智能建议等功能。供开发人员远程更方便的编写代码。 Web 虚拟现实框架 A-Frame A-Frame 是 Mozilla 开源的网页虚拟现实体验( WebVR )框架,可用于桌面、iPhone(即将支持安卓)以及 Oculus Rift。A-Frame 可以让创建 WebVR 体验变得...
编辑部的故事 发布于 2天前 阅读 2499 评论 5 点赞 4

前端利器,6 款开源 Web 性能优化辅助工具推荐

Web 性能优化是一个老生常谈的话题,也是前端页面开发十分重要的部分。当页面加载速度越慢,用户流失的概率就越大,性能和交互直接影响用户体验。下面推荐几款 Web 性能优化辅助工具推荐,希望能对大家有所帮助。 1、Lighthouse Lighthouse 是 Google 开源的一个自动化工具,用于改进网络应用的质量。你可以将其作为一个 Chrome 扩展程序运行,或从命令行运行。 当为 Lighthouse 提供一个要审查的网址,它将针对此页面运行一连串的测试,然后生成一个有关页面性能的报告。可以参考失败的测试,看看可以采取哪些措施来改进应用。 Chrom 扩展则会把报告以非常人性化的图形界面展示给你。 2、Speed Racer SpeedRacer 是一款性能测试工具,它在 Chrome 中运行脚本,并生成详细的性能报告。 SpeedRacer 是直接借助浏览器来实际测试性能的工具,在实际工作中,可以与其它模拟用户访问流量来评估性能的工具配合使用。 3、Yellow Lab Tools Yellow Lab Tools 是一款 Web 性能及前端质量测试工具。与其他工具不同的是,它有一些在其他工具上无法看到的独特功能,例如页面加载时 JavaScript 与 DOM 互动和其他程序代码验证问题。 Yellow Lab Tools 偏向于一个发现不良实践的工具,...
编辑部的故事 发布于 2天前 阅读 1004 评论 3 点赞 4

SpringBoot项目中使用AOP

## 1.概述 将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 具体的代码参照 [示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-aop](https://github.com/qihaiyan/springcamp/tree/master/spring-aop) Spring的AOP技术主要有4个核心概念: 1. Pointcut: 切点,用于定义哪个方法会被拦截,例如 ```execution(* cn.springcamp.springaop.service.*.*(..))``` 2. Advice: 拦截到方法后要执行的动作 3. Aspect: 切面,把Pointcut和Advice组合在一起形成一个切面 4. Join Point: 在执行时Pointcut的一个实例 5. Weaver: 实现AOP的框架,例如 AspectJ 或 Spring AOP ## 2. 切点定义 常用的Pointcut定义有 execution 和 [@annotation](https://my.oschina.net/annotation) 两种。execution 定义对方法无侵入,用于实现比较通用的切面。[@annotation](https://my.oschina.net/annotation) 可以作为注解加到特定的方法上,例如Spring的Transaction注解。 execution切点定义应该放在一个公共的类中,集中管理切点定义。 示例: ```java public class CommonJoinPointConfig { @Pointcut("ex...
QiHaiYan 发布于 2天前 阅读 643 评论 1

Tomcat源码分析之 doGet方法(一)

本文是《Tomcat 源码分析之 doGet方法》的第一篇文章,主要介绍了源码分析的目标以及主要任务有哪些,并对Servlet知识点做了非常细致的介绍,帮助大家更好的了解 Servlet,以及为什么用户自定义的 Servlet 需要继承 HttpServlet。
算法与编程之美 发布于 2天前 阅读 82

JDBC【事务、元数据、改造JDBC工具类】

1.事务 事务指的就是:在一个SESSION中进行的操作要么全部成功,要么全部失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样【A账户的钱没变,B账户的钱也没变】。 事例说明: /* * 我们来模拟A向B账号转账的场景 * A和B账户都有1000块,现在我让A账户向B账号转500块钱 * * */ //JDBC默认的情况下是关闭事务的,下面我们看看关闭事务去操作转账操作有什么问题 //A账户减去500块 String sql = "UPDATE a SET money=money-500 "; preparedStatement = connection.prepareStatement(sql); preparedStatement.executeUpdate(); //B账户多了500块 String sql2 = "UPDATE b SET money=money+500"; preparedStatement = connection.prepareStatement(sql2); preparedStatement.executeUpdate(); 从上面看,我们的确可以发现A向B转账,成功了。可是**如果A向B转账的过程中出现了问题呢?**下面模拟一下 //A账户减去500块 String sql = "UPDATE a SET money=money-500 "; preparedSt...
Java3y 发布于 3天前 阅读 134 评论 2

以太坊·将自定义数据写入到区块链中

本文节选自电子书《Netkiller Blockchain 手札》 Netkiller Blockchain 手札 本文作者最近在找工作,有意向致电 13113668890 Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com> 文档始创于2018-02-10 版权 © 2018 Netkiller(Neo Chan). All rights reserved.   版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。 http://www.netkiller.cn http://netkiller.github.io http://netkiller.sourceforge.net 微信订阅号 netkiller-ebook (微信扫描二维码) QQ:13721218 请注明“读者” QQ群:128659835 请注明“读者”   5.5. 实用例子 5.5.1. 数据写入到区块链中 做一笔交易,并写入数据到区块链中 let Web3 = require("web3"); let fs = require("fs"); let web3 = new Web3("http://localhost:8545"); let log = { time:(new Date).getTime(), type:"info", msg:"Web3 Test!!!" }; let str = JSON.stringify(log); console.log(str); let data = Buffer.from(str).toString('hex'); data = '0x'+data; console.log(data); //将数据写入到交易中 let ...
neo-chen 发布于 3天前 阅读 116

实用又好用,6 款 Python 特殊文本格式处理库推荐

以下是一些 Python 编写的用来解析和操作特殊文本格式的库,希望对大家有所帮助。 1、Tablib Tablib 是一个用来处理与表格格式数据有关的 Python 库,允许导入、导出、管理表格格式数据,并具备包括切片、动态列、标签和过滤,以及格式化导入和导出等高级功能。 Tablib 支持导出/导入的格式包括:Excel 、JSON 、YAML 、HTML 、TSV 和 CSV ,暂不支持 XML 。 >>> data = tablib.Dataset(headers=['First Name', 'Last Name', 'Age']) >>> for i in [('Kenneth', 'Reitz', 22), ('Bessie', 'Monke', 21)]: ... data.append(i) >>> print(data.export('json')) [{"Last Name": "Reitz", "First Name": "Kenneth", "Age": 22}, {"Last Name": "Monke", "First Name": "Bessie", "Age": 21}] >>> print(data.export('yaml')) - {Age: 22, First Name: Kenneth, Last Name: Reitz} - {Age: 21, First Name: Bessie, Last Name: Monke} >>> data.export('xlsx') <censored binary data> >>> data.export('df') First Name Last Name Age 0 Kenneth Reitz 22 1 Bessie Monke 21 2、Openpyxl Openpyxl 是一个用于读写 Excel 2010 xlsx / xlsm / x...
编辑部的故事 发布于 3天前 阅读 1135 点赞 2

里程碑:DTrace 切换到 GPL 许可证

News:dtrace dropped the CDDL and switched to the GPL!
RiboseYim 发布于 4天前 阅读 50

NEO从源码分析看网络通信

### **_0x00 前言_** NEO被称为中国版的Ethereum,支持C#和java开发,并且在社区的努力下已经把SDK拓展到了js,python等编程环境,所以进行NEO开发的话是没有太大语言障碍的。 比特币在解决拜占庭错误这个问题时除了引入了区块链这个重要的概念之外,还引入了工作量证明(PoW)这个机智的解决方案,通过数学意义上的难题来保证每个区块创建都需要付出计算量。然而实践已经证明,通过计算来提供工作量证明,实在是太浪费:全世界所有的完全节点都进行同样的计算,然而只有一个节点计算出的结果会被添加到区块链中,其余节点计算消耗的电力就都白白浪费了。尤其,工作量证明存在一个51%的可能攻击方案,就是说只要有人掌握了世界上超过50%的算力,那么他就可以对比特币这个系统进行攻击,重置区块链。中本聪先生发明这个算力工作量证明方法的时候大概没有料到会有人专门为了挖矿开发出ASIC矿机。 NEO在解决这些问题的时候提出了一个新的共享机制DBFT 全称为 Delegated Byzantine Fault Tolerant。NEO将节点分为两种,一种为普通节点,不参与共识,也就是不进行认证交易签名区块的过程。另一种是则是共识节点。顾名思义,就是可以参与共识的节点,这部分基础概念可以参考[官方...
暖冰 发布于 6天前 阅读 515 点赞 1

iOS使用shell脚本注入混淆内容

使用shell脚本简化重复工作,提高工作效率666
aron1992 发布于 7天前 阅读 104

Spring Boot 整合 Shiro 实现登录认证

安全无处不在,趁着放假读了一下 Shiro 文档,并记录一下 Shiro 整合 Spring Boot 在数据库中根据角色控制访问权限 # 简介 Apache Shiro是一个功能强大、灵活的,开源的安全框架。它可以干净利落地处理身份验证、授权、企业会话管理和加密。 ![Shiro Architecture](http://img.blog.csdn.net/20180123210643079?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3RhY2tmaW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 上图是 Shiro 的基本架构 ### Authentication(认证) 有时被称为“登录”,用来证明用户是用户他们自己本人 ### Authorization(授权) 访问控制的过程,即确定“谁”访问“什么” ### Session Management(会话管理) 管理用户特定的会话,在 Shiro 里面可以发现所有的用户的会话信息都会由 Shiro 来进行控制 ### Cryptography(加密) 在对数据源使用加密算法加密的同时,保证易于使用 # Start ### 环境 Spring Boot 1.5.9 MySQL 5.7 Maven 3.5.2 Spring Data Jpa Lombok ### 添加依赖 这里只给出主要的 Shiro 依赖 ``` org.apache.shiro shiro-spring-boot-starter 1.4.0-RC2 ``` ### 配置 我们暂时只需要用户表、...
stackfing 发布于 7天前 阅读 166

Ubuntu on Windows10 跨平台开发环境搭建权威指南

程序猿经常争论的一个话题是:日常开发到底 Windows 好还是 Linux 好?进而演化出另一个问题:到底选 MacBook 好还是 SurfaceBook 好? 选择 Linux 系统或者 mac 笔记本的同学最核心的理由是 Linux/Mac 开发、编译工具链比较完善,很多环境或者安装包都系统自带了,写出来的程序可以很方便的通过开发、测试与线上系统对接,开发测试效率比较高,而 Windows 下开发的同学可能需要考虑开发、测试代码的可移植性问题。就拿笔者来说,也曾经遇到过某些 java/python API 不支持 Windows 的问题,这给日常开发带来了不小的麻烦。 在 Windows10 以前,咱们为了解决 Windows 开发环境跨平台的问题,往往会选择 cygwin,这个项目本身已经很成熟了,笔者也用了很多年,它能在 Windows 下模拟一套类 Linux 的环境,用它应付一般的开发测试问题不大。但它的缺点在于组件、包管理器比较弱,对于日后的环境维护相当麻烦,而且一些底层 API 模拟的并不完善,对于一些涉及 Linux 底层的系统调用等场景显得很鸡肋。幸运的是在 2016 年,微软在 Windows10 WSL 里开始内置 Ubuntu,之后又开始在 Microsoft Store 以 UWP APP 的形式发布各个 Linux 系统...
xrzs 发布于 1周前 阅读 4218 评论 6 点赞 1

打造炫酷的通知插件EasyToaster

HTML + CSS + JS 原生实现, 兼容 Chrome, Firefox, IE9 及以上, 兼容 PC,移动端
lonelydawn 发布于 1周前 阅读 42

大话循环神经网络(RNN)

—— 原文发布于本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),欢迎关注。     在上一篇文章中,介绍了 卷积神经网络(CNN)的算法原理,CNN在图像识别中有着强大、广泛的应用,但有一些场景用CNN却无法得到有效地解决,例如: 语音识别,要按顺序处理每一帧的声音信息,有些结果需要根据上下文进行识别; 自然语言处理,要依次读取各个单词,识别某段文字的语义 这些场景都有一个特点,就是都与时间序列有关,且输入的序列数据长度是不固定的。 而经典的人工神经网络、深度神经网络(DNN),甚至卷积神经网络(CNN),一是输入的数据维度相同,另外是各个输入之间是独立的,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立。   而在现实生活中,例如对一个演讲进行语音识别,那演讲者每讲一句话的时间几乎都不太相同,而识别演讲者的讲话内容还必须要按照讲话的顺序进行识别。 这就需要有一种能力更强的模型:该模型具有一定的记忆能力,能够按时序依次处理任意长度的信息。这个模型就是今天的主角“循环神经网络”(Recurrent Neural Networks,简称RNN)。 循环神经网络(RNN),神经元的输出可以在下一个时间戳直接作用到自身(作为输入)...
雪饼 发布于 1周前 阅读 127

AutoML自动化机器学习技术深入

之前发表了一篇介绍AutoML技术的文章,但感觉还不够深入。今天抽出时间来仔细分析了AutoML相关框架的源码,见微知著,希望能更全面准确的把握目前的AutoML技术现状。 这次,我首先拿Auto_ML这块框架作为切入点,分析了框架源码的工作流,以及用到的技术,再与其他框架进行了横向比较,分析记录如下: AutoML 1.首先创建 Predictor 预测器; 一个Predictor预测器支持两种类型的任务:分类和回归 主要设置两个参数 type_of_estimator 和 column_descriptions type_of_estimator 指定了任务类型(classifier 或者 regressor) column_descriptions 指定了字段描述信息,如果为分类任务时,需指定Y所在的列(output)   2.调用Predictor 预测器的train方法训练模型; 一个简单的train方法,却做了很多事情: a. _clean_data_and_prepare_for_training :数据清洗和准备 _prepare_for_training:准备X和Y;删除X中的重复字段;删除Y值缺失的记录;将X中所有字段转换为float类型; 将Y值标准化; b.fit_transformation_pipeline :数据转换并输入管道 如果要使用深度学习组件,这里就会多一步特征学习的过程,调用方法名为:fit_feature_learning_and_transformation_pipeline 适应...
邵可佳 发布于 1周前 阅读 97 打赏 2

Gateway杂谈:Gateway环境的构建和整合

gateway
fagongzi 发布于 1周前 阅读 36

佟刚Spring4.0学习笔记

1. 概述 Spring是一个开源框架,它为简化企业级应用开发而生,可以使简单的JavaBean实现以前只有EJB才能实现的功能。 1.1. 特点 轻量级(非侵入性):基于Spring开发的时候,我们不需要实现Spring提供的任何接口,也不需要继承Spring的任何类,然后我们就可以使用Spring给我们提供的功能 依赖注入(DI-Dependency Injection、IOC) 面向切面编程(AOP-Aspect Oriented Programming) 容器:Spring是一个容器,它可以管理应用对象的生命周期 一站式框架:在IOC和AOP的基础上可以整合各种企业级的开源框架和优秀的第三方类库(实际上Spring自身也提供了展现层的Spring MVC和持久层的Spring JDBC) 组件组合:Spring实现了使用简单的组件组合成一个复杂的应用,在Spring中可以使用XML配置和Java注解组合这些组件 1.2. 模块 1.3. 配置文件 一个典型的Spring项目需要创建一个或多个Bean配置文件,这些配置文件用于配置Spring IOC容器管理的Bean。Bean的配置文件可以放在Classpath下,也可以放在其它目录下。 2. Hello World HelloWorld.java package org.lin.stu.spring; public class HelloWorld { private String name; public void setName(String name) { ...
情话撩人 发布于 1周前 阅读 660 点赞 1

矛盾的根源

       很多时候,我们感觉自己的思想跟自己的行为处于了一个矛盾状态,怎么都走不出来。其实这个大多数情况是因为中西方文化的差异导致的,我们身处中国,从小到大接受的很多却是西方文化,也就导致了矛盾的产生。下面来说一说中西方文化的差异。         西方是神本位,中国是人本位。西方信上帝,在他们的思想中,他们都是上帝的子民,所以西方提倡人人平等,而在中国则是以人为本。像佛教、基督教、伊斯兰教都是从其他国家传入中国的,中国不需要宗教,中国以人为本,我就是释迦牟尼,我就是基督,我就是默罕默德。人人平等一说在西方是真正的平等,但在中国讲究伦理道德,你会直接喊你爸的名字吗?但在国外可以。在中国其实奉行的是合理的平等。在中国,不可能有绝对的平等,老板就是老板,员工就是员工;长辈就是长辈,小辈就是小辈。有些话你敢跟你的员工说,但却不敢跟你的上司说。国外家长打孩子这叫侵犯人权,中国家长打孩子这叫教育。国外18岁之前家长照顾孩子,18岁以后自力更生;在中国可以吗?假如真有,这叫狠心的家长。西方认为人和动物是一样的,他们认为人也是动物;但中国认为认识最富有智慧的,认识最高贵的存在。这就是中西方文化差异之一,...
影狼 发布于 3小时前 阅读 4

Solr7.2.1新建core

先在管理中心添加一个core 这个时候会报错 千万不要慌 ,看下面的操作 [root@192 solr_home]# ls configsets contrib dist mycore1 mycore2 README.txt solr.xml zoo.cfg [root@192 solr_home]# ll mycore2/ 总用量 0 可以看到已经多了一个mycore2的文件夹,但是里面是空的。 复制配置文件到mycore2目录下 cp /root/solr-7.2.1/server/solr/configsets/_default/conf ./mycore2/ -rf [root@192 solr_home]# ll mycore2/ 总用量 0 drwxr-xr-x. 3 root root 143 2月 20 23:41 conf 修改conf里面的solrconfig.xml文件 vim mycore2/conf/solrconfig.xml ## 修改路径 <lib dir="/opt/solr_home/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="/opt/solr_home/dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="/opt/solr_home/contrib/clustering/lib/" regex=".*\.jar" /> <lib dir="/opt/solr_home/dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="/opt/solr_home/contrib/langid/lib/" regex=".*\.jar" /> <lib dir="/opt/solr_home/dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="/opt/solr_home/contrib/velocity/lib" r...
我可能是个傻子 发布于 6小时前 阅读 4

ThreadLocal和InheritableThreadLocal的使用

ThreadLocal和InheritableThreadLocal的使用
君子如兰 发布于 1个月前 阅读 77

Java 9 新特性概述

Java 9 正式发布于 2017 年 9 月 21 日 。作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外,还有一些新的特性。 本文对 Java9 中包含的新特性做了概括性的介绍,可以帮助你快速了解 Java 9
IBM Cloud

《SRE:Google运维解密》

前言 问世近一年以来,《SRE: Google 运维解密》一书销量累计已两万余册。我想首先感谢各位读者对本书的支持,真的是衣食父母呀!如果还没有下单购买,是不是看过本文之后可以考虑尽快呢? 随着SRE概念在在国内外的火爆传播,相信很多朋友也对此书有了一定程度的了解。感谢 GitChat 平台,我这次有机会和大家再分享一下书内书外的故事。希望不管您是否看过本书,本文的信息都能对您有用! 成书花絮 首先要明确的是,这本书是一本文集。Google内部在2014年进行了一次题目+作品征集工作,由封面上的编者团将收集来的投稿筛选,据称砍掉2/3内容才 (原始资料据称超过1500页) 最后得以问世。 技术类书籍成书难,和大数据项目的关键难点很像。那就是——没有数据。据我和国内运维岗位交流的感觉,别说写文档了,就连服务器密码都是只记在脑子里的,根本没时间写下来好嘛。玩笑归玩笑,但是道理不变, Google SRE 给我留下的一个不可磨灭的印记就是——文档重过一切。没写文档,救火责任永远在你自己身上背着,出问题半夜也要爬起来解决啊。写完文档,救火责任就变成大家共享的了,就可以开心的睡觉了。每个团队成员会主动维护本组文档,时刻保持其为最新。知识共享的第一步,当...
linuxprobe16 发布于 4周前 阅读 9

endnote X8破解版下载链接以及教程

网上搜集的,供大家使用 完整的安装包请到百度云盘下载,地址:http://pan.baidu.com/s/1ctbQRc 说明:将汉化文件直接复制到程序安装目录中,双击即可运行 建议大家为其创建一个快捷方式。想用中文界面,就启动汉化文件;想用原版,就使用原英文版的快捷方式即可。 PS: Endnote X8只能在Win7及以上系统运行,不再支持WinXP。 如果你已经下载过论坛中的Endnote X8大客户版,那么直接下载附件即可;如果还没有安装Endnote X8,那么到百度云盘下载完整的安装包及汉化文件。 教程: https://wenku.baidu.com/view/bc79cc2402d8ce2f0066f5335a8102d277a26147.html  
松马科 发布于 3周前 阅读 9

使用SseEmitter不断向网页输出结果

## 序 之前写过一篇文章:springmvc不断输出文本到网页,采用的是对response不断进行write和flush实现的。在spring 4.2版本的时候提供了一个SseEmitter可以直接用来实现这个功能。 ## 实例 ``` @Controller @RequestMapping("/sse") public class SseEmitterController { private static final Logger LOGGER = LoggerFactory.getLogger(SseEmitterController.class); @Autowired @Qualifier("mvcTaskExecutor") ThreadPoolTaskExecutor mvcTaskExecutor; @GetMapping("") public SseEmitter sseDemo() throws InterruptedException { final SseEmitter emitter = new SseEmitter(0L); //timeout设置为0表示不超时 mvcTaskExecutor.execute(() -> { try { for(int i=0;i<100;i++){ emitter.send("hello"+i); LOGGER.info("emit:{}","hello"+i); Thread.sleep(1000*1); } emitter.complete(); } catch (Exception e) { emitter.completeWithError(e); } }); return emitter; } } ``` 输出实例 ``` data:"hello0" data:"hello1" data:"hello2" data:"hello3" data:"hello4" data:"hello5" //...... ``` ## 注意事项 - 这里的SseEmitter的send不能阻塞mvc线程,必须提前返回,...
go4it 发布于 1个月前 阅读 24

你可能不知道的10条SQL技巧

这几天在写索引,想到一些有意思的TIPS,希望大家有收获。
Sailor20 发布于 3个月前 阅读 8

spring采坑记之无xml静态资源拦截

在传统的xml项目中,使用spring静态资源拦截非常简单,需要在dispatchor的xml中加入mvc命名空间 然后使用  <mvc:default-servlet-handler/> 以及 <mvc:resources location="/xxx/**" mapping="/xxx/"/> 即可映射到。路径可以是磁盘的位置,也可以是网络位置。这样做的好处就是我们可以最简单的实现静态资源与项目分离。实现对静态资源的统一管理 当然,本文不是针对有xml配置。那么,在没有配置文件的工程中如何启用静态资源拦截呢?   第一步需要注册spring的根上下文和servlet上下文 我这里使用的是实现WebApplicationInitializer 的方式,大家也可以使用继承 如下三个类以达到同样的效果,废话不多说,进入正题: 重写onStartup方法来初始化spring容器和springmvc子容器。   然后在mvc配置类继承WebMvcConfigurerAdapter适配器,重写 addResourceHandlers(ResourceHandlerRegistry registry) 方法,定义路径,等同于 <mvc:resources location="/xxx/**" mapping="/xxx/"/> 再重写 configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 使其生效,等同于 <mvc:default-servlet-handler/> 之后启动工程即可使用我们配置的路径访问到对应静态资...
Autorun 发布于 2个月前 阅读 36 评论 1 点赞 1

c语言开发JSON

安装json-c 库 $ sudo apt-get install libjson0-dev libjson0 代码json_test.c #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include<json/json.h> int main(int argc, char **argv) { struct json_tokener *tok; struct json_object *my_string, *my_int, *my_object, *my_array; struct json_object *new_obj; int i; my_string = json_object_new_string("\t"); /*输出 my_string= */ printf("my_string=%s\n", json_object_get_string(my_string)); /*转换json格式字符串 输出my_string.to_string()="\t"*/ printf("my_string.to_string()=%s\n",json_object_to_json_string(my_string)); /*释放资源*/ json_object_put(my_string); my_string = json_object_new_string("\\"); printf("my_string=%s\n", json_object_get_string(my_string)); printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string)); json_object_put(my_string); my_string = json_object_new_string("foo"); printf("my_string=%s\n", json_object_get_string(my_string)); printf("my_string.to_stri...
wangxuwei 发布于 6小时前 阅读 3

springmvc开门篇之源码解读ContextLoaderListener

前言: springmvc是什么,能做什么,即使是新手,也应该有所了解,俺这里就不一一赘述了。 首先我们需要引入javaee的一些概念,为什么要引入它呢?不明觉厉,不管是什么样的web框架,那么这玩意是基础。不用怀疑。所以不管如何变化,我们要谨记,是跟javaee的东西打交道。 需要大家自行掌握的概念有: servlet容器,包括ServletContext,Listener,ServletConfig。 session,request这些就不说了。 工欲善其事,必先利其器。所以我们需要先折腾一个springmvc的工程。我这里使用maven模板去创建。   选择这一个模板 org.jetbrains.idea.maven.model.MavenArchetype   工程创建完后我们需要引入对应的jar包。我这里按照最小化配置来。 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.2.RELEASE</version> </dependency>   加入webmvc(ps: 这里使用了webmvc,它里面又内置了好几个。包括我们熟悉的servlet, spring-beans,context等等) 具体详见webmvc的pom。这里不再累述,我们继续配置 最后加完的jar包有这么多,实际上因为servlet-api是provided的 所以这里没有出现,但并不意味着他不存在。。 在web.xml...
Autorun 发布于 1个月前 阅读 1474 点赞 1

Ubuntu出现 The system is running in low-graphics mode解决办法

在网上查了一下,解决的方法很多,终于找到了一个适合我这里问题的方案,引用如下:  I have recently received a similar issue with myPangolin Performance laptop. The folks at System 76 told me to do the following: Click Okay and then select the option to get a terminal. (alternatively you can press ctr+alt+f1 to bring up another tty) sudo chown lightdm:lightdm -R /var/lib/lightdm sudo chown avahi-autoipd:avahi-autoipd -R /var/lib/avahi-autoipd sudo chown colord:colord -R /var/lib/colord sudo reboot ---------------------------------------------------------------------------- 附:在网上还找到另外一种方式,安装网卡驱动: # 对于最新的Nvidia二进制驱动: sudo add-apt-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get install nvidia-current nvidia-current-modaliases nvidia-settings # 对于最新的ATI/AMD二进制驱动: sudo add-apt-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get install fglrx 我安装的是nvidia的驱动,重启后进入到登录界面,输入用户名密码...
驛路梨花醉美 发布于 2个月前 阅读 20

Haskell 写几个leetcode题,代码很简单

1.把数组分成和大小一样的集合 2.反转字串中的元音字母 3.重复子字符串模式,判断其是否可由一个子字符串重复多次组成 4.递增三元组子序列 5.岛的周长 6.Snapchat面试题-青蛙跳
hell0cat 发布于 2个月前 阅读 10

AspectJ中的优先级

有时候,多个切面(Aspect)可能会作用于同一个连接点(JoinPoint)。这种情况下,切面解析的顺序基于切面优先级。 1 切面的优先级规则 1.1 切面在不同的方面中定义时 当两个切面定义在不同的方面aspect时,有三条情况: 在一定的优先级声明形式下,如果方面A匹配早于方面B时,那么对于相同的连接点,方面A的所有切面的优先级都高于切面B。 否则,如果方面A是方面B的子方面,那么方面A的切面优先级高于切面B的。因此,除非指定了优先级声明,子方面的切面的优先级都高于父方面的。 否则,如果两个切面定义在不同的方面中,他们的优先级则无法确定。 1.2 切面在相同的方面中定义时 如果两个切面定义在同一个方面,有两种情况: 如果他们都是after切面,那么方面中后定义的切面优先级高于先定义的切面。 否则,方面中先定义的切面优先级高于后定义的切面。 2 优先级的声明 public aspect SystemArchitecture { declare precedence : Security*, TransactionSupport, Persistence; // ... } //can be written as: @Aspect @DeclarePrecedence("Security*,org.xyz.TransactionSupport,org.xyz.Persistence") public class SystemArchitecture { ...
勇敢的飞石 发布于 1个月前 阅读 6

从“阿北的知识分享”新增视频模板消息推送开始说yii2队列

> 之前群里很多会员说如何用yii2实现队列功能,这个系列我们就来说说yii2官方的队列扩展yii2-queue,细节很多,第一篇通过一个例子带你入门。 先说需求吧~ 我想做这样一个功能:每次有新视频发布的时候,给订阅过此视频所在教程的会员发送一条模板消息,但是我如果在发布课程的时候就一次性发送模板消息有可能导致速度问题和被封的危险。 **所以我想将接收者们在时间上分开,比如100个人,每5-10秒发送一个,我用yii2-queue来实现它** > yii2-queue是yii2官方去年推出的一个扩展,支持延迟推送并且队列可以存储到多种媒介中,比如文件、数据库等等。 在队列中有几个概念要先说下 **任务(task)** 就是我们具体要做的事情,在本次就是发送微信模板消息这样一件事情,yii2-queue说每个任务都应该被定义为一个单独的类。任务最终会进入到队列中等待发送。 **工作者(worker)** 工作者负责任务的调度,比如当下一秒应该执行队列中的哪个任务了,当然它还负责监听一些信息,比如当前队列有多少个任务在等待、多少个已经完成等。 因此我的思路来了,在新建视频的时候我将要发送的模板消息放到队列中,这个过程并不负责发送,然后有一个命令行worker帮我完成具体发送工作。 # 先...
阿北2017 发布于 2周前 阅读 86

HDwiki+discuz在启用https下的整合问题

这几天在折腾HDwiki+discuz,系统环境是FreeBSD 10.4, PHP 5.6(HDwiki要求),PHP-PDO_MYSQL,PHP-GD,PHP-XML等,MYSQL 5.7 HDwiki 5.1(6.0安装成功后打开前台,提示http 500错误,找不到原因) discuz X3.4 因为宽带运营商关闭了80端口,443端口有开,所以就直接用上https,结果问题一大堆。 首先,discuz和ucenter在https下通信失败,后来找到修改方法: DISCUZ 开启https后ucenter通信失败解决方法,一般是做完301重定向https后通信失败的,下面是具体解决方法: 打开目录 uc_server/model/misc.php 文件;找到69行,插入下面代码: ...... $port = !empty($matches['port']) ? $matches['port'] : ($matches['scheme'] == 'https' ? 443 : 80); //以下为插入代码 if(substr($url,0,5)=='https'){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($post){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } if($cookie){ curl_setopt($ch, CURLOPT_COOKIE, $cookie); } curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); return curl_exec($ch); } //插入代码结束 if($post) {             $ou...
ankexun 发布于 2周前 阅读 78 评论 1

React Native - Bug :Setting onMessage on a WebView overrides existing values of window.postMessage,

Setting onMessage on a WebView overrides existing values of window.postMessage, but a previous value was defined.       injectedJavascript should instead be the following (function() { var originalPostMessage = window.postMessage; var patchedPostMessage = function(message, targetOrigin, transfer) { originalPostMessage(message, targetOrigin, transfer); }; patchedPostMessage.toString = function() { return String(Object.hasOwnProperty).replace('hasOwnProperty', 'postMessage'); }; window.postMessage = patchedPostMessage; })(); And then it works! 😄 And if any one is interested, in my code instead of writing a giant string I did the following const patchPostMessageFunction = function() { var originalPostMessage = window.postMessage; var patchedPostMessage = function(message, targetOrigin, transfer) { originalPostMessage(message, targetOrigin, transfer); }; patchedPostMessage.toString = function() { return String(Object.hasOwnProperty)...
xmqywx 发布于 3个月前 阅读 27

scss转换成css,hotcss

主要是学习移动端适配的时候练习总结下来的。
wftt 发布于 2周前 阅读 8

RestTemplate乱码的问题 @Arthur

      RestTemplate的Http请求机制一直在用,但从没有深究过,今天使用它的postForEntity方法发送xml片段时(动态创建栅格图层),出现了乱码问题。        和安娜讨论,发现以下情况:       1、通过HttpHeaders的setContentType(“applicaiton/json;charset=UTF-8”)方法,约定字符。它是按照Http协议的要求,向服务器声明发送的json字符集的。        2、在这样的设置情况下,用RestTemplate时可能还会发生乱码,其原因是RestTemplate有一系列HTTP消息转换器(HttpMessageConverter)。这个消息转换器集合中第1个消息转换器StringHttpMessageConverter,它默认字符集是“ISO-8859-1”。所以当我们发送的字符流是UTF-8时,就会出乱码。  所以处理办法是通过restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)),改变一下StringHttpMessageConverter的字符集。  网上参考:http://blog.csdn.net/luccs624061082/article/details/40980623  ...
增删改查1 发布于 2个月前 阅读 15

会玩弹珠也可以拿来炫了?是的,这个技能燃爆了!

通过创建一个支持在多个所有者之间转移弹珠的资产转移应用程序,学习链代码和 Hyperledger Fabric 网络中的应用程序开发的基础知识。
IBMdW 发布于 3周前 阅读 10

Android WebView详解(二):Android原生与JS互调

#### Android 去调用JS 的代码 - 通过WebView的loadUrl() 先写一个html,很简单的一个代码,alert显示。 android\_load\_js.html Android调用 JS 代码demo // JS代码 在Activity中 mWebSettings = mWebview.getSettings(); //与JS交互开关 mWebSettings.setJavaScriptEnabled(true); //设置允许JS弹窗 mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true); mWebview.loadUrl("file:///android_asset/android_load_js.html"); //在这我用了一个TextView 点击事件中去调用JS中的方法 beginLoading.setOnClickListener(new View.OnClickListener() { [@Override](https://my.oschina.net/u/1162528) public void onClick(View view) { //执行JS方法 mWebview.loadUrl("javascript:callJS()"); } }); mWebview.setWebChromeClient(new WebChromeClient() { //获取网站标题 [@Override](https://my.oschina.net/u/1162528) public void onReceivedTitle(WebView view, String title) { System.out.println("标题在这里"); mtitle.setText(title); } //获取加载进度 [@Override](https://my.oschina.net/u/1162528) public void onProgressChanged(WebView view, int ...
蔡小鹏 发布于 2周前 阅读 206

开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!

Tutorialzine 每个月都会公布一次当月新增的 JS 和 CSS 库。2018 新年之际,该网站整理出了 2017 年最受用户欢迎和喜爱的一些 JS 和 CSS 库,供大家学习和参考。 JavaScript 本地存储库 localForage localForage 是一个 JavaScript 库,提升了应用程序的离线体验,通过使用异步的数据存储,提供简单的类似 localStorage 的 API,允许开发者存储多种类型数据。 CSS3 驱动的动画滚动库 AOS AOS(Animate on scroll)是小型动画滚动库,可在页面滚动时给元素添加动画效果。CSS3 驱动,效果类似于 WOWJS。 响应式邮件标识语言 MJML MJML 是一个标识语言,用来减少编写响应式邮件的复杂度。其语义语法在展示丰富邮件内容时更加简单和直观。该项目提供一个开源的引擎用来将 MJML 标识语言转成 HTML。 基于浏览器的代码编辑器 Monaco-Editor Monaco Editor 是微软开源的基于 VS Code 的代码编辑器,运行在浏览器环境中。编辑器提供代码提示,智能建议等功能。供开发人员远程更方便的编写代码。 Web 虚拟现实框架 A-Frame A-Frame 是 Mozilla 开源的网页虚拟现实体验( WebVR )框架,可用于桌面、iPhone(即将支持安卓)以及 Oculus Rift。A-Frame 可以让创建 WebVR 体验变得...
编辑部的故事 发布于 2天前 阅读 2499 评论 5 点赞 4

前端利器,6 款开源 Web 性能优化辅助工具推荐

Web 性能优化是一个老生常谈的话题,也是前端页面开发十分重要的部分。当页面加载速度越慢,用户流失的概率就越大,性能和交互直接影响用户体验。下面推荐几款 Web 性能优化辅助工具推荐,希望能对大家有所帮助。 1、Lighthouse Lighthouse 是 Google 开源的一个自动化工具,用于改进网络应用的质量。你可以将其作为一个 Chrome 扩展程序运行,或从命令行运行。 当为 Lighthouse 提供一个要审查的网址,它将针对此页面运行一连串的测试,然后生成一个有关页面性能的报告。可以参考失败的测试,看看可以采取哪些措施来改进应用。 Chrom 扩展则会把报告以非常人性化的图形界面展示给你。 2、Speed Racer SpeedRacer 是一款性能测试工具,它在 Chrome 中运行脚本,并生成详细的性能报告。 SpeedRacer 是直接借助浏览器来实际测试性能的工具,在实际工作中,可以与其它模拟用户访问流量来评估性能的工具配合使用。 3、Yellow Lab Tools Yellow Lab Tools 是一款 Web 性能及前端质量测试工具。与其他工具不同的是,它有一些在其他工具上无法看到的独特功能,例如页面加载时 JavaScript 与 DOM 互动和其他程序代码验证问题。 Yellow Lab Tools 偏向于一个发现不良实践的工具,...
编辑部的故事 发布于 2天前 阅读 1004 评论 3 点赞 4

SpringBoot项目中使用AOP

## 1.概述 将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 具体的代码参照 [示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-aop](https://github.com/qihaiyan/springcamp/tree/master/spring-aop) Spring的AOP技术主要有4个核心概念: 1. Pointcut: 切点,用于定义哪个方法会被拦截,例如 ```execution(* cn.springcamp.springaop.service.*.*(..))``` 2. Advice: 拦截到方法后要执行的动作 3. Aspect: 切面,把Pointcut和Advice组合在一起形成一个切面 4. Join Point: 在执行时Pointcut的一个实例 5. Weaver: 实现AOP的框架,例如 AspectJ 或 Spring AOP ## 2. 切点定义 常用的Pointcut定义有 execution 和 [@annotation](https://my.oschina.net/annotation) 两种。execution 定义对方法无侵入,用于实现比较通用的切面。[@annotation](https://my.oschina.net/annotation) 可以作为注解加到特定的方法上,例如Spring的Transaction注解。 execution切点定义应该放在一个公共的类中,集中管理切点定义。 示例: ```java public class CommonJoinPointConfig { @Pointcut("ex...
QiHaiYan 发布于 2天前 阅读 643 评论 1

Java实现的k-means聚类算法

### 需求 ``` 对MySQL数据库中某个表的某个字段执行k-means算法,将处理后的数据写入新表中。 ``` ### 源码及驱动 ``` http://download.csdn.net/download/xiaobuding007/10203673 ``` ### 源码 ```java import java.sql.*; import java.util.*; /** * @author tianshl * @version 2018/1/13 上午11:13 */ public class Kmeans { // 源数据 private List origins = new ArrayList<>(); // 分组数据 private Map> grouped; // 初始质心列表 private List cores; // 数据源 private String tableName; private String colName; /** * 构造方法 * * @param tableName 源数据表名称 * @param colName 源数据列名称 * @param cores 质心列表 */ private Kmeans(String tableName, String colName,List cores){ this.cores = cores; this.tableName = tableName; this.colName = colName; } /** * 重新计算质心 * * @return 新的质心列表 */ private List newCores(){ List newCores = new ArrayList<>(); for(List v: grouped.values()){ newCores.add(v.stream().reduce(0, (sum, num) -> sum + num) / (v.size() + 0.0)); } Collections.sort(newCores); return newCores; } /...
tianshl 发布于 1个月前 阅读 48040

ELK -- Logstash安装与配置

### Logstash ##### 使用yum安装 ###### 编辑 repo ``` vim /etc/yum.repos.d/elasticsearch.repo # 内容如下 [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md ``` ###### 安装 ``` sudo yum install logstash ``` #### 配置 Logstash ``` # 参考 https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html # input项配置源数据,此处为监听 "/log"目录下满足"insert.*.log"匹配的所有日志文件 # filter项过滤input输入的数据, "insert.*.log"中每条日志形式如:"2018-01-15 | type | cid | src | eventId | reason", 所以使用" | "拆分每条日志 # output项是输出数据,此处为输出至ElasticSearch # 新建配置文件 insert.conf vim conf.d/insert.conf # 内容如下 input { file { path => "/log/insert.*.log" } } filter { mutate{ split=>["message"," | "] add_field => { "date" => "%{[message][0]}" } add_field => { "type" => "%{[message][1]...
tianshl 发布于 1个月前 阅读 30764

Nginx日志配置及分割

1. 格式化日志内容 2. 日志文件切割
tianshl 发布于 2个月前 阅读 272498 点赞 1

Django开发环境

### 1.虚拟环境 ``` tianshl:workspace tianshl$ mkdir server tianshl:workspace tianshl$ cd server/ tianshl:server tianshl$ virtualenv venv --python=python3 tianshl:server tianshl$ source venv/bin/activate ``` ### 2. 安装依赖 ``` (venv) tianshl:server tianshl$ pip install django (venv) tianshl:server tianshl$ pip install djangorestframework ``` ### 3. 创建项目 ``` (venv) tianshl:server tianshl$ django-admin.py startproject server (venv) tianshl:server tianshl$ tree server/ server ├── manage.py └── server ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ``` ### 4. 更新配置 ``` (venv) tianshl:server tianshl$ cd server/ (venv) tianshl:server tianshl$ vim server/settings.py # 1.修改 INSTALLED_APPS = ( ... 'rest_framework', ) # 2.添加 REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }...
tianshl 发布于 1个月前 阅读 12688

免费云服务器

如何快速申请免费的阿里云服务器
tianshl 发布于 2个月前 阅读 238250 点赞 1

MacOS 配置Java环境变量

### 编辑 bash_profile ```shell vim ~/.bash_profile 输入以下内容并保存 export JAVA_HOME=`/usr/libexec/java_home` export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin ``` ### 使环境变量生效 ``` source ~/.bash_profile ``` ### 检验 ```shell tianshl@tianshl ~ $ echo $PATH ``` ### 备注 ``` 1. source前使用fish的要先退出fish 2. /usr/libexec/java_home 这条命令可以输出JAVA_HOME的路径 ```
tianshl 发布于 3个月前 阅读 354634 点赞 1

Supervisor&Gunicorn&Django

# django ``` # 刚写的就不复制粘贴了 https://my.oschina.net/tianshl/blog/1611257 # 列一下目录结构 root@tianshl:~# cd server/ root@tianshl:~/server# tree server server ├── db.sqlite3 ├── manage.py └── server ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ``` # gunicorn ##### 安装 ``` pip install gunicorn ``` ##### 配置 ``` # 修改django项目的settings.py INSTALLED_APPS = [ ...... 'gunicorn', ] ``` ##### 运行 ``` root@tianshl:~# cd /root/server/server/ root@tianshl:~/server/server# gunicorn --pythonpath /root/server/venv/bin/python3 -w 3 -b 0.0.0.0:80 server.wsgi # 测试能否正常运行, 然后ctrl+c结束进程 ``` # supervisor ##### 安装 ``` pip install supervisor ``` ##### 配置 ``` # 默认配置 # 使用echo_supervisord_conf命令查看默认配置 root@tianshl:~# echo_supervisord_conf # 自定义配置 root@tianshl:~# mkdir /etc/supervisor root@tianshl:~# mkdir /etc/supervisor/conf.d root@tianshl:~# echo_supervisord_conf > /etc/supervisor/supervisor.conf root@tianshl:~# vim /etc/su...
tianshl 发布于 1个月前 阅读 12697

Java中的OneToMany

### 写在开头 ``` 使用jhipster声明的OneToMany在One的一方DTO中是没有与Many的DTO的映射关系的, 为了在One的一方DTO中使用Many的DTO, 使用以下三步解决此问题。 ``` ### 步骤 ``` 1. OneDTO 中的"mark 1"处为自己写的一对多的关系, 此处变量名称不能与实体One中相应的变量名称一致,否则编译失败。 2. OneMapper 中的"mark 2"处 uses属性添加ManyMapper。 2. OneMapper 中的"mark 3"处使用@Mapping注解声明 Entity 转 DTO 的映射关系。 ``` ### Entity ``` @Entity @Table(name = "one") public class One { ... @OneToMany(mappedBy = "one") private Set manys = new HashSet<>(); ... public void setManys(Set manys) { this.manys = manys; } public Set getManys() { return manys; } } @Entity @Table(name = "many") public class Many { ... @ManyToOne private One one; } ``` ### DTO ``` public class OneDTO { ... // mark 1 private Set manyDTOS = new HashSet<>(); ... public void setManyDTOS(Set manyDTOS) { this.manyDTOS = manyDTOS; } public Set getManyDTOS() { return manyDTOS; } } public class ManyDTO { ... private Long oneId; ... public...
tianshl 发布于 3周前 阅读 7909

Java递归拷贝文件夹

### 拷贝文件或文件夹 ``` /** * 拷贝文件 * * @param source 源文件 * @param target 目标文件 */ public void copyFile(String source, String target) { // 源文件 File sourceFile = new File(source); if (!sourceFile.exists()) { return; } // 目标文件 File targetFile = new File(target); // 文件拷贝 if (sourceFile.isFile()) { copyFromChanel(sourceFile, targetFile); return; } // 文件夹拷贝 if (!targetFile.exists()) { targetFile.mkdirs(); } for (File file: sourceFile.listFiles()) { copyFile(file.getAbsolutePath(), target + File.separator + file.getName()); } } ``` ### 利用文件管道拷贝文件 ``` /** * 利用文件管道拷贝文件 * * @param source 源文件 * @param target 目标文件 */ public void copyFromChanel(File source, File target) { // 文件流 FileInputStream fis = null; FileOutputStream fos = null; // 文件管道 FileChannel fci = null; FileChannel fco = null; try { // 文件流 fis = new FileInputStream(source); fos = new FileOutputStream(target); // 文件管道 fci = fis.getChannel(); fco = fos.getChannel(); ...
tianshl 发布于 2个月前 阅读 272131 点赞 1

ELK -- ElasticSearch集群安装、配置及错误处理

### ElasticSearch ``` 现有三台服务器[192.168.1.30, 192.168.1.31, 192.168.1.32],使用这三台服务器搭建ElasticSearch集群 ``` #### CentOS 使用 yum 安装 ###### 编辑 repo ``` vim /etc/yum.repos.d/elasticsearch.repo # 内容如下 [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md ``` ###### 使用yum安装 ``` yum install elasticsearch ``` ###### 创建用户 ``` useradd elastic ``` ###### 修改权限 ``` # 数据 chown -R elastic:elastic /var/lib/elasticsearch # 日志 chown -R elastic:elastic /var/log/elasticsearch # 配置 chown -R elastic:elastic /etc/elasticsearch chown -R elastic:elastic /etc/sysconfig/elasticsearch # 指令 chown -R elastic:elastic /usr/share/elasticsearch ``` ###### 配置 ``` # 主节点 192.168.1.30 vim /etc/elasticsearch/elasticsearch.yml # 修改以下几项 cluster.name: etl_es node.name: node-30 node.master: true node.d...
tianshl 发布于 1个月前 阅读 30444

Nginx日志分割

### 一.使用脚本切割 ##### 编辑脚本 ``` tianshl@tianshl nginx $ vim nginx_log_division.sh ``` ##### 脚本内容 ``` #! /bin/sh # 昨天日期 yesterday=`date -v -1d +%Y%m%d` # 日志目录 log_path="/usr/local/var/log/nginx/" # SDK日志路径 sdk_path=${log_path}sdk # 以天为单位切分日志 mv -f ${sdk_path}.log ${sdk_path}_${yesterday}.log # 重新生成日志文件 pid_path="/usr/local/var/run/nginx.pid" sudo kill -USR1 `cat ${pid_path}` ``` ##### 定时任务 ###### 切换到root身份 ``` tianshl@tianshl nginx $ sudo su root ``` ###### 编辑 crontab ``` sh-3.2# crontab -e ``` ###### crontab 添加一行 ``` 0 0 * * * sh /usr/local/var/log/nginx/nginx_log_division.sh ``` ###### 查看是否添加成功 ``` sh-3.2# crontab -l ``` ### 二.不使用脚本切割 ##### server 段增加以下代码 ``` if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") { set $time $1$2$3; } ``` ##### 日志文件路径中增加日期参数 ``` access_log /var/log/nginx/api-$time.log; ``` ##### 举个栗子 ``` events { worker_connections 1024; } http { server { # 监听88端口 listen 88;...
tianshl 发布于 2个月前 阅读 273981

Python随机生成手机号

### 依据 ``` 根据2017年10月份最新的手机号正则进行编码, 正则如下: (13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8} ``` ### 代码 ``` # -*- coding: utf-8 -*- import random def create_phone(): # 第二位数字 second = [3, 4, 5, 7, 8][random.randint(0, 4)] # 第三位数字 third = { 3: random.randint(0, 9), 4: [5, 7, 9][random.randint(0, 2)], 5: [i for i in range(10) if i != 4][random.randint(0, 8)], 7: [i for i in range(10) if i not in [4, 9]][random.randint(0, 7)], 8: random.randint(0, 9), }[second] # 最后八位数字 suffix = random.randint(9999999,100000000) # 拼接手机号 return "1{}{}{}".format(second, third, suffix) # 生成手机号 phone = create_phone() print(phone) ``` ### 运行结果 ``` 13937342780 15835720604 14589505530 ... ``` ### 验证 (使用正则验证) ``` # -*- coding: utf-8 -*- import random import re def create_phone(): # 第二位数字 second = [3, 4, 5, 7, 8][random.randint(0, 4)] # 第三位数字 third = { 3: random.randint(0, 9), 4: [5, 7, 9][random.randint(0, 2)], 5: [i for i in range(10) if i != ...
tianshl 发布于 3个月前 阅读 297708 评论 1

Sublime配置Python3运行环境

### 新增Python3编译环境 ``` Tools > Build System > New Build System 将默认内容替换为: { "cmd": ["python3", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" } 保存为 Python3.sublime-build ``` ### 选中Python3环境 ``` Tools > Build System > Python3 ``` ### 使用Python3编译运行 ``` Ctrl + b ``` ### 可能遇到的问题 ##### 问题 ``` UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) ``` ##### 原因 ``` 默认是ascii编码但是输出中包含中文 ``` ##### 解决 ``` Preferences > Browse Packages > Users > Python3.sublime-build 修改配置文件, 配置文件中新增一条 "env": {"LANG": "en_US.UTF-8"} 修改后如下: { "cmd": ["python3", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", "env": {"LANG": "en_US.UTF-8"} } ```...
tianshl 发布于 1个月前 阅读 14021

JavaScript指定长度和进制的UUID

### 指定长度和进制的UUID ``` /** * 指定长度和进制的UUID * @param len 长度 * @param radix 进制 * @returns {string} */ function uuid(len, radix) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); var uuid = [], i; radix = radix || chars.length; if (len) { for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; } else { var r; uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random()*16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); } ``` ### 测试 ``` uuid(32, 2) "11110011000001100111011111001111" uuid(32, 8) "31730315503322654076326054034634" uuid(32, 10) "50235847867589708943975575132412" uuid(32, 16) "405F8CA9918F71FC9C73DACB47CEC6EE" ```...
tianshl 发布于 3个月前 阅读 339014

实用又好用,6 款 Python 特殊文本格式处理库推荐

以下是一些 Python 编写的用来解析和操作特殊文本格式的库,希望对大家有所帮助。 1、Tablib Tablib 是一个用来处理与表格格式数据有关的 Python 库,允许导入、导出、管理表格格式数据,并具备包括切片、动态列、标签和过滤,以及格式化导入和导出等高级功能。 Tablib 支持导出/导入的格式包括:Excel 、JSON 、YAML 、HTML 、TSV 和 CSV ,暂不支持 XML 。 >>> data = tablib.Dataset(headers=['First Name', 'Last Name', 'Age']) >>> for i in [('Kenneth', 'Reitz', 22), ('Bessie', 'Monke', 21)]: ... data.append(i) >>> print(data.export('json')) [{"Last Name": "Reitz", "First Name": "Kenneth", "Age": 22}, {"Last Name": "Monke", "First Name": "Bessie", "Age": 21}] >>> print(data.export('yaml')) - {Age: 22, First Name: Kenneth, Last Name: Reitz} - {Age: 21, First Name: Bessie, Last Name: Monke} >>> data.export('xlsx') <censored binary data> >>> data.export('df') First Name Last Name Age 0 Kenneth Reitz 22 1 Bessie Monke 21 2、Openpyxl Openpyxl 是一个用于读写 Excel 2010 xlsx / xlsm / x...
编辑部的故事 发布于 3天前 阅读 1135 点赞 2

JDBC【事务、元数据、改造JDBC工具类】

1.事务 事务指的就是:在一个SESSION中进行的操作要么全部成功,要么全部失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样【A账户的钱没变,B账户的钱也没变】。 事例说明: /* * 我们来模拟A向B账号转账的场景 * A和B账户都有1000块,现在我让A账户向B账号转500块钱 * * */ //JDBC默认的情况下是关闭事务的,下面我们看看关闭事务去操作转账操作有什么问题 //A账户减去500块 String sql = "UPDATE a SET money=money-500 "; preparedStatement = connection.prepareStatement(sql); preparedStatement.executeUpdate(); //B账户多了500块 String sql2 = "UPDATE b SET money=money+500"; preparedStatement = connection.prepareStatement(sql2); preparedStatement.executeUpdate(); 从上面看,我们的确可以发现A向B转账,成功了。可是**如果A向B转账的过程中出现了问题呢?**下面模拟一下 //A账户减去500块 String sql = "UPDATE a SET money=money-500 "; preparedSt...
Java3y 发布于 3天前 阅读 134 评论 2

大话循环神经网络(RNN)

—— 原文发布于本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),欢迎关注。     在上一篇文章中,介绍了 卷积神经网络(CNN)的算法原理,CNN在图像识别中有着强大、广泛的应用,但有一些场景用CNN却无法得到有效地解决,例如: 语音识别,要按顺序处理每一帧的声音信息,有些结果需要根据上下文进行识别; 自然语言处理,要依次读取各个单词,识别某段文字的语义 这些场景都有一个特点,就是都与时间序列有关,且输入的序列数据长度是不固定的。 而经典的人工神经网络、深度神经网络(DNN),甚至卷积神经网络(CNN),一是输入的数据维度相同,另外是各个输入之间是独立的,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立。   而在现实生活中,例如对一个演讲进行语音识别,那演讲者每讲一句话的时间几乎都不太相同,而识别演讲者的讲话内容还必须要按照讲话的顺序进行识别。 这就需要有一种能力更强的模型:该模型具有一定的记忆能力,能够按时序依次处理任意长度的信息。这个模型就是今天的主角“循环神经网络”(Recurrent Neural Networks,简称RNN)。 循环神经网络(RNN),神经元的输出可以在下一个时间戳直接作用到自身(作为输入)...
雪饼 发布于 1周前 阅读 127

矛盾的根源

       很多时候,我们感觉自己的思想跟自己的行为处于了一个矛盾状态,怎么都走不出来。其实这个大多数情况是因为中西方文化的差异导致的,我们身处中国,从小到大接受的很多却是西方文化,也就导致了矛盾的产生。下面来说一说中西方文化的差异。         西方是神本位,中国是人本位。西方信上帝,在他们的思想中,他们都是上帝的子民,所以西方提倡人人平等,而在中国则是以人为本。像佛教、基督教、伊斯兰教都是从其他国家传入中国的,中国不需要宗教,中国以人为本,我就是释迦牟尼,我就是基督,我就是默罕默德。人人平等一说在西方是真正的平等,但在中国讲究伦理道德,你会直接喊你爸的名字吗?但在国外可以。在中国其实奉行的是合理的平等。在中国,不可能有绝对的平等,老板就是老板,员工就是员工;长辈就是长辈,小辈就是小辈。有些话你敢跟你的员工说,但却不敢跟你的上司说。国外家长打孩子这叫侵犯人权,中国家长打孩子这叫教育。国外18岁之前家长照顾孩子,18岁以后自力更生;在中国可以吗?假如真有,这叫狠心的家长。西方认为人和动物是一样的,他们认为人也是动物;但中国认为认识最富有智慧的,认识最高贵的存在。这就是中西方文化差异之一,...
影狼 发布于 3小时前 阅读 4

c语言开发JSON

安装json-c 库 $ sudo apt-get install libjson0-dev libjson0 代码json_test.c #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include<json/json.h> int main(int argc, char **argv) { struct json_tokener *tok; struct json_object *my_string, *my_int, *my_object, *my_array; struct json_object *new_obj; int i; my_string = json_object_new_string("\t"); /*输出 my_string= */ printf("my_string=%s\n", json_object_get_string(my_string)); /*转换json格式字符串 输出my_string.to_string()="\t"*/ printf("my_string.to_string()=%s\n",json_object_to_json_string(my_string)); /*释放资源*/ json_object_put(my_string); my_string = json_object_new_string("\\"); printf("my_string=%s\n", json_object_get_string(my_string)); printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string)); json_object_put(my_string); my_string = json_object_new_string("foo"); printf("my_string=%s\n", json_object_get_string(my_string)); printf("my_string.to_stri...
wangxuwei 发布于 6小时前 阅读 3

Solr7.2.1新建core

先在管理中心添加一个core 这个时候会报错 千万不要慌 ,看下面的操作 [root@192 solr_home]# ls configsets contrib dist mycore1 mycore2 README.txt solr.xml zoo.cfg [root@192 solr_home]# ll mycore2/ 总用量 0 可以看到已经多了一个mycore2的文件夹,但是里面是空的。 复制配置文件到mycore2目录下 cp /root/solr-7.2.1/server/solr/configsets/_default/conf ./mycore2/ -rf [root@192 solr_home]# ll mycore2/ 总用量 0 drwxr-xr-x. 3 root root 143 2月 20 23:41 conf 修改conf里面的solrconfig.xml文件 vim mycore2/conf/solrconfig.xml ## 修改路径 <lib dir="/opt/solr_home/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="/opt/solr_home/dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="/opt/solr_home/contrib/clustering/lib/" regex=".*\.jar" /> <lib dir="/opt/solr_home/dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="/opt/solr_home/contrib/langid/lib/" regex=".*\.jar" /> <lib dir="/opt/solr_home/dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="/opt/solr_home/contrib/velocity/lib" r...
我可能是个傻子 发布于 6小时前 阅读 4

扩散谱成像的研究进展

磁共振扩散成像(diffusion magnetic resonance imaging, dMRI)是目前惟一一种能够无侵入性地检测白质微观组织结构完整性的技术。其中,基于高斯模型的扩散张量成像(diffusion tensor imaging, DTI)是最流行的dMRI技术,它已经被广泛应用到各种临床疾病的研究中[1-3]。然而,最近的研究发现大脑中很多组织的体素内存在多方向纤维束[4]。由于dMRI的空间分辨率一般是毫米级而水分子的扩散是微米(1毫米=1000微米)级的,单个体素内存在着成千上万种的扩散种类,水分子的平均扩散不一定符合高斯分布。因此,DTI受单高斯模型的限制无法揭示体素内多方向纤维束。扩散谱成像是一种不依赖于模型的多b值多方向的q空间成像[5],该方法利用概率密度函数描述扩散运动完整的空间分布,以优异的角分辨率精确辨别出局部复杂交错的纤维走行。随着扩散谱成像(diffusion spectrum imaging, DSI)的发展,大量的研究工作围绕着改善数据采集方式、减少扫描时间、提高角分辨率和普及临床应用等问题展开,使得这种方法成为扩散成像领域的一个研究热点。 1 扩散谱成像的基本原理 1.1 原理 在Stejskal-Tanner实验中,扩散信号随相位离散成e指数衰减: SΔ=S0<eiΦ>(1) S0表示未加扩散梯度时的M...
天蚕宝衣 发布于 6小时前 阅读 8

Java 9 新特性概述

Java 9 正式发布于 2017 年 9 月 21 日 。作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外,还有一些新的特性。 本文对 Java9 中包含的新特性做了概括性的介绍,可以帮助你快速了解 Java 9
IBM Cloud

docker学习记录

安装docker:     yum -y install docker   # 查看所有镜像 docker images # 正在运行容器 docker ps # 查看docker容器 docker ps -a # 启动tomcat:7镜像 docker run -p 8080(容器应用端口):8080(外部端口) tomcat:7 (名字) # 以后台守护进程的方式启动 docker run -d tomcat:7 # 停止一个容器 docker stop b840db1d182b # 进入一个容器 docker attach d48b21a7e439 # 进入正在运行容器并以命令行交互 docker exec -it e9410ee182bd /bin/sh # 以交互的方式运行 docker run -i -t -p 8081:8080 tomcat:7 /bin/bash
我要五个字 发布于 6小时前 阅读 7

SpringBoot笔记3——控制器知识点总结

想了想有必要把控制器的一些内容放在系列里一起写一下,虽然之前springMVC的博文中已经介绍了很多有关Controller的东西,但是现在既然希望大家全面使用springboot,所以把这部分内容也放在本系列中总结概括一下吧。
HappyBKs 发布于 7小时前 阅读 5

数据结构2 树与二叉树

1.树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系。 2. 树本身是递归的,即一棵树由若干颗子树构成,而子树又由更小的子树构成。 3. 二叉树的遍历过程实质上是按一定规则将之线性化的过程。按照先遍历左子树后遍历右子树的约定,根据访问根结点位置的不同,可得到二叉树的先序、中序、后序的遍历方法。   对于上面的二叉树,若采用先序遍历法,则按照根结点-左子树-右子树的顺序迭代遍历,先输出1,然后遍历其左子树,输出左子树的根结点2,最终的遍历顺序为12457836;同理中序遍历的结果为42785136、后序遍历的结果为48752631。 4. 为了方便经常需要将普通的树转换为二叉树,转换规则为将孩子结点转换为左子树结点,而将兄弟结点转换为右子树结点。  
zhixin9001 发布于 7小时前 阅读 3

从实际案例聊聊Java应用的GC优化【转载】

当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化。但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度。 即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法。本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容: 优化前准备: 简单回顾JVM相关知识、介绍GC优化的一些通用策略。 优化方法: 介绍调优的一般流程:明确优化目标→优化→跟踪优化结果。 优化案例: 简述笔者所在团队遇到的GC问题以及优化方案。 优化前的准备 一、GC优化需知 为了更好地理解本篇所介绍的内容,你需要了解如下内容。 GC相关基础知识,包括但不限于: a) GC工作原理。 b) 理解新生代、老年代、晋升等术语含义。 c) 可以看懂GC日志。 GC优化不能解决一切性能问题,它是最后的调优手段。 如果对第一点中提及的知识点不是很熟悉,可以先阅读小结-JVM基础回顾;如果已经很熟悉,可以跳过该节直接往下阅读。 JVM基础回顾 JVM内存结构 简单介绍一下JVM内存结构和常见的垃圾回收器。 当代主流虚拟机(Hotspot VM)的垃圾回收都采用“分代回收”的算法。...
wind2012 发布于 7小时前 阅读 6

JDBC常见面试题

以下我是归纳的JDBC知识点图:     图上的知识点都可以在我其他的文章内找到相应内容。 JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动。 建立数据库连接。 创建一个Statement。 执行SQL语句。 处理结果集。 关闭数据库连接 代码如下: Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { /* * 加载驱动有两种方式 * * 1:会导致驱动会注册两次,过度依赖于mysql的api,脱离的mysql的开发包,程序则无法编译 * 2:驱动只会加载一次,不需要依赖具体的驱动,灵活性高 * * 我们一般都是使用第二种方式 * */ //1. //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //2. Class.forName("com.mysql.jdbc.Driver"); //获取与数据库连接的对象-Connetcion connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "r...
Java3y 发布于 8小时前 阅读 5

node.js使用

- Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数. - 安装node.js,http://www.runoob.com/nodejs/nodejs-install-setup.html - 安装成功后,helloworld ``` var http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end('Hello World\n'); }).listen(8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/'); ``` cmd中输入以下命令: ``` node server.js Server running at http://127.0.0.1:8888/ ``` 接下来,打开浏览器访问 http://127.0.0.1:8888/ ,你会看到一个写着 "Hello World"的网页。 ...
bluecoffee 发布于 8小时前 阅读 4

python 使用you-get下载视频

项目地址 https://github.com/soimort/you-get   安装和使用都比较简单,不过由于网络原因,只能测试下载几个站点 使用方式大致一样,引入相应的模块,调用download方法即可,目前测试的站点中有几个无法下载。。。   引入需要下载的视频所在网站 from you_get.extractors import ( xiami, netease, youku, kugou, imgur, bilibili, youtube, ted, tudou )   调用下载方法 ,下载网易的视频和公开课 netease.download('http://v.163.com/paike/VD5M64DQA/VEA6AFIOQ.html') netease.download('http://open.163.com/movie/2017/2/8/K/MCBG6TO95_MCBO5F18K.html') 下载优酷视频 youtube.download( 'https://www.youtube.com/watch?v=2FmcHiLCwTU' )   B站视频貌似无法下载了,可能是360的影响,加强了安全吧。。。...
阿豪boy 发布于 8小时前 阅读 7

光盘安装ubuntu出现BusyBox不能继续安装的终极解决方法

ubuntu server出现busybox initramfs错误 把里面的quiet 修改为all_generic_ide回车就可正常安装 直接按一下f6就 再esc就可以修改了
超级大黑猫 发布于 8小时前 阅读 8

Spring加载resource时classpath*:与classpath:的区别

    Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件.classpath*:的出现是为了从多个jar文件中加载相同的文件.classpath:只能加载找到的第一个文件. 一、例子 比如 resource1.jar中的package 'com.test.rs' 有一个 'jarAppcontext.xml' 文件,内容如下: <bean name="ProcessorImplA" class="com.test.spring.di.ProcessorImplA" /> resource2.jar中的package 'com.test.rs' 也有一个 'jarAppcontext.xml' 文件,内容如下: <bean id="ProcessorImplB" class="com.test.spring.di.ProcessorImplB" /> 通过使用下面的代码则可以将两个jar包中的文件都加载进来 ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath*:com/test/rs/jarAppcontext.xml"); 而如果写成下面的代码,就只能找到其中的一个xml文件(顺序取决于jar包的加载顺序) ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:com/test/rs/jarAppcontext.xml");     classpath*:的使用是为了多个component(最终发布成不同的jar包)并行开发,各自的bean定义文件按照一定的规则:package+filename,而使用这些com...
HarleyZhuge 发布于 9小时前 阅读 5

【工具使用系列】关于 MATLAB 应用编程接口,你需要知道的事

# 如何使用MATLAB应用编程接口
AllenMoore 发布于 10小时前 阅读 5

技巧

连字符:- cd -:回到上一个工作目录,不是上层目录。 pwd: cd ~:用户的家目录中  
wsdsb 发布于 11小时前 阅读 3

顺序表实现的源码

#include #include #define MAXSIZE 10 //定义类型 typedef int DataType; //定义结构体 typedef struct { DataType list[MAXSIZE];//d定义DateType类型的数组 int size;//y用于记录数据的个数 } SeqList; void InitList(SeqList *l);//初始化 int length(SeqList l);//线性表的长度 int InsertList(SeqList *l,int i,DataType x);//在第i个元素前插入0<=isize=0; } int length(SeqList l){ return l.size; } int InsertList(SeqList * l,int i,DataType x){ //将i可以理解为将x插入i个元素前插入,也可以理解为将x插入list[i]中 if(i<0||i>MAXSIZE){ printf("输入的位置有误\n"); printf("插入失败\n"); return 0; } if(i==MAXSIZE){ printf("顺序表已满\n"); printf("插入失败\n"); return 0; } int j;//定义循环变量 for(j=l->size;j>i;j--) l->list[j]=l->list[j-1]; l->list[i]=x;//将要插入的元素插入 l->size++;//将书序表的长度加1 printf("插入成功\n"); return 1; } int DeleteList(SeqList *l,int i,DataType *x){ if(i<0||i>=MAXSIZE){ printf("删除位置有误\n"); printf("删除失败\n"); return 0; } if(l->size==0){ printf("表空,无法删除\n"); printf("删除...
南桥北木 发布于 11小时前 阅读 4

响应式微服务 in java 译 <十四> Circuit Breakers

响应式微服务 in java
woshixin 发布于 11小时前 阅读 3

java 遍历类路径

``` // public class ClassPathScanner { private static final String PROTOCOL_FILE = "file"; private static final String PROTOCOL_JAR = "jar"; private static final String PREFIX_FILE = "file:"; private static final String JAR_URL_SEPERATOR = "!/"; private static final String CLASS_FILE = ".class"; private final String packageName; private final ClassFilter filter; public ClassPathScanner(String packageName) { this(packageName, null); } public ClassPathScanner(String packageName, ClassFilter filter) { this.packageName = packageName; this.filter = filter; } public List> scan() { List> list = new ArrayList>(); Enumeration en = null; try { en = getClass().getClassLoader().getResources(dotToPath(packageName)); } catch (IOException e) { e.printStackTrace(); } while (en.hasMoreElements()) { URL url = en.nextElement(); if (PROTOCOL_FILE.equals(url.getProtocol())) { File root = new File(url.getFile()); findInDirectory(list, root, root, packageName); } else if (PROTOCOL_JAR.equals(url.getProtoc...
kindcao 发布于 13小时前 阅读 11

RedHat linux下cvs服务器的配置

RedHat linux下cvs服务器的配置
happyhuangjinjin 发布于 13小时前 阅读 3

今天发现家用电脑上装了个Apache,竟然还有如此厚颜无耻之徒

今天初五,打开电脑看任务管理器, 里面怎么会有httpd.exe进程???  打开一看位置 差点没有晕过去, 什么时候? 什么人? 什么情况? 索性看看htdocs吧, 就仨文件 那就看看呗,反正也看得懂. . 反正就是被劫持了, 也比较简单, 你访问 以下这些网站:    $name1 = "www.2345.com,2345.com,www.tao123.com,tao123.com";   $name2 = "www.xp519.com,xp519.com,www.xitongzhijia.net,xitongzhijia.net,www.386w.com,386w.com,www.xitong8.com,xitong8.com,www.hyghost.com,hyghost.com,moguxz.com,www.moguxz.com,www.xpxtzj.com,xpxtzj.com";   $name3 = "www.22mm.cc,www.mnsfz.com,www.4493.com,www.7160.com,www.youzi4.com,www.juemei.cc,www.mm131com,www.xiaojiuwo.com,www.tpdq.net,www.920mm.com,www.169pp.com,www.xgmm.cc,www.kmeitu.com,www.qq360x.com,www.123kmm.com,www.09218.com,www.mm3.cc,www.b4mm.com,www.tuku.com,www.xiaomm.cc,www.84420.com,www.gunianger.com,www.ii6i.com,www.mmkaixin.com,www.06324.com,www.6188.net,www.8mei.cc,www.mzitu.com,www.mmlin.com,www.mm588.com,www.meiniu.cc,www.t8a8.com,www.99521.com,www.kmeitu.com,www.909mm.co...
酷酷的就 发布于 14小时前 阅读 11 评论 4

Java 9 新特性概述

Java 9 正式发布于 2017 年 9 月 21 日 。作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外,还有一些新的特性。 本文对 Java9 中包含的新特性做了概括性的介绍,可以帮助你快速了解 Java 9
IBM Cloud

JDBC【数据库连接池、DbUtils框架、分页】

1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的。。。 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开、关闭连接造成系统性能低下 编写连接池 编写连接池需实现java.sql.DataSource接口 创建批量的Connection用LinkedList保存【既然是个池,当然用集合保存、、LinkedList底层是链表,对增删性能较好】 实现getConnetion(),让getConnection()每次调用,都是在LinkedList中取一个Connection返回给用户 调用Connection.close()方法,Connction返回给LinkedList private static LinkedList<Connection> list = new LinkedList<>(); //获取连接只需要一次就够了,所以用static代码块 static { //读取文件配置 InputStream inputStream = Demo1.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); try { properties.load(inputStream); String url = properties.getProperty("url"); String username = properties.getProperty("username"); St...
Java3y 发布于 1天前 阅读 523 评论 2 点赞 1

SpringBoot项目中使用AOP

## 1.概述 将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 具体的代码参照 [示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-aop](https://github.com/qihaiyan/springcamp/tree/master/spring-aop) Spring的AOP技术主要有4个核心概念: 1. Pointcut: 切点,用于定义哪个方法会被拦截,例如 ```execution(* cn.springcamp.springaop.service.*.*(..))``` 2. Advice: 拦截到方法后要执行的动作 3. Aspect: 切面,把Pointcut和Advice组合在一起形成一个切面 4. Join Point: 在执行时Pointcut的一个实例 5. Weaver: 实现AOP的框架,例如 AspectJ 或 Spring AOP ## 2. 切点定义 常用的Pointcut定义有 execution 和 [@annotation](https://my.oschina.net/annotation) 两种。execution 定义对方法无侵入,用于实现比较通用的切面。[@annotation](https://my.oschina.net/annotation) 可以作为注解加到特定的方法上,例如Spring的Transaction注解。 execution切点定义应该放在一个公共的类中,集中管理切点定义。 示例: ```java public class CommonJoinPointConfig { @Pointcut("ex...
QiHaiYan 发布于 2天前 阅读 643 评论 1

NEO从源码分析看网络通信

### **_0x00 前言_** NEO被称为中国版的Ethereum,支持C#和java开发,并且在社区的努力下已经把SDK拓展到了js,python等编程环境,所以进行NEO开发的话是没有太大语言障碍的。 比特币在解决拜占庭错误这个问题时除了引入了区块链这个重要的概念之外,还引入了工作量证明(PoW)这个机智的解决方案,通过数学意义上的难题来保证每个区块创建都需要付出计算量。然而实践已经证明,通过计算来提供工作量证明,实在是太浪费:全世界所有的完全节点都进行同样的计算,然而只有一个节点计算出的结果会被添加到区块链中,其余节点计算消耗的电力就都白白浪费了。尤其,工作量证明存在一个51%的可能攻击方案,就是说只要有人掌握了世界上超过50%的算力,那么他就可以对比特币这个系统进行攻击,重置区块链。中本聪先生发明这个算力工作量证明方法的时候大概没有料到会有人专门为了挖矿开发出ASIC矿机。 NEO在解决这些问题的时候提出了一个新的共享机制DBFT 全称为 Delegated Byzantine Fault Tolerant。NEO将节点分为两种,一种为普通节点,不参与共识,也就是不进行认证交易签名区块的过程。另一种是则是共识节点。顾名思义,就是可以参与共识的节点,这部分基础概念可以参考[官方...
暖冰 发布于 6天前 阅读 515 点赞 1

JSON入门看这一篇就够了

什么是JSON JSON:JavaScript Object Notation 【JavaScript 对象表示法】 JSON 是存储和交换文本信息的语法。类似 XML。 JSON采用完全独立于任何程序语言的文本格式,使JSON成为理想的数据交换语言S 为什么需要JSON 提到JSON,我们就应该和XML来进行对比。XML也是一种存储和交换文本信息的手段。那么JSON好在哪里呢?? JSON 比 XML 更小、更快,更易解析。 javaScript原生支持JSON,解析速度会很快 XML解析成DOM对象的时候,浏览器【IE和fireFox】会有差异 使用JSON会更简单     更加容易创建JavaScript对象 var p = {'city':['北京','上海','广州','深圳']}; for(var i=0;i<p.city.length;i++){ document.write(p.city[i]+"<br/>"); } JSON语法 客户端与服务端的交互数据无非就是两种 数组 对象 于是乎,JSON所表示的数据要么就是对象,要么就是数组 JSON语法是javaScript语法的子集,javaScript用[]中括号来表示数组,用{}大括号来表示对象,JSON亦是如此 JSON数组: var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ]; JSON对象 ...
Java3y 发布于 1周前 阅读 1267 评论 13 点赞 1

你的斗地主能拿多少炸?

最近无聊,想知道一下玩斗地主的话我能有多大的概率拿到炸弹(4张同点数牌 或 集齐大小王)。但是我概率学学得不好,于是想到用统计学来试试,随手写了一个程序模拟一下斗地主的发牌过程 #### 面向对象Card 首先依据OOP思想,我把牌看作是一个对象,点数与花色是其属性,为了处理大小王加入了Type属性 ```java public class Card { Suit suit; Size size; Type type; Card(Suit suit, Size size) { this.suit = suit; this.size = size; this.type = Type.Ordinary; } Card(Type type) { if (type.equals(Type.Ordinary)) { throw new RuntimeException("非法参数"); } this.type = type; } } ``` 三个属性我都用了枚举类来表示,纯粹是因为既然是面向对象,那么就纯粹一点 ```java public enum Size { P3(0), P4(1), P5(2), P6(3), P7(4), P8(5), P9(6), P10(7), J(8), Q(9), K(10), A(11), P2(12); int sequence; Size(int sequence) { this.sequence = sequence; } } ``` Size表示点数的大小,按从小到大排序。加入sequence属性目的是为了在统计时方便处理 ```java public enum Suit { Spade(4), Heart(3), Club(2), Diamond(1); // 权重 int weight; Suit(int weight)...
BekeyChao 发布于 1周前 阅读 727 评论 10 点赞 1

Machine Learning:十大机器学习算法

- 机器学习算法分类:监督学习、无监督学习、强化学习 - 基本的机器学习算法:线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强
RiboseYim 发布于 1周前 阅读 1812 评论 9 点赞 5

你需要Mobx还是Redux?

在过去一年,越来越多的项目继续或者开始使用React和Redux开发,这是目前前端业内很普遍的一种前端项目解决方案,但是随着开发项目越来越多,越来越多样化时,个人又有了不同的感受和想法。是不是因为已经有了一个比较普遍的,熟悉的项目技术栈,我们就一直完全沿用呢,有没有比他更适合的方案呢?恰逢团队最近有一个新项目,于是博主开始思考,有没有可能使用其他可替代技术开发呢?既能提高开发效率,又能拓展技术储备和眼界,经过调研,选择了Mobx,最终使用React+Mobx搭建了新项目,本篇总结分享从技术选型到项目实现的较完整过程,希望共同进步。
熊建刚 发布于 1周前 阅读 737 评论 4 点赞 1

大数据平台Hadoop的分布式集群环境搭建

1 概述 本文章介绍大数据平台Hadoop的分布式环境搭建、以下为Hadoop节点的部署图,将NameNode部署在master1,SecondaryNameNode部署在master2,slave1、slave2、slave3中分别部署一个DataNode节点 NN=NameNode(名称节点) SND=SecondaryNameNode(NameNode的辅助节点) DN=DataNode(数据节点) 2 前期准备 (1)准备五台服务器 如:master1、master2、slave1、slave2、slave3 (2)关闭所有服务器的防火墙 $ systemctl stop firewalld $ systemctl disable firewalld (3)分别修改各服务器的/etc/hosts文件,内容如下: 192.168.56.132 master1 192.168.56.133 master2 192.168.56.134 slave1 192.168.56.135 slave2 192.168.56.136 slave3 注:对应修改个服务器的/etc/hostname文件,分别为 master1、master2、slave1、slave2、slave3 (4)分别在各台服务器创建一个普通用户与组 $ groupadd hadoop #增加新用户组 $ useradd hadoop -m -g hadoop #增加新用户 $ passwd hadoop #修改hadoop用户的密码 切换至hadoop用户:su hadoop (5)各服务器间的免密码登录配置,分别在各自服务中执行一次 $ ssh-keygen -t rsa #一直按回车,会生成公私钥 $ ssh-copy-id hadoop@m...
FEINIK 发布于 2周前 阅读 1452 评论 5 点赞 6

Java可以如何实现文件变动的监听

应用中使用logback作为日志输出组件的话,大部分会去配置 `logback.xml` 这个文件,而且生产环境下,直接去修改logback.xml文件中的日志级别,不用重启应用就可以生效 那么,这个功能是怎么实现的呢?
小灰灰Blog 发布于 2周前 阅读 1682 评论 12 点赞 3

高并发&高可用系统应对策略的一些思考

**说明:** - 仅仅是自己的一些观点和思考,如有问题欢迎指正 - 文中【】内提到的spring boot starter是自己封装的,地址:https://gitee.com/itopener/springboot #### **解耦神器:MQ** MQ是分布式架构中的解耦神器,应用非常普遍。有些分布式事务也是利用MQ来做的。由于其高吞吐量,在一些业务比较复杂的情况,可以先做基本的数据验证,然后将数据放入MQ,由消费者异步去处理后续的复杂业务逻辑,这样可以大大提高请求响应速度,提升用户体验。如果消费者业务处理比较复杂,也可以独立集群部署,根据实际处理能力需求部署多个节点。需要注意的是: - 需要确认消息发送MQ成功 比如RabbitMQ在发送消息到MQ时,就有发送回调确认,虽然不能够完全避免消息丢失,但也能够避免一些极端情况下消息发送失败的情况了。可以利用MQ的事务来避免更多情况的消息丢失 - 消息持久化 需要注意配置消息持久化,避免MQ集群挂掉的情况下大量丢失消息的情况 - 消息消费的幂等性 正常来说消息是不会重复发送的,但是一些特殊情况也可能会导致消息重复发送给消费者,一般会在消息中加一个全局唯一的流水号,通过流水号来判断消息是否已经消费过 - 注意用户体验 使用异步处理是在提高系统吞吐量...
J猿 发布于 2周前 阅读 3670 评论 24 点赞 20

JSP自定义标签就是如此简单

为什么要用到简单标签? 上一篇博客中我已经讲解了传统标签,想要开发自定义标签,大多数情况下都要重写doStartTag(),doAfterBody()和doEndTag()方法,并且还要知道SKIP_BODY,EVAL_BODY等等的变量代表着什么,在什么方法中使用。这样实在是太麻烦了! 因此,为了简化标签开发的复杂度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。。 一般来说,实现了SimpeTag接口的标签称之为简单标签 SimpleTag接口 首先我们来看一下它的源码吧: public interface SimpleTag extends JspTag { void doTag() throws JspException, IOException; void setParent(JspTag var1); JspTag getParent(); void setJspContext(JspContext var1); void setJspBody(JspFragment var1); } setParent()和getParent()方法就不多说了,我们来看一下剩下的3个方法: void doTag() throws JspException, IOException; void setJspContext(JspContext var1); void setJspBody(JspFragment var1); 明显地: doTag()就是我们要写代码处理逻辑地方 setJspContext(JspContext var1)是将PageContext对象传递给标...
Java3y 发布于 2周前 阅读 1881 评论 14 点赞 3

如何编写高性能的 RPC 框架

在 [RPC Benchmark Round 1](https://my.oschina.net/u/1014759/blog/1616349) 中,[Turbo](https://github.com/hank-whu/turbo-rpc) 性能炸裂表现强悍,并且在 listUser 这一项目中,取得了 10x dubbo 性能的好成绩。本文将介绍 [Turbo](https://github.com/hank-whu/turbo-rpc) 强悍性能背后的原理,并探讨如何编写高性能的 RPC 框架。 ## 过早的优化是万恶之源? 这句话是 *The Art of Computer Programming* 作者,图领奖得主 Donald Knuth 大神说的。不过对于框架设计者而言,这句话并不正确。在设计一款高性能的基础框架时,必须始终重视性能优化,并将性能测试贯穿于整个设计开发过程中。这方面做到极致的类库有 [Disruptor](https://github.com/LMAX-Exchange/disruptor) [JCTools](https://github.com/JCTools/JCTools) [Agrona](https://github.com/real-logic/agrona) [DSL-JSON](https://github.com/ngs-doo/dsl-json) 等等,这几个高性能类库都坚持一个原则:不了解性能的外部类库坚决不用,如果现有的类库不能满足性能要求,那就重新设计一个。作为 [Turbo](https://github.com/hank-whu/turbo-rpc) 的设计者,我也尽量坚持这一原则,努力做到 Benchmark 驱动...
鲁小憨 发布于 2周前 阅读 4163 评论 51 点赞 17

腾讯技术分享:社交网络图片的带宽压缩技术演进之路

为了进一步降低运营带宽成本,减小用户访问流量及提升页面加载速度,社交网络 CDN运维紧跟行业图片优化趋势,创新引入WebP、SharpP、自适应分辨率、Guetzli等图像压缩技术到现网,经过三年多的多部门联合攻关,已逐渐形成一套覆盖全图片类型(JPEG、JPG、PNG、WebP、GIF)多场景的图片压缩运营体系,适用于各类型终端,每年节约外网带宽几百G。
JackJiang- 发布于 2周前 阅读 3776 评论 7 点赞 3

RabbitMQ 实战(二)Spring Boot 整合 RabbitMQ

这篇文章主要讲基本的整合。先把代码跑起来,再说什么高级特性。 ## RabbitMQ 中的一些术语 如果你打开 RabbitMQ web 控制台,你会发现其中有一个 Exhanges 不好理解。下面简单说明一下。 ![](http://img.nextyu.com/2018-02-04-15177510378323.jpg) ### 交换器(Exchange) 交换器就像路由器,我们先是把消息发到交换器,然后交换器再根据路由键(routingKey)把消息投递到对应的队列。(明白这个概念很重要,后面的代码里面充分体现了这一点) ### 队列(Queue) 队列很好理解,就不用解释了。 ### 绑定(Binding) 交换器怎么知道把这条消息投递到哪个队列呢?这就需要用到绑定了。大概就是:使用某个路由键(routingKey)把某个队列(Queue)绑定到某个交换器(Exchange),这样交换器就知道根据路由键把这条消息投递到哪个队列了。(后面的代码里面充分体现了这一点) ## 加入 RabbitMQ maven 依赖 ``` org.springframework.boot spring-boot-starter-amqp ``` 再加入另外一个依赖(这个依赖可省略,主要是用来简化代码) ``` cn.hutool hutool-all 4.0.2 ``` ## RabbitMQConfig.java 配置 ``` @Configuration public class RabbitMQConfig { public final static Str...
皂白 发布于 2周前 阅读 3568 评论 11 点赞 9

怎样对 RPC 进行有效的性能测试

在 RPC Benchmark Round 1 中 turbo 的成绩一骑绝尘,实力碾压众 rpc 框架。对此,很多人表示不服气,认为作者既是运动员又是裁判员有失公平。所以我认为有必要解释一下 rpc-benchmark 的公正性,以及为什么 turbo 能够如此强悍。 参考对象 rpc-benchmark 灵感源自 techempower-benchmarks,为了能够评测众多服务器框架,techempower-benchmarks 提供了6个测试用例: JSON serialization This test exercises the framework fundamentals including keep-alive support, request routing, request header parsing, object instantiation, JSON serialization, response header generation, and request count throughput. Single database query This test exercises the framework's object-relational mapper (ORM), random number generator, database driver, and database connection pool. Multiple database queries This test is a variation of Test #2 and also uses the World table. Multiple rows are fetched to more dramatically punish the database driver and connection pool. At the highest queries-per-request tested (20), this test...
鲁小憨 发布于 3周前 阅读 2003 评论 22 点赞 4

利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)

![iPhone 5S](http://upload-images.jianshu.io/upload_images/9824247-b8c9f19a9e567080.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) --- 最近被业务折腾的死去活来,实在没时间发帖,花了好多个晚上才写好这篇帖子,后续会加油的! --- 【利用K8S技术栈打造个人私有云系列文章目录】 - [利用K8S技术栈打造个人私有云(连载之:初章) ](https://www.jianshu.com/p/9bc87b5380e8) - [利用K8S技术栈打造个人私有云(连载之:K8S集群搭建)](https://www.jianshu.com/p/7d1fb03b8925) - [利用K8S技术栈打造个人私有云(连载之:K8S环境理解和练手)](https://www.jianshu.com/p/5b0cd99e0332) - 利用K8S技术栈打造个人私有云(连载之:基础镜像制作与实验)(Coming Soon...) - 利用K8S技术栈打造个人私有云(连载之:资源控制研究)(Coming Soon...) - 利用K8S技术栈打造个人私有云(连载之:私有云客户端打造)(Coming Soon...) - 利用K8S技术栈打造个人私有云(连载之:总结与升华)(Coming Soon...) ----- ## 环境介绍 > 玩集群嘛,当然要搞几台机器做节点!无赖自己并没有性能很强劲的多余机器,在家里翻箱倒柜,找出了几台破旧的本子,试试看吧,...
hansonwang 发布于 3周前 阅读 4264 评论 30 点赞 8

RPC Benchmark,Dubbo垫底

rpc-benchmark 说明及答疑 几乎所有的 RPC 框架都宣称自己是“高性能”的, 那么实际结果到底如何呢, 让我们来做一个性能测试吧. 项目地址:   https://github.com/hank-whu/rpc-benchmark   https://gitee.com/hank-whu/rpc-benchmark 测试说明 仅限于Java. 客户端使用JMH进行压测, 32 线程, 10 次预热, 3 次运行. 每次运行前都会执行 killall java, 但没有在每轮测试时重启操作系统. 所有类库版本在发布时都是最新的, 除非存在bug. 所有框架都尽量参考该项目自带的Benchmark实现. 将会一直持续, 不定期发布测试结果. 测试用例 boolean existUser(String email), 判断某个 email 是否存在. boolean createUser(User user), 添加一个 User. User getUser(long id), 根据 id 获取一个用户. Page<User> listUser(int pageNo), 获取用户列表. 运行结果 生成时间: 2018-01-28 14:36:24. 硬件环境: 阿里云 ecs.c4.xlarge, Intel Xeon E5-2667v4, 4CPU 8GB RAM 两台. 软件环境: Ubuntu x64 16.04.5, Java HotSpot(TM) 64-Bit Server VM 9.0.4+11. 启动参数: java -server -Xmx1g -Xms1g -XX:MaxDirectMemorySize=1g -XX:+UseG1GC. existUser 判断某个 email 是否存在 framewor...
鲁小憨 发布于 3周前 阅读 5284 评论 78 点赞 5

大型高并发与高可用的三层缓存架构总结

对于高并发架构,毫无疑问缓存是最重要的一环,对于大量的高并发,可以采用三层缓存架构来实现,nginx+redis+ehcache
高级架构师 发布于 3周前 阅读 4516 评论 4 点赞 4

mybatis-plus思维导图,让mybatis-plus不再难懂

Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
java思维导图 发布于 3周前 阅读 2047 评论 8 点赞 1

Spring Boot中使用LDAP来统一管理用户信息

> 很多时候,我们在构建系统的时候都会自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时用户信息的同步就会变的比较麻烦,对于用户自身来说也会非常困扰,很容易出现不同系统密码不一致啊等情况出现。如果此时我们引入LDAP来集中存储用户的基本信息并提供统一的读写接口和校验机制,那么这样的问题就比较容易解决了。下面就来说说当我们使用Spring Boot开发的时候,如何来访问LDAP服务端。 ## LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。 LDAP目录中的信息是是按...
程序猿DD 发布于 3周前 阅读 2936 评论 3 点赞 2
顶部