开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

使用Remix编译和部署以太坊智能合约

![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113835_7UHh.png "以太坊remix汇智网") Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。 本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。 详细描述使用 Remix 的步骤及使用上可能碰到的问题。 之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。 ### 开发环境 不需要安裝,直接在任何浏览器启动 Remix。 ![以太坊remix汇智网](https://static.oschina.net/uploads/img/201804/20113913_wFJy.png "以太坊remix汇智网") ### 取得代币合约 代币合约的范例很多,Ethereum 官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN): ``` pragma solidity ^0.4.0; contract MyToken { /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* Initializes contract with initial supply ...
笔阁 发布于 14小时前 阅读 108

Google TensorFlow培训课程免费登陆GAITC2018

最受欢迎的机器学习软件库,TensorFlow培训课程,即将免费登陆2018GAITC~!
OSC_Lucy 发布于 14小时前 阅读 92

Spring Cloud Feign 熔断配置的一些小坑

1.在使用feign做服务调用时,使用继承的方式调用服务,加入Hystrix的熔断处理fallback配置时,会报错,已解决。 2.使用feign默认配置,熔断不生效,已解决。
FutureElement 发布于 14小时前 阅读 179

Vue-cli(四) 项目中引入Axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请求和响应数据 取消请求 自动转换JSON数据 客户端支持防止 CSRF/XSRF 安装Axios 我们直接使用npm install来进行安装。 npm install axios --save 由于axios是需要打包到生产环境中的,所以我们使用--save来进行安装。 也可以选择使用cnpm来安装,加快安装速度。 引入Axios 只需要在需要的vue文件中引入axios就可以。 import axios from 'axios' 使用 发送一个GET请求 //通过给定的ID来发送请求 axios.get('/user?ID=12345') .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); }); //以上请求也可以通过这种方式来发送 axios.get('/user',{ params:{ ID:12345 } }) .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); }); 发送一个POST请求 axios.post('/user',{ firstName:'Fred', lastName:'Flintstone' }) .then(function(res){ console.log(res); }) .catch(funct...
阿刚ABC 发布于 1天前 阅读 159

RecyclerView的简单使用

自从Android 5.0之后,googlet推出了一个RecyclerView控件,他是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,RecyclerView相当于是ListView的升级版。 RecyclerView封装了ViewHolder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不是View了,复用的逻辑被封装了,写起来更加简单。 RecyclerView提供一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取了相应的类,来控制Item的显示,使其的扩展性特别强。 #### 引入RecyclerVIew ``` bash compile 'com.android.support:recyclerview-v7:25.1.0' ``` #### 创建布局文件 ##### 主布局文件 ``` xml /*activity_main.xml*/ ``` ##### Item布局文件 ``` xml /*item.xml*/ ``` #### 创建Adapter RecyclerView的Adapter要比ListView的Adapter设置起来稍微复杂一点,这也是RecyclerView高度解耦的体现,虽然代码复杂一点,但扩展性很好,下面介绍一下实现RecyclerView的Adapter的三个方法: ##### onCreateViewHolder() 该方法主要是为每个Item加载一个View,但是该方法返回的是一个ViewHolder,该...
jzman 发布于 1天前 阅读 46

VisualVM 通过JMX、Jstatd 对tomcat 监控

常用的监控jvm的东西叫JMX(Java Management Extensions,即Java管理扩展)。(后面也有了解到一个叫zabbix的系统,也可以通过JMX实现对jvm监控,这个系统功能比较多,还能做到微信公众号异常通知,读者可以自行去了解,这里不多描述)。在搭建这个JMX环境的时候遇到了一些问题,在这里总结一下,希望有兴趣搭建的同学避免一些不必要的坑。
守望_半吊子 发布于 1天前 阅读 92

微服务架构项目实战:Spring Boot 如何创建简单的 REST 服务

你将学习 什么是 REST 服务? 如何使用 Spring Initializr 引导创建 Rest 服务应用程序? 如何创建获取 REST 服务以检索学生注册的课程? 如何为学生注册课程创建 Post REST 服务? 如何利用 postman 执行 rest 服务? 本教程使用的 rest 服务 在本教程中,我们将使用适当的 URI 和 HTTP 方法创建三个服务: @GetMapping(“/ students / {studentId} / courses”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses 来查询特定学生已注册的课程。 @GetMapping(“/students/{studentId}/courses/{courseId}”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses / Course1 获取特定学生的特定课程。 @PostMapping(“/students/{studentId}/courses”) :您可以通过向 UURI /students/Student1/courses 发送 POST 请求来为学生注册一门课程 您将需要的工具 Maven 3.0+ 是您的构建工具 你最喜欢的 IDE。我们使用 Eclipse。 JDK 1.8+ 完整的 spring booot rest Maven 项目代码示例子 我们的 Github 存储库包含所有代码示例 - https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files 带有单元和集成测试的 ...
烂猪皮 发布于 1天前 阅读 250 评论 2

优化 | Redis AOF重写导致的内存问题

Redis突然内存爆涨,直到服务器内存不足半夜报警,是天灾还是人祸?
o翡翠谷o 发布于 1天前 阅读 140 评论 1

阿里架构师详解虚拟机工作原理

一、类加载器 首先来看一下java程序的执行过程。 从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入 [java] view plain copy javac YourClassName.java 此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码的时候,开发工具已经帮你完成了上述的编译工作,因此你可以在对应的目录下看到class文件。此时的class文件依然是保存在硬盘中,因此,当你在命令行中运行 [java] view plain copy java YourClassName 就完成了上面红色方框中的工作。JRE的来加载器从硬盘中读取class文件,载入到系统分配给JVM的内存区域--运行数据区(Runtime Data Areas). 然后执行引擎解释或者编译类文件,转化成特定CPU的机器码,CPU执行机器码,至此完成整个过程。 接下来就重点研究一下类加载器究竟为何物?又是如何工作的? 首先看一下来加载器的一些特点,有点抽象,不过总有帮助的。 》》层级结构 类加载器被组织成一种层级结构关系,也就是父子关系。其中,Bootstrap是所有类加载器的父亲。如下图所示: --Bootstrap class loader: 当运行java虚拟机时,这个类加载器被创建,它加...
权律二啊- 发布于 1天前 阅读 704 评论 8 点赞 1

java基础(一) 深入解析基本类型

### 一、基本类型的简介 **基本类型的两条准则:** - Java中,如果对整数不指定类型,默认时int类型,对小数不指定类型,默认是double类型。 - 基本类型由小到大,可以自动转换,但是由大到小,则需要强制类型转换。 **所占的字节数:** byte: 1个字节; char: 2个字节; short: 2个字节; int: 4个字节; long: 8个字节; float: 4个字节;(6位小数,指数是:10^-38~10^38; 范围:) double: 8个字节; char:Java中用 "\u四位十六进制的数字 (即使在注释中出现\u,后面如果 跟的不是4个16进制的数字,也会报错)"表示将字符转换成对应的unicode编 码;也可以用字符来赋值如: char c="\u0000" ,char的默认初始化值,unicode的null字符 **基本类型的后缀:** long : l 或 L float: f 或 F; double: d 或 D ### 二、类型转换   正如前面所说的,类型由大到小,是必需强制转换。但这并不意味着需要用户手动强制转换 —— 也就是 隐式转换。隐式转换 说的透彻点就是由编译器来进行强制转换,不需要用户再去写强制转换的代码。下面的前两个小点所说的便是特殊的隐式类型转换。 本小节所讨论的类型转换是不包括 类型由小到大的转换,讨论的是其他比较容易让人迷惑...
sihailoveyan 发布于 1天前 阅读 366

手把手教你打造一个可视化接口自动化测试系统

现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都可以称之为接口,面临着如此庞大的接口数据,如果更好的管理和测试他们都是一个比较头疼的问题,更主要的是很多业务场景是需要多个接口进行联调的,因此在接口开发完成后,一轮自动化测试能快速反馈出当前系统的状况,面对这样的需求,一个对测试人员友好的可视化接口自动化测试系统就显得必不可少了。那么,我们今天就来和大家聊聊如何实现一个小型的http接口自动化测试系统! 我们拿DOClever 做为这套系统的范本进行阐述,因为它是开源的,源码随时可以从GitHub和OSChina上获取,同时,这套系统内置了完整的自动化测试框架,从无需一行代码的UI测试用例编写,到更强大更灵活的代码模式,都提供了很友好的支持。 系统需求: 1.   能在一个测试用例里可以对一个接口自由编辑其入参,运行并判断出参是否正确,同时可以查看该接口完整的输入输出数据 2.   能在一个测试用例里可以对一组接口进行测试,自由调整他们的执行顺序,并根据上一接口的出参作为下一接口的入参条件。 3.  ...
ansun123 发布于 2天前 阅读 1952 点赞 7

基于Docker的MySQL主从数据库搭建

最初的想法是为了做数据备份,但实际作用远不止于此,菜鸟一枚,仅作为记录。
Raphael_Zhang 发布于 2天前 阅读 342

老旧Java Web应用实现增量自动化部署的一个方案

本文介绍的方案主要针对老旧Java Web应用的增量部署,全量部署实现起来更简单。 其他关键词:PaaS、Git、自动化部署、持续集成、jgit比较两个分支的差异
joock 发布于 2天前 阅读 272

Python标准库笔记(8) — pprint模块

> `struct`模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串。   该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换。 这可以用于处理存储在文件中或从网络连接中存储的二进制数据,以及其他数据源。 ### 1. 模块函数和Struct类   它除了提供一个`Struct`类之外,还有许多模块级的函数用于处理结构化的值。这里有个格式符(Format specifiers)的概念,是指从字符串格式转换为已编译的表示形式,类似于正则表达式的处理方式。通常实例化`Struct`类,调用类方法来完成转换,比直接调用模块函数有效的多。下面的例子都是使用`Struct`类。 ### 2. Packing(打包)和Unpacking(解包)   `Struct`支持将数据packing(打包)成字符串,并能从字符串中逆向unpacking(解压)出数据。   在本例中,格式指定器(specifier)需要一个整型或长整型,一个两个字节的string,和一个浮点数。格式符中的空格用于分隔各个指示器(indicators),在编译格式时会被忽略。 ```python import struct import binascii values = (1, 'ab'.encode('utf-8'), 2.7) s = struct.Struct('I 2s f') packed_data = s.pack(*values) print('原始值:', val...
j_hao104 发布于 2天前 阅读 192

高阶爬虫实战:破解极验滑动验证码

今天给大家带来的是极验验证码的selenium破解之法,是不是有点小激动呢,小伙伴们等不及了,让我们赶紧直入主题吧。 虎X网注册 这次我们是拿虎X开刀,注册账号的时候需要滑动图片到缺口位置,这种验证码我们现在也经常遇到,这个就不用详细介绍了吧 针对这种验证码我们首先确定了使用selenium模拟滑动破解方式,selenium鼠标移动点击拖动都比较简单,那么问题就在于拖动多少距离,眼睛看起来很直观,但是程序怎么获取呢?利用图像识别……,额,这个只能想想了吧。不如看看网页源码或者请求信息,看看有没有有效的信息。 查看网页信息 鼠标右键点击到图片上,查看元素 这一瞬间的图片,还好我二十几年的麒麟臂没白练,我们看看元素查看到的都是什么东西 这看起来有点奇怪哦,有个图片链接,还有位置信息,而且还那么多,先把图片链接拷贝到浏览器里访问下看看 WTF,这是什么鬼?注意到那个像猪尾巴一样的6了吗?还有那个小箭头,跟上面完整图片对比一下,发现把箭头挪动到小6旁边,猪尾巴就成功了。当然你仔细观察的话,还有其他的比如文字也是类似。那么我们可以确认这张图片应该是被打乱的,如果我们可以把它拼起来,是不是就离计算缺口位置比较近了。现在我们应该要注意...
千龍 发布于 2天前 阅读 638 评论 12

Sass指南:Sass前世今生和如何安装以及使用Webstorm直接支持编写

Sass简易指南   什么是Css预处理器?   CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。   通俗的说,“CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题”,例如你可以在 CSS 中使用变量、简单的逻辑程序、函数(如右侧代码编辑器中就使用了变量$color)等等在编程语言中的一些基本特性,可以让你的 CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。   CSS 预处理器语言: - Sass(SCSS) - LESS - Stylus - Turbine - Swithch CSS - CSS Cacheer - DT CSS   什么是 Sass?   l  官方定义 Sass 是一门高于 CSS 的元语言,它能用来清晰地、结构化地描述文件样式,有着比普通 CSS 更加强大的功能。 Sass 能够提供更简洁、更优雅的语法,同时提供多种功能来创建可维护和管理的样式表。   l  Sass 前世今生 Sass 是最早的 CSS 预处理语言,有比 LESS 更为强大的功能,不过其一开始的缩进式...
GeCoder 发布于 2天前 阅读 110

ActiveMQ关于WSS的配置(SSL)

ActiveMQ配置wss的一项记录,查阅了大把资料发现没能解决问题,耗费了我一天时间,后来自行思考后发现,原来确实是这样;在此分享出来还是希望需要的同学少走弯路
葛传艺 发布于 2天前 阅读 95

你离BAT之间,只差这一套Java面试题

最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目。这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题。关于中高级的程序员问题,我后面可能再出一篇文章。 对于一个初中级程序员来说,面试问题不仅仅涉及到Java语言,还会包括很多其他知识,比如计算机基础知识(数据结构、计算机网络、操作系统等)、C语言基础、Java底层知识以及一些框架相关知识等。本文几乎覆盖到了所有领域。 计算机基础知识 C语言基础 Java基础 Java高级 Java Web 设计模式 知识的综合能力 工具使用 项目相关 技术热情 表达能力 思考方式 其他 推荐阅读 还有,我知道很多人会问关于这些题目的答案问题。答案我都有,由于篇幅有限没办法直接贴上来。这些题目的答案我会在我的公众号及知识星球中给出,感谢关注。 为了方便,我把他们分了类,有一些是必看的,我用!标注,有一些进阶型的我用%标注,有一些需要了解的,我用?标注。 必会关键字 void byte int long char short float double String StringBuffer StringBuilder Array CollectionCollections List ArrayList LinkedList Vector Set HashMap TreeMap L...
Java工程师-Distance 发布于 2天前 阅读 526 点赞 2

Python中的迭代器、生成式、生成器及装饰器

1.迭代器 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 生成一个迭代器:   >>> a = iter([1,2,3,4,5]) >>> a <list_iterator object at 0x101402630> >>> a.__next__() 1 >>> a.__next__() 2 >>> a.__next__() 3 >>> a.__next__() 4 >>> a.__next__() 5 >>> a.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration   2.生成式和生成器 列表生成式格式: [exp for val in collection if condition] [x*x for x in xrange(10) if x*x%2 == 0] 生成...
枫叶云 发布于 2天前 阅读 164 点赞 1

CNN进化史

卷积神经网络(CNN)近年来取得了长足的发展,是深度学习中的一颗耀眼明珠。CNN不仅能用来对图像进行分类,还在图像分割(目标检测)任务中有着广泛的应用。CNN已经成为了图像分类的黄金标准,一直在不断的发展和改进。 刘昕博士总结了CNN的演化历史,如下图所示:   CNN的起点是神经认知机模型,此时已经出现了卷积结构,经典的LeNet诞生于1998年。然而之后CNN的锋芒开始被SVM等模型盖过。随着ReLU、dropout的提出,以及GPU和大数据带来的历史机遇,CNN在2012年迎来了历史突破:AlexNet。随后几年,CNN呈现爆发式发展,各种CNN模型涌现出来。   CNN的主要演进方向如下: 1、网络结构加深 2、加强卷积功能 3、从分类到检测 4、新增功能模块 下图是CNN几个经典模型(AlexNet、VGG、NIN、GoogLeNet、ResNet)的对比图,可见网络层次越来越深、结构越来越复杂,当然模型效果也是越来越好:   本博客通过一系列的“大话深度学习”文章,全面详细地介绍了CNN进化史各个阶段的里程碑成果。 1、小白讲卷积:大话卷积神经网络(CNN)   2、卷积初尝试:大话CNN经典模型 LeNet   3、历史の突破:大话CNN经典模型 AlexNet   4、网络再加深:大话CNN经典模型VGGNet   5、增强卷...
雪饼 发布于 2天前 阅读 154

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

Spring Boot 使用 Redis 提升天气预报应用的并发访问能力

有时,为了提升整个网站的性能,我们会将经常需要访问数据缓存起来,这样,在下次查询的时候,能快速的找到这些数据。 缓存的使用与系统的时效性有着非常大的关系。当我们的系统时效性要求不高时,则选择使用缓存是极好的。当系统要求的时效性比较高时,则并不适合用缓存。 本文,我们将演示如何通过集成 Redis 服务器来进行数据的缓存,以提高微服务的并发访问能力。
waylau 发布于 2个月前 阅读 776 评论 8 点赞 1

jsp中利用fmt标签去除多余的0和在jsp页面中实现格式化数字,百分比,货币

fmt去除多余的0: <fmt:formatNumber value="" pattern=""></fmt:formatNumber> 效果图: JSP代码: <html xmlns="http://www.w3.org/1999/xhtml"> <th>止点里程</th> <td colspan="2"> <span><s:property value="object.endPileNo"/></span><br/> <fmt:formatNumber type="percent" value="${object.endPileNo}" maxFractionDigits="2" /><br/> <fmt:formatNumber value="${object.endPileNo}" pattern=""></fmt:formatNumber> </td> jsp页面中实现格式化数字,百分比,货币 实现方法 1.引入Jstl的fmt指令 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 2.具体实现:type表示百分比,value要格式化的数字,maxIntegerDigits保留小数点后几位 <fmt:formatNumber type="percent" value="${item.vote / item.sid.totalVotes }" maxFractionDigits="3" /> 奉上<fmt:formatNumber>标签详细 属性 属性 描述 是否必要 默认值 value 要显示的数字 是 无 type NUMBER,CURRENCY,或 PERCENT类型 否 Number pattern 指定一个自定义的格式化模式用与输出 否 无 currencyCode 货币码(当type="currency"时) 否 取决于默认区域 currencySymbol 货币符号 (当 type="...
文文1 发布于 1个月前 阅读 47

Spark on Kubernetes项目介绍

Introduction to Spark on Kubernetes 注意,Spark 2.3已经正式发布,原生支持Kubernetes,这里的内容已经过时。 参考 https://my.oschina.net/u/2306127/blog/1631978 Apache Spark on Kubernetes series: Introduction to Spark on Kubernetes Scaling Spark made simple on Kubernetes The anatomy of Spark applications on Kubernetes Monitoring Apache Spark with Prometheus Apache Spark CI/CD workflow howto Spark History Server on Kubernetes Spark scheduling on Kubernetes demystified Spark Streaming Checkpointing on Kubernetes Deep dive into monitoring Spark and Zeppelin with Prometheus Apache Spark application resilience on Kubernetes Apache Zeppelin on Kubernetes series: Running Zeppelin Spark notebooks on Kubernetes Running Zeppelin Spark notebooks on Kubernetes - deep dive CI/CD flow for Zeppelin notebooks Apache Kafka on Kubernetes series: Kafka on Kubernetes - using etcd Today we are starting a Spark on Kubernetes series to explain the motivation, benefits, technical details and overall advanta...
openthings 发布于 1个月前 阅读 29

快速排序(数组传递有问题)

  思路:在数组中选择一个数字,然后把数组中的数字分为两个部分,比选择小的数字在数组左边,比选择大的数字在数组右边。然后递归进行这样的操作。 #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; int RandomInRange(int start, int end) { int range = end - start + 1; int val = rand() % range + start; } void swap(int* p, int* q) { int temp; temp = *p; *p = *q; *q = temp; } int Partition(int data[], int length, int start, int end) { if (data == NULL || length <= 0 || start < 0 || end >= length) { cout << "无效输入" << endl; return 0; } int index = RandomInRange(start, end); //随机选一个数 swap(&data[index], &data[end]); int small = start - 1; for (index = start; index < end; ++index) { if (data[index] < data[end]) { ++small; if (small != index) { swap(&data[index], &data[small]); } } } ++small; ...
无精疯 发布于 2周前 阅读 6

JHipster修改JDL中的entity

## 更新model #### 需求 ``` 概览表增加"创建时间,修改时间,软删除" ``` #### 以往的方式 ###### 1. 修改model.jh, 在实体 Overview 中增加三个属性 ``` /** * 数据概览 -- 概览 */ entity Overview { id Long, ... /* 以下属性为新增的属性 */ /* 创建时间 */ createTime ZonedDateTime, /* 更新时间 */ updateTime ZonedDateTime, /* 是否删除 */ delFlag Boolean, } ``` ###### 2. 生成配置文件 ``` jhipster import-jdl model.jh ``` ###### 3. 运行项目使配置生效 ``` 运行项目时提示"Validation Failed",原因是配置文件的MD5值不同, 此时需要以下操作 1. 修改 DATABASECHANGELOG 表中相关记录的 MD5SUM 2. 在overview表中手动新增三个属性. ``` #### 现在的方式 ###### 1. 修改model.h, 在实体 Overview 中增加三个属性 ###### 2. 生成配置文件 ###### 3. 修改生成的配置文件 ``` src/main/resources/config/liquibase/changelog/20180302095615_added_entity_Overview.xml 将 changeSet中新增的三个column提取至新的changeSet中, 如下: 注意: changeSet的id不能与之前的相同 ``` ###### 4. 运行项目使配置生效 ``` 不需要手动修改MySQL,自动生效 ```...
tianshl 发布于 2个月前 阅读 21438

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 发布于 3个月前 阅读 37124

Postman自动登录,请求带token

![这里写图片描述](http://img.blog.csdn.net/20180323182705200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](http://img.blog.csdn.net/20180323182719115?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) #### 添加一个环境 ``` Manage Environments(右上角的齿轮) => Add => 填写环境的名称 => Add ``` #### 添加登录接口 ``` # 比正常的请求多设置一下 "Tests" # 将登录接口返回的response中的token加入环境变量, 如: pm.environment.set("token", JSON.parse(responseBody).data.authorization); ``` #### 添加一个集合 ``` 1. New collection (左侧 目录) 2. 填写名称,如:"需要token的请求" 3. 切换到选项卡"Authorization" 4. 选择相应的 TYPE 5. Token 中填写 {{token}} 6. 点击Create 创建集合 ``` #### 添加需要token的请求 ``` 在刚创建的集合中添加的请求, Headers中都会自动添加 token, 如果token失效, 重新请求一下登录接口即可...
tianshl 发布于 1个月前 阅读 12168

Packet for query is too large

### 前言 ##### max_allowed_packet ``` mysql根据max_allowed_packet限制server接收数据包的大小, 数据量超过这个限制时会导致写入或更新失败. ``` ##### 查看当前限制 ``` show VARIABLES like '%max_allowed_packet%'; ``` ### 修改 ``` 以下提供两种修改方式 ``` ##### 1. 修改配置文件 ``` # 查看配置文件路径 mysql --help | grep my.cnf # 修改 vim /etc/my.cnf 在[mysqld]段增加或修改以下内容: max_allowed_packet = 5M # 重启mysql service mysql restart ``` ##### 2. 命令行修改 ``` # 登录mysql mysql -u root -p # 运行指令 set global max_allowed_packet = 5*1024*1024 # 如果上条命令无效: # set @@max_allowed_packet=5*1024*1024 # 重启mysql service mysql restart # ubuntu service mysqld restart # centos ```...
tianshl 发布于 4天前 阅读 1856

Maven项目一键部署

### 免登陆 ``` # 生成秘钥 tianshl:.ssh tianshl$ ssh-keygen -t rsa -P '' # 将公钥添加至服务器的authorized_keys中 tianshl:.ssh tianshl$ ssh-copy-id -i ./id_rsa.pub root@192.168.1.54 ``` ### 创建脚本 ``` # 项目根目录下创建脚本,名为:update.sh, 内容如下 #!/usr/bin/env bash # 更新 git pull # 打包 mvn clean package -Dmaven.test.skip=true # 上传 scp target/etl-0.0.1-SNAPSHOT.war root@192.168.1.54:/root/ # 删除原日志 | 终止服务 | 启动服务 | 查看启动日志 ssh root@192.168.1.54 "rm etl.log; ps -ef | grep etl | awk '{print $2}' | xargs kill -9; nohup ./etl-0.0.1-SNAPSHOT.war > etl.log 2>&1 &; tail -f etl.log" ``` ### 配置IDE ``` Run / Edit Configurations... / "+" / Bash 1. Name 填写 2. Script 选择 update.sh 3. Working directory 选择 项目根目录 ```...
tianshl 发布于 1个月前 阅读 13396

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 发布于 3个月前 阅读 37367

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个月前 阅读 32646

Java下载CSV文件

```java @GetMapping("/download") public void download(HttpServletResponse response, @RequestParam String path) throws Exception { // 让servlet用UTF-8转码,默认为ISO8859 response.setCharacterEncoding("UTF-8"); File file = new File(path); if (!file.exists()) { // 让浏览器用UTF-8解析数据 response.setHeader("Content-type", "text/html;charset=UTF-8"); response.getWriter().write("文件不存在或已过期,请重新生成"); return; } String fileName = URLEncoder.encode(path.substring(path.lastIndexOf("/") + 1), "UTF-8"); response.setContentType("text/csv"); response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", fileName)); InputStream is = null; OutputStream os = null; try { is = new FileInputStream(path); byte[] buffer = new byte[1024]; os = response.getOutputStream(); int len; while((len = is.read(buffer)) > 0) { os.write(buffer,0, len); } }catch(Exception e) { throw new RuntimeException(e); }finally { try { if (is != null) is.close(); if (os != null) os.close(); } c...
tianshl 发布于 1周前 阅读 3732

高阶爬虫实战:破解极验滑动验证码

今天给大家带来的是极验验证码的selenium破解之法,是不是有点小激动呢,小伙伴们等不及了,让我们赶紧直入主题吧。 虎X网注册 这次我们是拿虎X开刀,注册账号的时候需要滑动图片到缺口位置,这种验证码我们现在也经常遇到,这个就不用详细介绍了吧 针对这种验证码我们首先确定了使用selenium模拟滑动破解方式,selenium鼠标移动点击拖动都比较简单,那么问题就在于拖动多少距离,眼睛看起来很直观,但是程序怎么获取呢?利用图像识别……,额,这个只能想想了吧。不如看看网页源码或者请求信息,看看有没有有效的信息。 查看网页信息 鼠标右键点击到图片上,查看元素 这一瞬间的图片,还好我二十几年的麒麟臂没白练,我们看看元素查看到的都是什么东西 这看起来有点奇怪哦,有个图片链接,还有位置信息,而且还那么多,先把图片链接拷贝到浏览器里访问下看看 WTF,这是什么鬼?注意到那个像猪尾巴一样的6了吗?还有那个小箭头,跟上面完整图片对比一下,发现把箭头挪动到小6旁边,猪尾巴就成功了。当然你仔细观察的话,还有其他的比如文字也是类似。那么我们可以确认这张图片应该是被打乱的,如果我们可以把它拼起来,是不是就离计算缺口位置比较近了。现在我们应该要注意...
千龍 发布于 2天前 阅读 638 评论 12

微服务架构项目实战:Spring Boot 如何创建简单的 REST 服务

你将学习 什么是 REST 服务? 如何使用 Spring Initializr 引导创建 Rest 服务应用程序? 如何创建获取 REST 服务以检索学生注册的课程? 如何为学生注册课程创建 Post REST 服务? 如何利用 postman 执行 rest 服务? 本教程使用的 rest 服务 在本教程中,我们将使用适当的 URI 和 HTTP 方法创建三个服务: @GetMapping(“/ students / {studentId} / courses”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses 来查询特定学生已注册的课程。 @GetMapping(“/students/{studentId}/courses/{courseId}”):您可以使用请求方法 Get 和示例 uri / students / Student1 / courses / Course1 获取特定学生的特定课程。 @PostMapping(“/students/{studentId}/courses”) :您可以通过向 UURI /students/Student1/courses 发送 POST 请求来为学生注册一门课程 您将需要的工具 Maven 3.0+ 是您的构建工具 你最喜欢的 IDE。我们使用 Eclipse。 JDK 1.8+ 完整的 spring booot rest Maven 项目代码示例子 我们的 Github 存储库包含所有代码示例 - https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files 带有单元和集成测试的 ...
烂猪皮 发布于 1天前 阅读 250 评论 2

Ubuntu 编译ffmpeg 实现GPU 转码

    前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeg gpu 转码的过程。          该文章后续仍在不断的更新修改中, 请移步到原文地址 https://my.oschina.net/u/2950272/blog 环境: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" 注意,这里机器启动级别调低,不要加载桌面系统。 本机是2核4G 普通硬盘,gpu 型号:GTX950M 第一部分,安装cuda 8:     1.1 查看是否有显卡: lspci | grep -i nvidia     1.2 查看操作系统是否cuda 官方支持: uname -m && cat /etc/*release     1.3 安装gcc g++ 等编译依赖基础库 apt-get install gcc g++ build-essential     1.4 下载安装cuda 下载cuda: wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 安装 cuda 源: dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 添加源: deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / 更新缓存: apt-get update 安装cuda: apt-get i...
鼎铭 发布于 3天前 阅读 1729 评论 23 点赞 4

基于Docker的MySQL主从数据库搭建

最初的想法是为了做数据备份,但实际作用远不止于此,菜鸟一枚,仅作为记录。
Raphael_Zhang 发布于 2天前 阅读 342

JeeSite 4.0 开发环境部署运行调试(Eclipse)

# 环境要求 1、Java SDK 1.8 [下载](http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html) 2、Eclipse IDE for Java EE Mars 2 (4.5.2) [下载](https://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/mars2) 3、Apache Maven 3.3+ [下载](https://maven.apache.org/download.cgi) 4、MySql 5.7+ [下载](https://dev.mysql.com/downloads/windows/installer/5.7.html) # 导入到Eclipse 1、检出JeeSite4源代码: ``` git clone https://gitee.com/thinkgem/jeesite4.git ``` 2、拷贝`web`文件夹,到你的工作目录(不包含中文和空格的目录)下,重命名为你的工程名,如:`jeesite-demo` 3、打开`pom.xml`文件,修改第13行,artifactId为你的工程名,如:`jeesite-demo` 4、导入到Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择第2步的`jeesite-demo`文件夹,然后点击 Finish 按钮,即可成功导入 5、这时,Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定),若工程上有小叉号,请打开Problems窗口,查看具体错误内容,直到无错误为...
ThinkGem 发布于 2个月前 阅读 14004 评论 35 点赞 8

Spring Cloud Feign 熔断配置的一些小坑

1.在使用feign做服务调用时,使用继承的方式调用服务,加入Hystrix的熔断处理fallback配置时,会报错,已解决。 2.使用feign默认配置,熔断不生效,已解决。
FutureElement 发布于 14小时前 阅读 179

你离BAT之间,只差这一套Java面试题

最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目。这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题。关于中高级的程序员问题,我后面可能再出一篇文章。 对于一个初中级程序员来说,面试问题不仅仅涉及到Java语言,还会包括很多其他知识,比如计算机基础知识(数据结构、计算机网络、操作系统等)、C语言基础、Java底层知识以及一些框架相关知识等。本文几乎覆盖到了所有领域。 计算机基础知识 C语言基础 Java基础 Java高级 Java Web 设计模式 知识的综合能力 工具使用 项目相关 技术热情 表达能力 思考方式 其他 推荐阅读 还有,我知道很多人会问关于这些题目的答案问题。答案我都有,由于篇幅有限没办法直接贴上来。这些题目的答案我会在我的公众号及知识星球中给出,感谢关注。 为了方便,我把他们分了类,有一些是必看的,我用!标注,有一些进阶型的我用%标注,有一些需要了解的,我用?标注。 必会关键字 void byte int long char short float double String StringBuffer StringBuilder Array CollectionCollections List ArrayList LinkedList Vector Set HashMap TreeMap L...
Java工程师-Distance 发布于 2天前 阅读 526 点赞 2

java基础(一) 深入解析基本类型

### 一、基本类型的简介 **基本类型的两条准则:** - Java中,如果对整数不指定类型,默认时int类型,对小数不指定类型,默认是double类型。 - 基本类型由小到大,可以自动转换,但是由大到小,则需要强制类型转换。 **所占的字节数:** byte: 1个字节; char: 2个字节; short: 2个字节; int: 4个字节; long: 8个字节; float: 4个字节;(6位小数,指数是:10^-38~10^38; 范围:) double: 8个字节; char:Java中用 "\u四位十六进制的数字 (即使在注释中出现\u,后面如果 跟的不是4个16进制的数字,也会报错)"表示将字符转换成对应的unicode编 码;也可以用字符来赋值如: char c="\u0000" ,char的默认初始化值,unicode的null字符 **基本类型的后缀:** long : l 或 L float: f 或 F; double: d 或 D ### 二、类型转换   正如前面所说的,类型由大到小,是必需强制转换。但这并不意味着需要用户手动强制转换 —— 也就是 隐式转换。隐式转换 说的透彻点就是由编译器来进行强制转换,不需要用户再去写强制转换的代码。下面的前两个小点所说的便是特殊的隐式类型转换。 本小节所讨论的类型转换是不包括 类型由小到大的转换,讨论的是其他比较容易让人迷惑...
sihailoveyan 发布于 1天前 阅读 366

春季新增开源项目:可以斗图的 Markdown 编辑器,了解一下?

转眼间,春风又绿江南岸,2018 年悄然过去了四分之一,开发者的热情也似乎正在被回暖的天气点燃。2、3月份,开源中国社区总共收录了近 400 个项目。弱水三千取一瓢,我们从每月新增的开源项目挑选了几个和大家一起分享。
编辑部的故事 发布于 1周前 阅读 8934 评论 9 点赞 10

Docker容器可视化监控中心搭建

一个宿主机上可以运行多个容器化应用,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息,而且这些信息随时间变化,我们称其为时序数据
hansonwang 发布于 4天前 阅读 2700 评论 7 点赞 4

EMQ百万级MQTT消息服务(小技巧)

![](http://i.imgur.com/vhdeDvX.png) 附上: 喵了个咪的博客:[w-blog.cn](w-blog.cn) EMQ官方地址:[http://emqtt.com/](http://emqtt.com/) EMQ中文文档:[http://emqtt.com/docs/v2/guide.html](http://emqtt.com/docs/v2/guide.html) ## 1.ACL鉴权规则化 在正常业务使用下对于客户端的行为可以使用ACL进行限制,比如A客户端只能订阅 /A/get 队列消息和向 /A/set 发布内容 但是在MYSQL里面处理这样的鉴权就需要写入两条记录,如果设备量有一百万数据库就要承担两百万条鉴权数据量会大大影响数据库的性能 那么有没有什么批量的方式来定义ACL鉴权呢? 在mysql-ACL鉴权的配置文件下关于如何使用鉴权的SQL是可以编辑的,也就意味着你可以通过SQL来实现批量ACL鉴权规则 ```bash > vim /usr/local/emqttd/etc/plugins/emq_auth_mysql.conf # 最下面有这样一条配置 auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c' ``` 笔者这里就实现每个设备默认可以订阅 /A/get 队列消息和向 /A/set 发布 ![](http://pic.w-blog.cn/ADE78396-BF03-4672-A3E2-07F04...
喵了_个咪 发布于 6天前 阅读 2092 评论 3

Java下载CSV文件

```java @GetMapping("/download") public void download(HttpServletResponse response, @RequestParam String path) throws Exception { // 让servlet用UTF-8转码,默认为ISO8859 response.setCharacterEncoding("UTF-8"); File file = new File(path); if (!file.exists()) { // 让浏览器用UTF-8解析数据 response.setHeader("Content-type", "text/html;charset=UTF-8"); response.getWriter().write("文件不存在或已过期,请重新生成"); return; } String fileName = URLEncoder.encode(path.substring(path.lastIndexOf("/") + 1), "UTF-8"); response.setContentType("text/csv"); response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", fileName)); InputStream is = null; OutputStream os = null; try { is = new FileInputStream(path); byte[] buffer = new byte[1024]; os = response.getOutputStream(); int len; while((len = is.read(buffer)) > 0) { os.write(buffer,0, len); } }catch(Exception e) { throw new RuntimeException(e); }finally { try { if (is != null) is.close(); if (os != null) os.close(); } c...
tianshl 发布于 1周前 阅读 3732

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 发布于 3个月前 阅读 37367

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个月前 阅读 32646

Postman自动登录,请求带token

![这里写图片描述](http://img.blog.csdn.net/20180323182705200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](http://img.blog.csdn.net/20180323182719115?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) #### 添加一个环境 ``` Manage Environments(右上角的齿轮) => Add => 填写环境的名称 => Add ``` #### 添加登录接口 ``` # 比正常的请求多设置一下 "Tests" # 将登录接口返回的response中的token加入环境变量, 如: pm.environment.set("token", JSON.parse(responseBody).data.authorization); ``` #### 添加一个集合 ``` 1. New collection (左侧 目录) 2. 填写名称,如:"需要token的请求" 3. 切换到选项卡"Authorization" 4. 选择相应的 TYPE 5. Token 中填写 {{token}} 6. 点击Create 创建集合 ``` #### 添加需要token的请求 ``` 在刚创建的集合中添加的请求, Headers中都会自动添加 token, 如果token失效, 重新请求一下登录接口即可...
tianshl 发布于 1个月前 阅读 12168

JHipster修改JDL中的entity

## 更新model #### 需求 ``` 概览表增加"创建时间,修改时间,软删除" ``` #### 以往的方式 ###### 1. 修改model.jh, 在实体 Overview 中增加三个属性 ``` /** * 数据概览 -- 概览 */ entity Overview { id Long, ... /* 以下属性为新增的属性 */ /* 创建时间 */ createTime ZonedDateTime, /* 更新时间 */ updateTime ZonedDateTime, /* 是否删除 */ delFlag Boolean, } ``` ###### 2. 生成配置文件 ``` jhipster import-jdl model.jh ``` ###### 3. 运行项目使配置生效 ``` 运行项目时提示"Validation Failed",原因是配置文件的MD5值不同, 此时需要以下操作 1. 修改 DATABASECHANGELOG 表中相关记录的 MD5SUM 2. 在overview表中手动新增三个属性. ``` #### 现在的方式 ###### 1. 修改model.h, 在实体 Overview 中增加三个属性 ###### 2. 生成配置文件 ###### 3. 修改生成的配置文件 ``` src/main/resources/config/liquibase/changelog/20180302095615_added_entity_Overview.xml 将 changeSet中新增的三个column提取至新的changeSet中, 如下: 注意: changeSet的id不能与之前的相同 ``` ###### 4. 运行项目使配置生效 ``` 不需要手动修改MySQL,自动生效 ```...
tianshl 发布于 2个月前 阅读 21438

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 发布于 3个月前 阅读 37124

Maven项目一键部署

### 免登陆 ``` # 生成秘钥 tianshl:.ssh tianshl$ ssh-keygen -t rsa -P '' # 将公钥添加至服务器的authorized_keys中 tianshl:.ssh tianshl$ ssh-copy-id -i ./id_rsa.pub root@192.168.1.54 ``` ### 创建脚本 ``` # 项目根目录下创建脚本,名为:update.sh, 内容如下 #!/usr/bin/env bash # 更新 git pull # 打包 mvn clean package -Dmaven.test.skip=true # 上传 scp target/etl-0.0.1-SNAPSHOT.war root@192.168.1.54:/root/ # 删除原日志 | 终止服务 | 启动服务 | 查看启动日志 ssh root@192.168.1.54 "rm etl.log; ps -ef | grep etl | awk '{print $2}' | xargs kill -9; nohup ./etl-0.0.1-SNAPSHOT.war > etl.log 2>&1 &; tail -f etl.log" ``` ### 配置IDE ``` Run / Edit Configurations... / "+" / Bash 1. Name 填写 2. Script 选择 update.sh 3. Working directory 选择 项目根目录 ```...
tianshl 发布于 1个月前 阅读 13396

Packet for query is too large

### 前言 ##### max_allowed_packet ``` mysql根据max_allowed_packet限制server接收数据包的大小, 数据量超过这个限制时会导致写入或更新失败. ``` ##### 查看当前限制 ``` show VARIABLES like '%max_allowed_packet%'; ``` ### 修改 ``` 以下提供两种修改方式 ``` ##### 1. 修改配置文件 ``` # 查看配置文件路径 mysql --help | grep my.cnf # 修改 vim /etc/my.cnf 在[mysqld]段增加或修改以下内容: max_allowed_packet = 5M # 重启mysql service mysql restart ``` ##### 2. 命令行修改 ``` # 登录mysql mysql -u root -p # 运行指令 set global max_allowed_packet = 5*1024*1024 # 如果上条命令无效: # set @@max_allowed_packet=5*1024*1024 # 重启mysql service mysql restart # ubuntu service mysqld restart # centos ```...
tianshl 发布于 4天前 阅读 1856

Java集合总结【面试题+脑图】,将知识点一网打尽!

前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~ 回顾目录: Collection总览 List集合就这么简单【源码剖析】 Map集合、散列表、红黑树介绍 HashMap就是这么简单【源码剖析】 LinkedHashMap就这么简单【源码剖析】 TreeMap就这么简单【源码剖析】 ConcurrentHashMap基于JDK1.8源码剖析 Set集合就这么简单! Java容器可分为两大类: Collection List ArrayList LinkedList Vector(了解,已过时) Set HashSet LinkedHashSet TreeSet Map HashMap LinkedHashMap TreeMap ConcurrentHashMap Hashtable(了解,,已过时) 着重标出的那些就是我们用得最多的容器。 其实,我也不知道要怎么总结好,因为之前写每一篇的时候都总结过了。现在又把他们重新罗列出来好像有点水,所以,我决定去回答一些Java容器的面试题! 当然了,我的答案未必就是正确的。如果有错误的地方大家多多包含,希望不吝在评论区留言指正~~ 一、ArrayList和Vector的区别 共同点: 这两个类都实现了List接口,它们都是有序的集合(存储有序),底层是数组。我们可以按位置索引号取出某个元素,允许元素重复和为null。 区别...
Java3y 发布于 5天前 阅读 816 点赞 1

JeeSite 4.0 开发环境部署运行调试(Eclipse)

# 环境要求 1、Java SDK 1.8 [下载](http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html) 2、Eclipse IDE for Java EE Mars 2 (4.5.2) [下载](https://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/mars2) 3、Apache Maven 3.3+ [下载](https://maven.apache.org/download.cgi) 4、MySql 5.7+ [下载](https://dev.mysql.com/downloads/windows/installer/5.7.html) # 导入到Eclipse 1、检出JeeSite4源代码: ``` git clone https://gitee.com/thinkgem/jeesite4.git ``` 2、拷贝`web`文件夹,到你的工作目录(不包含中文和空格的目录)下,重命名为你的工程名,如:`jeesite-demo` 3、打开`pom.xml`文件,修改第13行,artifactId为你的工程名,如:`jeesite-demo` 4、导入到Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择第2步的`jeesite-demo`文件夹,然后点击 Finish 按钮,即可成功导入 5、这时,Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定),若工程上有小叉号,请打开Problems窗口,查看具体错误内容,直到无错误为...
ThinkGem 发布于 2个月前 阅读 14004 评论 35 点赞 8

Apache Ignite事务架构:Ignite持久化的事务处理

在本系列[上一篇文章](https://my.oschina.net/liyuj/blog/1791800)中,介绍了故障和恢复,下面是本系列剩下的文章将要讨论的主题: - Ignite持久化的事务处理(WAL、检查点及其他) - 第三方持久化的事务处理 在本文中,会聚焦于Ignite持久化的事务处理。 将[Apache Ignite](https://ignite.apache.org/)作为内存数据网格(IMDG)的都知道,如果整个集群瘫痪,仅仅将数据保存在内存中问题是很严重的,其他的IMDG以及缓存技术也会面临同样的问题。解决这个问题的方案之一就是,将Ignite与第三方的持久化存储集成,然后提供通读和通写能力,如图1所示: ![图1:使用第三方存储进行持久化](https://www.gridgain.com/sites/default/files/inline-images/Figure1_10.png) 但是,这个方法有一些缺陷,在本系列的下一篇文章中会说明。 作为第三方持久化的替代方案,Ignite开发了一个固化内存架构,如图2所示,该架构可以同时在内存和磁盘上进行数据和索引的存储和处理,该特性使用非常简单,使得Ignite集群在数据落盘的前提下,获得内存级的性能: ![图2:固化内存](https://www.gridgain.com/sites/default/files/inline-images/Figure2_9.png) 固化内存的工作方式类似于现代操...
李玉珏 发布于 1周前 阅读 933 点赞 3

RabbitMQ实战:界面管理和监控

> 本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。 上一篇总结了可能出现的异常场景,并对RabbitMQ提供的可用性保证进行了分析,在出现服务器宕机后,仍然可以正常服务。另外,需要尽快恢复异常的服务器,重新加入集群,推送未消费的消息,通过监控可第一时间接收到错误并进行处理。 另外,我们想主动了解消息堆积和消费的情况,以及服务器节点的压力,RabbitMQ提供了几种方式便捷、直观的了解,包括Web管理插件、REST API、rabbitmqadmin脚本。 通过介绍,你会了解到: * web管理插件 * REST API * rabbitmqadmin脚本 * Nagios和监控RabbitMQ ### web管理插件 RabbitMQ的插件是由Erlang语言写的,并且和服务器一同运行在同一个Erlang VM中,通过下面的命令启用web管理插件: ``` java sudo ./rabbitmq-plugins enable rabbitmq_management ``` 启动之后,访问15672端口,可看到Web管理页面主页面: ![RabbitMQ主页面](http://oc3r3rke2.bkt.clouddn.com/15236961623170.jpg) ##### 添加用户 默认会提供一个默认用户guest,密码也是guest,线上环境需要创建一个新用户,并把guest用户删除。 首先切换到Admin标签页,可以查看或添加用户,添加用户时,可...
情情说 发布于 5天前 阅读 634

SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名表达式

遇见这个问题,是公司的小伙伴跟我说,每次使用mybatis的时候,简单的连表查询,用Map接收的时候,都是像DB定义的字段一样,类似以下 student_name,student_id,没有转换为驼峰,但是又不能因为这一个定义一个javabean来映射数据库字段集合,这样,会有无穷无尽的javabean,完全不是办法,然后我看了下mybatis-spring-boot的配置文档http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/,发现有这么个属性   mybatis.configuration.map-underscore-to-camel-case=true 看着属性意思,很像是 map 下划线转换为驼峰,然后我天真的以为,加个这个,就会将Map里面的key转换为驼峰的命名方式,然后我自己测试了一下,发现自己还是太天真,没转过来,该是什么还是什么(心里面是B了狗了).... 没办法,接着找了了一下,发现官方文档http://www.mybatis.org/mybatis-3/configuration.html#properties,描述过这个的作用  才发现,这个属性的作用,是作用于javabean的field的,并不是map,ㄟ( ▔, ▔ )ㄏ,那没办法了,只能自己动手了     -------------------------------我是分割线-------------------------------------- 既然 map-underscore-to-camel-case 不能作用于map,那么...
贺小五 发布于 5天前 阅读 623 评论 2

MySQL的索引是什么?怎么优化?

索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
我叫刘半仙 发布于 3周前 阅读 5531 评论 14 点赞 40

spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

# spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想,是真的么?,忙到这几个字都没时间打么?毕竟大家都很忙的,所以忙并不是啥理由. 那是因为啥呢?感觉就只有一个理由能站得住脚了,就是因为"懒". 哈哈.... 尬聊了一段,活跃下气氛,下面进入正题 ## **场景** 在实际工作中,大家可能也都遇到过这样的情况 : 一个正在更新迭代过程中项目,会收到大量业务部门的需求,这些需求可能会来自于不同业务部门,或者不同的产品经理 而项目的onwer则需要接收到这些需求,对这些需求进行初步的分析和排期,但是在排期的过程中,会有这样一种尴尬的情况发生. 比如,有两个互不嗒噶的产品经理,针对同一功能点,提出了两个不同业务改造的需求点,两个需求点要求上线的时间很接近,但是又出于某种原因,不能同时上线,或者产品经理根本无法确定上线时间,而告诉你尽快完成开发/测试,他则根据实际情况确定业务需求的发布时间 那么,对于这种情况,通常会采用开分支的方式进行开发,即不同版本的并行需求的开发在不同分支上同时进行开发,那么,团队成员(开发/测试),则可以同时的开展工作...
wangkang80 发布于 4天前 阅读 407

微服务架构—优雅停机方案

微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出。
李景枫 发布于 3周前 阅读 3771 评论 6 点赞 7

Session管理之超时设置和强制下线

Session,强制下线
海岸线的曙光 发布于 3周前 阅读 4187 评论 13 点赞 6

Twitter的分布式自增ID算法snowflake (Java版)

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。   结构 snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19) snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。   源码 (JAVA版本的源码) /** * Twitter_Snowflake<br> ...
小王穷遊 发布于 43分钟前 阅读 3

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

Lubuntu Next 18.10将默认采用Calamares

导读 Lubuntu是最轻量级的官方Ubuntu衍生版,在即将到来的Bionic Beaver操作系统系列的开发周期中,在过去几个月中遇到各种各样的艰难问题,但是它的小型开发团队设法解决它们并继续在Lubuntu和Lubuntu上工作。 虽然现在我们很少看到有关LUbuntu的新闻,但是Lubuntu和Lubuntu Next操作系统仍将继续开发,开发人员Simon Quigley今天与我们分享了即将发布的一些详细信息。 Lubuntu是最轻量级的官方Ubuntu衍生版,在即将到来的Bionic Beaver操作系统系列的开发周期中,在过去几个月中遇到各种各样的艰难问题,但是它的小型开发团队设法解决它们并继续在Lubuntu和Lubuntu上工作。 虽然Lubuntu Next为我们提供了基于最新Qt 5技术的更现代的LXQt桌面环境,但即将推出的Lubuntu 18.04 LTS版本仍默认使用LXDE桌面环境。从Lubomsu 15.10(Wily Werewolf)开始,从LXDE切换到Luntu的LXQt正处于测试阶段,但在这方面正在取得进展。 “我们经常会遇到一个问题:”为什么不把LXQt作为默认设备?“这些问题的答案是,“我们正在努力实现(并正在取得进展)的同时,我们不希望发布一些尚不完美的东西来损害我们的用户群,“开发人员Simon Quigley说。 Lubuntu Next 18.10采用Calamares图形...
问题终结者 发布于 44分钟前 阅读 2

JPA @Lob 存储大文本 org.postgresql.util.PSQLException: 大型对象无法被使用在自动确认事物交易模式。问题

在文本字段的@Lob前添加  @org.hibernate.annotations.Type(type = "org.hibernate.type.TextType")
jaakan 发布于 48分钟前 阅读 2

Android单元测试

参考文档: Testing Apps on Android Android Studio 写个单元测试用例,就是这么方便 Android单元测试之JUnit4 说明:本文基于Android Studio 3 本文示例代码 在使用AS建立好一个项目时,会在src目录下生成test和androidTest目录,这2个目录都是用于单元测试的。 Local tests     test目录,也就是运行于本机的Java虚拟机上的,这种方式能节省大量时间,     当测试不依赖Android    Framework或可以用mock解决依赖时,推荐使用这种方式; Instrumented tests     androidTest目录,即需要运行在真机或模拟器上,这种方式比Local tests要慢,     一般只有当测试存在依赖或不容易用mock解决依赖时才使用这种方式。   测试依赖的JUnit库也会自动添加到对应module的build.gradle。 dependencies { ...... testImplementation 'junit:junit:4.12' ...... } 接下来我们先来建立一个Calculator类。 package com.igiantpanda.androidstudy.UnitTest; public class Calculator { private static int mCount = 0; public int getCount() { return mCount; } public static int sum(int a, int b) { mCount...
大熊猫 发布于 55分钟前 阅读 2

用FastDFS一步步搭建文件管理系统

FastDFS
Q317075064 发布于 55分钟前 阅读 1

简单工厂设计模式

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 简单工厂设计模式 设计模式不是语法,是一种巧妙的写法,能把程序变的更加灵活。 架构模式比设计模式大,架构模式是战略,设计模式是战术。 设计模式分为3种:创建型,行为型,结构型 简单工厂设计模式属于创建型设计模式,但不属于23种设计模式范围内,属于23种设计模式中工厂方法的入门模式,又叫静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂设计模式的好处是隐藏对象创建,不用依赖对象,可以随意更换对象。在工厂模式中,工厂类中的所有方法返回同一个抽象产品类,代码的升级和扩张只需要在这个工厂类中注入新的功能方法返回抽象产品类即可,或是另外写接口,将这个抽象产品类强制转换成这个接口,让具体产品类去实现。 售票员例题: 解开Jfreechart压缩包--打开lib--打开chart文件夹--找到ChartFactory.class文件--拖拽到IDEA中进行反编译--点击structure查看结构 Jfreechart是典型的工厂模式做出来的。Jfreechart就是工程模式中的产品,在所有creat方法中返回的全部都是同一个J...
凯哥学堂 发布于 56分钟前 阅读 2

chaos-monkey-spring-boot小试牛刀

## 序 本文主要介绍下chaos-monkey-spring-boot ## Chaos Monkey for Spring Boot chaos-monkey-spring-boot是专门为Spring Boot打造的Chaos Monkey ![](https://codecentric.github.io/chaos-monkey-spring-boot/images/sb-chaos-monkey-architecture.png) 主要有有如下几个方面的Assaults - Latency Assault - Exception Assault - AppKiller Assault ## 实例 ### maven ``` de.codecentric chaos-monkey-spring-boot 1.0.1 ``` ### 配置 ``` chaos.monkey.assaults.level=5 chaos.monkey.assaults.latencyRangeStart=10000 chaos.monkey.assaults.latencyRangeEnd=15000 chaos.monkey.assaults.latencyActive=true chaos.monkey.assaults.exceptionsActive=true chaos.monkey.assaults.killApplicationActive=true chaos.monkey.watcher.controller=true chaos.monkey.watcher.restController=true chaos.monkey.watcher.service=true chaos.monkey.watcher.repository=true ``` ### 运行 ``` 2018-04-20 22:50:02.475 INFO 2861 --- [ main] d.c.s.b.c.monkey.component.ChaosMonkey : _____ _ __ __ _ / ____| | | \/ | | | | | | |__ __ _ ___ ___ | \ / | ___ _ __ ...
go4it 发布于 1小时前 阅读 2

ElasticSearch笔记系列(8)——简单查询、条件查询、聚合查询

ES的查询方式可以分为三类: 简单查询 条件查询 聚合查询   数据准备 我们先按照前几篇介绍的插入文档的方法准备一些实验数据,然后再来演示如何实现各类查询。 我们在我们之前创建的rent索引的community类型下面加入如下文档信息。 回忆一下:当时创建的索引及类型如下: { "settings":{ "number_of_shards":3, "number_of_replicas":1 }, "mappings":{ "community":{ "properties":{ "communityname":{ "type":"text" }, "city":{ "type":"keyword" }, "age":{ "type":"integer" }, "creationdate":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } }, "shop":{ } } } 回过头来,我们现在插入一些文档进去。插入的ES的API:http://localhost:9200/rent/community/ 所有文档的插入请求体如下:你可以把这些数据插入到你的ES中,然后try后续的各种查询。 { "communityname":"万科阳光苑", "city":"上海", "age":10, "creationdate":"2008-01-01 00:00:00" } { "communityname":"万科朗润园", "city":"上海", "age":12, "creationdate":"2006...
HappyBKs 发布于 2小时前 阅读 2

go学习之Beego框架

一、下载安装框架 go get github.com/astaxie/beego 二、下载安装bee工具 go get github.com/beego/bee     最好将bin文件夹中的bin.exe加入GOPATH环境变量,全局生效;偷懒的方法是将bin.exe拷贝到需要使用的文件夹下 三、bee工具的使用    在需要创建项目的src目录下使用命令:bee new project即可自动创建一个新项目,在新项目的根目录下使用命令:bee run main.go即可运行,如下图所示     此时可通过在浏览器访问http://localhost:8080/运行此项目,如下图所示
lujc 发布于 2小时前 阅读 1

JS处理datatime数据类型

# 问题描述 # 数据库中数据类型为datatime,使用AJAX获取JSON数据时,前端获取到的将会是一个长度13位的字符串,因此需要做个转化; ## JS处理标准化写法 ## //后台datetime格式转化 /* 获取日期格式 */ function getDate(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); return year + "-" + month + "-" + day ; } /* 获取日期时间格式*/ function getDateTime(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hh = date.getHours(); var mm = date.getMinutes(); var ss = date.getSeconds(); return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + ss; } ## 具体使用 ## var date_before = /*后台返回的数据*/; var date_after = getDateTime(new Date(date_before));...
Ethel_oo 发布于 2小时前 阅读 1

数据挖掘 numpy之常用操作

通用函数(ufunc) NumPy提供常见的数学函数如sin,cos和exp。 在NumPy中,这些叫作“通用函数”(ufunc)。在NumPy里这些函数作用按数组的元素运算,产生一个数组作为输出。 更多函数all, alltrue, any, apply along axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, conjugate, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, inv, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sometrue, sort, std, sum, trace, transpose, var, vdot, vectorize, where 参见:NumPy示例 b = numpy.arange(3) print(numpy.exp(b)) print(numpy.sin(b)) print(numpy.sqrt(b)) [ 1. 2.71828183 7.3890561 ] [ 0. 0.84147098 0.90929743] [ 0. 1. 1.41421356] 索引,切片和迭代 一维数组可以被索引、切片和迭代,就像列表和其它Python序列。 import numpy a = numpy.arange(10)**3 print(a[2]) # 索引 print(a[2:5]) # 切片 a[:6:2] = 100 # 索引0到6, 步进为2, 对其所有值进行赋值。 print(a) b = a[::-1] # 反转倒叙, 不会改变原来的值 print(b) for i in a: ...
Eappo_Geng 发布于 2小时前 阅读 3

使用docker搭建wordpress网站

![](https://upload-images.jianshu.io/upload_images/3778244-c9fe8f42e8a54217.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ### 概述 使用docker的好处就是尽量减少了环境部署,可靠性强,容易维护,我使用docker搭建wordpress的主要目标有下面几个 首先我重新生成数据库容器可以保证数据库数据不丢失,重新生成wordpress容器保证wordpress网站数据不丢失,尽量让两个容器处于无状态运行中,所有数据保存在本地,方便备份和恢复 ### mysql容器方面 首先我是在树莓派上做这个实验的,用的是别人做好的arm版本的mysql镜像,其实和官方的mysql镜像是一样的,没有任何区别,就是名字不一样而已,生成容器的命令如下 `docker run --name mysql-wordpress -d -v /root/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="woyaoxuehuilinux" hypriot/rpi-mysql` 解释一下参数,--name就是给容器取名字。-d就是把它放在后台运行,-v加上后面的目录表示把容器中的/var/lib/mysql目录和宿主机中的/root/mysql-data目录做映射,把数据库数据保存在本地,-e后面加的参数就是设置mysql的密码,最后就是使用的镜像的名字 ### wordpress容器方面 直接上运行参数 `docker ...
bboysoulcn 发布于 2小时前 阅读 1

RecyclerView的Item的单击事件

RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: RecyclerView的使用方法请参考:[RecyclerView的简单使用](https://my.oschina.net/jzmanu/blog/1798182) #### 第一步: 在RecyclerView的Adapyer中定义单击事件的回调接口: ``` java /** * 定义RecyclerView选项单击事件的回调接口 */ public interface OnItemClickListener{ //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick(RecyclerView parent,View view, int position, String data); } ``` #### 第二步: 在RecyclerView的Adapyer中声明该接口,并提供setter方法: ``` java private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } ``` #### 第三步: 在RecyclerView的Adapyer类实现View.OnClickListener接口,并重写onClick(View view)方法,然后设置给接口的事件监听: ``` java public class RvAdapter1 extends RecyclerView.Adapter ...
jzman 发布于 2小时前 阅读 2

面向对象与vue的结合

将操作和实现分离 把函数式改为面向对象的形式 在视图层 只调用对象的方法 然后重新挂载,达到刷新视图的效果 Maze class Maze { constructor(size) { this.size = size this.blank = size * size this.items = Array.from(Array(size * size)).map((_, index) => index + 1) this.initCnt = 1000 } // 是否完成 isPass() { return this.items.every((item, index) => item == index + 1) } // 空白块所在位置0....1.... blankPos() { return this.items.indexOf(this.blank) } // 移动 move(dir) { // console.log(dir) if (dir == 0 && this.blankPos() >= this.size) { this.swap(this.blankPos(), this.blankPos() - this.size) } else if (dir == 1 && this.blankPos() % this.size != (this.size - 1)) { this.swap(this.blankPos(), this.blankPos() + 1) } else if (dir == 2 && this.blankPos() < (this.size - 1) * this.size) { this.swap(this.blankPos(), this.blankPos() + this.size) } else if (dir == 3 && this.blankPos() % this.size != 0) { this.swap(...
阿豪boy 发布于 2小时前 阅读 3

基于Spring Cloud的微服务落地

微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。 在Java生态圈,目前使用较多的微服务框架就是集成了包括Netfilix OSS以及Spring的Spring Cloud。它包括: Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。 Spring Cloud Netflix:对Netflix OSS进行了整合。其中又包括: Eureka:服务治理组件,包含服务注册中心、服务注册与发现。 Hystrix:容器管理组件,实现断路器模式,倘若依赖的服务出现延迟或故障,则提供强大的容错功能。 Ribbon:客户端负载均衡的服务调用组件。 Feign:基于Ribbon和Hystrix的声明式服务调用组件。 Zuul:网关组件,提供智能路由、访问过滤等功能。 Archaius:外部化配置组件。 Spring Cloud Bus:事件、消息总线。 Spring Cloud Cluster:针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。 Spring Cloud Cloudfoundry:与Pivotal Cloudfoundry的整合支持。 Spring Cloud Consul:服务发现与配置管理...
茶轴的青春 发布于 2小时前 阅读 1

Cat 部署

Cat 部署
JUKE 发布于 2小时前 阅读 1

C 语言指针的强制装换

#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int num=8; #mov dword ptr [num],8 #汇编说明: 将值8 赋给 双字num的地址内, int *q=(int*)num; #mov eax,dword ptr [num] #汇编说明: 将双字类型 num中的值 赋给 eax 寄存器中, #mov dword ptr [q],eax #汇编说明: 将eax寄存器中的值 赋给 双字类型 q 的地址内, int *m= (int*)# #lea eax,[num] #将num 的地址 赋给 eax 寄存器中, #mov dword ptr [m],eax #将 eax寄存器中的值付给 双字类型 m 的地址内, char *p = (char*)# #lea eax,[num] #将num 的地址 赋给 eax 寄存器中, #mov dword ptr [p],eax #将eax寄存器中的值付给 双字类型 p 的地址中, /* 汇编说明: lea 指令传递的是地址. mov 指令传递的是值. */ printf("num: %x\r\n",&num); printf("p :%x\r\n",p); printf("*p :%d\r\n",*p); # 这个取地址中的值得操作是失败的,非法访问了一个的地址. return 0; }  ...
小张525 发布于 3小时前 阅读 2

各种API&exe文件&jar包官网地址

1.jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1024菜bird 发布于 3小时前 阅读 2

java中的四舍五入——几种四舍五入的写法

// 方式一:BigDecimal方式 double f = 3.1315; BigDecimal b = new BigDecimal( new Double(f).toString ); double f1 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); 注意:这里一定不要直接使用new BigDecimal(double)的构造方法, 而要使用new BigDecimal(new Double(1.1315).toString())的方式,不然会出现精确问题 // 方式二:DecimalFormat方式 //DecimalFormat默认采用了RoundingMode.HALF_EVEN这种类型,而且format之后的结果是一个字符串类型String DecimalFormat df = new DecimalFormat("#.000"); System.out.println(df.format(new BigDecimal(1.0145)));//1.014 System.out.println(df.format(new BigDecimal(1.1315)));//1.132 // 方式三: double d = 3.1415926; String result = String.format("%.2f", d); // %.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型。 //方法四:传统的Math.round四舍五入,改为支持指定精确位数的写法 Math.round(5.2644555 * 100) * 0.01d; private static double myRound(double number,int index){       double result = 0;       double temp = Math.pow(10, index);     ...
霜叶情 发布于 3小时前 阅读 2

完整微服务化示例:使用 Apache ServiceComb (incubating) 进行微服务开发、容器化、弹性伸缩

最完整的微服务化示例,从业务场景入手,讲述微服务化架构设计、容器化、集群部署、弹性伸缩
ServiceComb 发布于 3小时前 阅读 1

手把手教你打造一个可视化接口自动化测试系统

现如今,接口开发几乎成为一个互联网公司的标配了,无论是web还是app,哪怕是小程序,都离不开接口作为支撑,当然,这里的接口范围很广,从http到websocket,再到rpc,只要能实现数据通信的都可以称之为接口,面临着如此庞大的接口数据,如果更好的管理和测试他们都是一个比较头疼的问题,更主要的是很多业务场景是需要多个接口进行联调的,因此在接口开发完成后,一轮自动化测试能快速反馈出当前系统的状况,面对这样的需求,一个对测试人员友好的可视化接口自动化测试系统就显得必不可少了。那么,我们今天就来和大家聊聊如何实现一个小型的http接口自动化测试系统! 我们拿DOClever 做为这套系统的范本进行阐述,因为它是开源的,源码随时可以从GitHub和OSChina上获取,同时,这套系统内置了完整的自动化测试框架,从无需一行代码的UI测试用例编写,到更强大更灵活的代码模式,都提供了很友好的支持。 系统需求: 1.   能在一个测试用例里可以对一个接口自由编辑其入参,运行并判断出参是否正确,同时可以查看该接口完整的输入输出数据 2.   能在一个测试用例里可以对一组接口进行测试,自由调整他们的执行顺序,并根据上一接口的出参作为下一接口的入参条件。 3.  ...
ansun123 发布于 2天前 阅读 1952 点赞 7

AI领袖、应用指南、窥见风口……你还能从这场全球峰会中获得更多

时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
GAITC

Ubuntu 编译ffmpeg 实现GPU 转码

    前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeg gpu 转码的过程。          该文章后续仍在不断的更新修改中, 请移步到原文地址 https://my.oschina.net/u/2950272/blog 环境: DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS" 注意,这里机器启动级别调低,不要加载桌面系统。 本机是2核4G 普通硬盘,gpu 型号:GTX950M 第一部分,安装cuda 8:     1.1 查看是否有显卡: lspci | grep -i nvidia     1.2 查看操作系统是否cuda 官方支持: uname -m && cat /etc/*release     1.3 安装gcc g++ 等编译依赖基础库 apt-get install gcc g++ build-essential     1.4 下载安装cuda 下载cuda: wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 安装 cuda 源: dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb 添加源: deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / 更新缓存: apt-get update 安装cuda: apt-get i...
鼎铭 发布于 3天前 阅读 1729 评论 23 点赞 4

Docker容器可视化监控中心搭建

一个宿主机上可以运行多个容器化应用,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息,而且这些信息随时间变化,我们称其为时序数据
hansonwang 发布于 4天前 阅读 2700 评论 7 点赞 4

EMQ百万级MQTT消息服务(小技巧)

![](http://i.imgur.com/vhdeDvX.png) 附上: 喵了个咪的博客:[w-blog.cn](w-blog.cn) EMQ官方地址:[http://emqtt.com/](http://emqtt.com/) EMQ中文文档:[http://emqtt.com/docs/v2/guide.html](http://emqtt.com/docs/v2/guide.html) ## 1.ACL鉴权规则化 在正常业务使用下对于客户端的行为可以使用ACL进行限制,比如A客户端只能订阅 /A/get 队列消息和向 /A/set 发布内容 但是在MYSQL里面处理这样的鉴权就需要写入两条记录,如果设备量有一百万数据库就要承担两百万条鉴权数据量会大大影响数据库的性能 那么有没有什么批量的方式来定义ACL鉴权呢? 在mysql-ACL鉴权的配置文件下关于如何使用鉴权的SQL是可以编辑的,也就意味着你可以通过SQL来实现批量ACL鉴权规则 ```bash > vim /usr/local/emqttd/etc/plugins/emq_auth_mysql.conf # 最下面有这样一条配置 auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c' ``` 笔者这里就实现每个设备默认可以订阅 /A/get 队列消息和向 /A/set 发布 ![](http://pic.w-blog.cn/ADE78396-BF03-4672-A3E2-07F04...
喵了_个咪 发布于 6天前 阅读 2092 评论 3

Apache Ignite事务架构:Ignite持久化的事务处理

在本系列[上一篇文章](https://my.oschina.net/liyuj/blog/1791800)中,介绍了故障和恢复,下面是本系列剩下的文章将要讨论的主题: - Ignite持久化的事务处理(WAL、检查点及其他) - 第三方持久化的事务处理 在本文中,会聚焦于Ignite持久化的事务处理。 将[Apache Ignite](https://ignite.apache.org/)作为内存数据网格(IMDG)的都知道,如果整个集群瘫痪,仅仅将数据保存在内存中问题是很严重的,其他的IMDG以及缓存技术也会面临同样的问题。解决这个问题的方案之一就是,将Ignite与第三方的持久化存储集成,然后提供通读和通写能力,如图1所示: ![图1:使用第三方存储进行持久化](https://www.gridgain.com/sites/default/files/inline-images/Figure1_10.png) 但是,这个方法有一些缺陷,在本系列的下一篇文章中会说明。 作为第三方持久化的替代方案,Ignite开发了一个固化内存架构,如图2所示,该架构可以同时在内存和磁盘上进行数据和索引的存储和处理,该特性使用非常简单,使得Ignite集群在数据落盘的前提下,获得内存级的性能: ![图2:固化内存](https://www.gridgain.com/sites/default/files/inline-images/Figure2_9.png) 固化内存的工作方式类似于现代操...
李玉珏 发布于 1周前 阅读 933 点赞 3

架构师眼中的高并发架构

以架构师的眼光来讲述高并发架构
高级架构师 发布于 1周前 阅读 3890 评论 12 点赞 20

有助于提高"锁"性能的几点建议

qq:853089986@qq.com
张泽立 发布于 2周前 阅读 2236 评论 10 点赞 12

如何用Nginx搭建一个安全的、快速的微服务架构

本文改编自Chris Stetson发表在nginx.conf 上的一个有关如今的微服务以及如何使用Nginx构建一个快速的、安全的网络系统的演讲,大家可以在YourTube上回看此次演讲。 自我介绍 Chris Stetson:Hi,我的名字是Chris Stetson,我在Nginx带领专业服务部门,同时也领导微服务实践。 今天我们要谈论微服务以及如何使用Nginx构建一个快速的、安全的网络系统。在我们谈话的最后,我们将与我们在Zokets的合作伙伴向您展示一个使用Fabric模式如何非常快速和轻松地构建一个微服务的demo。 在我们探讨Fabric模式之前,我想谈一谈微服务并且从Nginx的角度来看这意味着什么。 0:56 - 大转变 微服务已经引起了应用程序架构的重大转变。 当我第一次开始构建应用程序时,他们都是差不多的。幻灯片中所展示的单体架构也象征了应用程序的构造方式。 目前存在着某种类型的虚拟机(VM),对我来说,就是通常的Java。在虚拟机中应用的功能组件以对象的形式存在,这些对象是在内存中相互通讯的,它们将来来回回处理并进行方法调用。偶尔,你会采用诸如通知等机制来接触到其他系统以便获取数据或传递信息。 有了微服务之后,应用程序如何构建的范式是完全不同的了。你的功能组件会从在同一个主机的...
烂猪皮 发布于 2周前 阅读 3598 评论 11 点赞 4

List集合就这么简单【源码剖析】

前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识。 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是数组。线程不安全 LinkedList 底层数据结构是链表。线程不安全 Vector 底层数据结构是数组。线程安全 这篇主要来看看它们比较重要的方法是如何实现的,需要注意些什么,最后比较一下哪个时候用哪个~ 看这篇文章之前最好是有点数据结构的基础:Java实现单向链表,栈和队列就是这么简单,二叉树就这么简单         当然了,如果讲得有错的地方还请大家多多包涵并不吝在评论去指正~ 一、ArrayList解析     首先,我们来讲解的是ArrayList集合,它是我们用得非常非常多的一个集合~ 首先,我们来看一下ArrayList的属性:     根据上面我们可以清晰的发现:ArrayList底层其实就是一个数组,ArrayList中有扩容这么一个概念,正因为它扩容,所以它能够实现“动态”增长 1.2构造方法 我们来看看构造方法来印证我们上面说得对不对:     1.3Add方法 add方法可以说是ArrayList比较重要的方法了,我们来总览一下:     1.3.1add(E e) 步骤: 检查是否需要扩容 插入元素 首先,我们来看看这个方法: ...
Java3y 发布于 2周前 阅读 2321 评论 4 点赞 6

约瑟夫环的几种实现方式

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 [1] 结果+1即为原问题的解。
珂jack 发布于 2周前 阅读 2190 评论 18

从linux源码看socket的阻塞和非阻塞

# 从linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。 ## 一个TCP非阻塞client端简单的例子 如果我们要产生一个非阻塞的socket,在C语言中如下代码所示: ``` // 创建socket int sock_fd = socket(AF_INET, SOCK_STREAM, 0); ... // 更改socket为nonblock fcntl(sock_fd, F_SETFL, fdflags | O_NONBLOCK); // connect .... while(1) { int recvlen = recv(sock_fd, recvbuf, RECV_BUF_SIZE) ; ...... } ... ``` 由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。 ### socket的创建 很明显,内核的第一步应该是通过AF\_INET、SOCK\_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: ![inet_family](https://static.oschina.net/uploads/img/201804/08095807_GSaV.png "inet_family") 我们跟踪源码调用 ``` socket(AF_INET, SOCK_STREAM,...
无毁的湖光-Al 发布于 2周前 阅读 3679 评论 12 点赞 7 打赏 1

Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1

Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1
悦动智能 发布于 2周前 阅读 2118 评论 8 点赞 3

深入浅出设计模式——从球赛中悟命令模式

命令模式,顾名思义就是向对象发出命令使其执行指定操作。具体的说就是以命令的形式发出请求交给调用对象,随后调用对象又将命令传送给需要处理这条命令的对象并让目标对象执行该命令。
珂jack 发布于 2周前 阅读 1328 评论 8 点赞 5 打赏 1

Spring整合Quartz分布式调度

前言 为了保证应用的高可用和高并发性,一般都会部署多个节点;对于定时任务,如果每个节点都执行自己的定时任务,一方面耗费了系统资源,另一方面有些任务多次执行,可能引发应用逻辑问题,所以需要一个分布式的调度系统,来协调每个节点执行定时任务。 Spring整合Quartz Quartz是一个成熟的任务调度系统,Spring对Quartz做了兼容,方便开发,下面看看具体如何整合: 1.Maven依赖文件 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.5.RELEASE</version> </dependency> <dependency> <groupId>org.spri...
ksfzhaohui 发布于 2周前 阅读 3844 评论 14 点赞 12

Shell入门看我吧

shell入门的文章,对shell不太熟悉小伙伴可以看看
aron1992 发布于 2周前 阅读 2490 评论 6 点赞 9

MySQL的索引是什么?怎么优化?

索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
我叫刘半仙 发布于 3周前 阅读 5531 评论 14 点赞 40

Session管理之超时设置和强制下线

Session,强制下线
海岸线的曙光 发布于 3周前 阅读 4187 评论 13 点赞 6

简单搭建ngrok服务器,实现内网穿透

快速搭建ngrok服务器,或者直接运行我制作的ngrok服务器的镜像来启动
绝影jy 发布于 3周前 阅读 4537 评论 26 点赞 7 打赏 1

深入浅出设计模式——从球赛中悟代理模式

代理模式提供了通过代理对象访问目标对象的访问方式。
珂jack 发布于 3周前 阅读 1648 评论 8 点赞 5

总结:JDK1.5-JDK1.8各个新特性

引用: 此文章意在借鉴前人经验,留作日后查看。如有侵犯,实属无意。我以后会注意,谢谢博友的提醒。也愿各大博友们能够共同学习和努力。 https://my.oschina.net/91jason/blog/309821
iwen-J 发布于 4周前 阅读 5230 评论 1 点赞 32
顶部