socatch 这个摄像头软件,外出的什么时候try catch用手机连接不上,只有回到家用无线网才可以,这是怎么回事?

What you are wasting today is tomorrow for thos what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。
如何通过简单的tcp / ip连接将数据从进程a发送到进程b?
在许多情况下,使用更高级别的网络协议无疑会做得更好,从而将所有技术细节隐藏在一个奇特的API下面。并且已经有很多可供选择的,取决于需要:消息队列协议,grpc,protobuf,flatbuffers,restful web api,websockets等等。
但是,在某些情况下(特别是在小型项目中),您选择的任何方法可能看起来完全过大。 1.
connections是一个io流 net.Conn实现了 io.Reader, io.Writer, io.Closer接口。 所以我们这是像使用io流一样来使用TCP 链接。 首先我们来看看 Golang源码的 io 包中的这三个类型的定义: type Reader interface {
Read(p []byte) (n int, err error)
type Writer interface {
Write(p []byte) (n int, err error)
type Closer interface {
Close() error
} 再来看看Golang源码中net包Conn 类型的定义: type Conn interface {
Read(b ...
Spring Cloud 项目目前仍然是快速迭代期,版本变化很快。这里整理一下版本相关的东西,备忘一下。 ## 大版本 ### 版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号。 Cloud代号 | Boot版本(train) | Boot版本(tested) | lifecycle ----------|-----------------|-----------------------|----------------- Angle | 1.2.x | incompatible with 1.3 | EOL in July 2017 Brixton | 1.3.x | 1.4.x | 2017-07卒 Camden | 1.4.x | 1.5.x | - Dalston | 1.5.x | not expected 2.x | - Edgware | 1.5.x | not expected 2.x | - Finchley | 2.x | not expected 1.5.x | - 开发代号看似没有什么规律,但实际上首字母是有顺序的,比如:Dalston版本,我们可以简称 D 版本,对应的 Edgware 版本我们可以简称 E 版本。 ### D版本和E版本的区别 二者均基于SpringBoot的1.5.x版本。但支持其他组件的版本不同,如以 Dalston.SR4 和 Edgware.RELEASE 来对比: spring-cloud-config 分别对应 1.3.3和 1.4.0; spring-cloud-netflix 分别对应 1.3.5和 1.4.0; spring-cloud-consul 分别对应 1.2.1和 1.3.0; spring-cloud-gateway 前者不支持,后者 1.0.0。 每个小版本的不...
经常逛 webpack 官网的同学应该会很眼熟上面的图。正如它宣传的一样,webpack 能把左侧各种类型的文件(webpack 把它们叫作「模块」)统一打包为右边被通用浏览器支持的文件。webpack 就像是魔术师的帽子,放进去一条丝巾,变出来一只白鸽。那这个「魔术」的过程是如何实现的呢?今天我们从 webpack 的核心概念之一 —— loader 来寻找答案,并着手实现这个「魔术」。看完本文,你可以: - 知道 webpack loader 的作用和原理。 - 自己开发贴合业务需求的 loader。 ## 什么是 Loader ? 在撸一个 loader 前,我们需要先知道它到底是
目标:通过Docker的方式部署MySql和zipkin,实现zipkin调用mysql 解决方案:让需要链接的容器同属一个外部网络 第一步:定义容器mysql的docker-compose.yml文件,内容如下: version: '2'
image: hub.c.163.com/library/mysql:5.7
container_name: mysql
- /Users/xiewanzhi/mysql_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: testDB
# Port used for the Zipkin UI and HTTP Api
external: true 第二步:定义容器zipkin的docker-compose.yml文件,内容如下: version: '2'
# The zipkin process services the UI, and also exposes a POST endpoint that
# instrumentation can send trace data to. Scribe is disabled by default.
image: openzipkin/zipkin:2.4.4
container_name: zipkin
environment:
- STORAGE_TYPE=mysql
# Point the zipkin at the storage backend
### 一、shopCart组件 #### (1) goods 父组件和 子组件 shopCart 传参 ``` deliveryPrice:{ // 单价 从json seller 对象数据中获取 type:Number, default:0 }, minPrice:{ // 最低起送价 从json seller 对象数据中获取 type:Number, default:20 } ``` ##### 其中 deliveryPrice 和 minPrice 的数据都是从 data.json数据 中 seller 对象下 获得。所以在goods 组件中还要 获取到 seller对象 的数据,否则会报错: ``` [Vue warn]: Error in render: "TypeError: Cannot read property 'deliveryPrice' of undefined" ``` ##### 解决方法:根组件 App.vue 中 router-view 组件获取seller 数据,传到 goods 组件中 ##### 1-1.app.vue (根组件 也是 goods 的父组件) ``` ``` ###### 注意:sellerObj 是data 定义 的 对象里用来接收 data.json 数据,相当于 实参 ##### 1-2.goods.vue (相对于跟组件的子组件 且 shopCart 的父组件) ###### 通过props 属性 进行组件之间的通信 ``` props: { sell: Object // 相当于 形参 }, ``` ##### 1-3.shopCart.vue ( goods 的子组件) ``` ``` #### (2) 选中商品 的 计算功能 ##### 1-1. 传入用户选中商品的集合 ###### 说明:从父组件会 传入...
当前为第一版本,只支持mysql数据库,后面有时间的话会支持Oracle和数据库表的选择
一套完全原创的微信小程序插件集合库
在上文 hue(01)、Hue4.1的编译安装启动 中,我们完整的进行了Hue的源码下载编译安装,Hue的web控制台与Hdfs、Hive、Hbase等集成才能展现它的魅力。本文我们在Hue中集成hadoop的hdfs和yarn服务,然后使用Hue操作和监控hadoop集群。
**撮合平台** 1, 实现买单向卖单或卖单向买的双向撮合。 2, 支持并发撮合。 3, 撮合规则可以自定义添加。 代码已经托管至码云:https://gitee.com/jeffreyning/micro-match **撮合规则管理:** 内置3个撮合规则,金额范围规则(match_rule_amount)、撮合条数规则(match_rule_matchnum)、产品类别对应规则(match_rule_product)。可以自行开发其他规则如借款期限匹配规则、利率范围规则等等。 ![输入图片说明](https://static.oschina.net/uploads/img/11153_vvLR.png "在这里输入图片标题") 通过撮合规则列表页面设置规则实例id和参数。在撮合时可以指定使用哪几个规则实例。 金额范围规则(match_rule_amount)参数是最小金额min和最大金额max 例如{"min":100,"max":1000} 撮合条数规则(match_rule_matchnum)参数是最小条数min和最大条数max 例如{"min":1,"max":3} 产品类别对应规则(match_rule_product)参数是list形式pipeiList,每行参数为买单产品类别buyProduct、买单平台类别buyPlatform、卖单产品类别saleProduct、卖单平台类别salePlatform 例如 {"pipeiList":[{"buyProduct":"jingying","buyPlatform":"p2p","saleProduct":"jingying","sal...
平时直接用springmvc较多,都没怎么接触底层的Servlet,导致对一些基本的知识点了解都不够,所以今天专门的抽出时间来学习一下
《Spring Boot 与 kotlin 实战》之整合MyBatis
# Git 配置多个 SSH key --- ## 实际问题 在日常工作中我们会使用不同的代码平台管理代码。如: - 公司自己搭建的GitLab - GitHub - 码云Gitee ## 生成SSH key 因此我们要配置不同的SSH key对应不同的环境,具体的操作如下: 1、生成公司GitLab SSH key ``` SSH keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "email" ``` 2、生成GitHub SSH key ``` SSH keygen -t rsa -f ~/.ssh/id_rsa.github -C "email" ``` 3、生成码云Gitee SSH key ``` SSH keygen -t rsa -f ~/.ssh/id_rsa.gitee -C "email" ``` 以GitHub为例: `id_rsa.github`就是我们指定的文件名,这时`~/.ssh`目录下会多出`id_rsa.github`和`id_rsa.github.pub`两个文件,`id_rsa.github.pub`里保存的就是我们要使用的SSH key。 ``` $ ls -lh ~/.ssh/ -rw-r--r-- 1 yu Administ 1.6k Nov 27 20:55 id_rsa.github -rw-r--r-- 1 yu Administ 398 Nov 27 20:55 id_rsa.github.pub ``` ## 创建并配置config文件 ``` // 创建config文件 touch ~/.ssh/config // 添加如下配置 # github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa.github # gitee Host gitee.c...
这两年,Kubernetes在企业中的DevOps、微服务领域取得了出色的成绩,从2017年开始,将Kubernetes应用到HPC、AI等领域也成了技术热点。这里我给大家分享一下Kubernetes在AI中的落地经验,内容包括TensorFlow on Kubernetes的架构与实践,以及线上经验和坑。
Java为处理XML文件和结构提供了多种选择,目前应用最为广泛的是JAXB工具库。JAXB代表了Java处理XML文件的事实上标准,它提供了Java对象与XML文本之间互相转换的功能。从JRE6开始,JAXB就已经成为了JRE的内置模块。
1、容器网络基础 作为一个寄宿在宿主主机上的容器,我们要想办法让外部网络能够访问到它,这样才能够使用其提供的服务。当docker启动时,它会在宿主主机上创建一个名为docker0的虚拟网络接口。linux下可以通过:ifconfig命令查看,windods下使用ipconfig查看。 1.1 暴露网络端口 Docker中运行网络应时,要让外部能访问这里需要通过-P或-p参数来指定端口映射。通过端口映射来实现端口暴露是容器对外提供服务的基础方法。 -P(大写):Docker会在宿主主机上随机为应用分配一个内的未被使用的端口,并将其映射到容器开放的网络端口(即通过EXPOSE配置的端口)。 这里以官方的一个培训项目示例: docker run -d -P training/webapp python app.py
使用下面的命令可以查看到运行分配的端口号。
docker ps 上面的32768就是随机分配的端口,每次运行时分配的可能都不一样,5000是容器暴露出来的端口。这样通过http://localhost:32768 就能访问服务了。 -p(小写):它可以指定宿主主机上的端口映射到容器内部指定的开放端口,格式有如下3种: ip:hostPort:containerPort //指定ip和端口与容器开放的端口绑定 docker run -d -p 192.168.0.1: training/webapp pyt...
tio-http-server的请求处理源码解析
每周为您推送最有价值的开源技术内参!
2016年底的时候阿里巴巴公开了其在内部使用的Java编程规范。随后进行了几次版本修订,目前的版本为v1.0.2版。下载地址可以在其官方社区-云栖社区https://yq.aliyun.com/articles/69327找到。 笔者作为一名有数年工作经验的Java程序员,仔细研读了这份手册,觉得其是一份不可多得的好材料。阿里巴巴在发布时所说,“阿里巴巴集团推出的《阿里巴巴Java开发手册(正式版)》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。” 同时,阿里巴巴也期望这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本。 实早在多年前,Google就已经把公司内部采用的所有语言的编码规范(其称为Style Guide)都开源在github上,地址为https://github.com/google/styleguide。在这份清单中,包括了C++、Objective-C、Java、[Python](Python Style Guide)、R、Shell、HTML/CSS、JavaScript、AngularJS、Common Lisp、Vimscript等语言的编程规范。并且Google还发布了一个用于检查样...
背景 想必一大部分同学都实现过Map&V,List&T&&这样的代码吧 确实看起来很多很笨重 最主要这样的代码太多 问题 我们对于这种数据用起来很不爽的是如果我们关注的是T类型但是我们要时刻保持警惕从map中取出List&T& 关注List是否存在 如果存在在list中 add T否则要newArrayList再add T 事实上这种代码太多 如果某次忘记判断就会很容易出现问题 Multimap的出现解决了该问题 Multimap Multimap&TaMemberCardEntityExtendImport, TaMemberCardEntityExtendImport& memberCardMultimap = ArrayListMultimap.create(list.size() / EXPECTED_VALUES_PER_KEY, EXPECTED_VALUES_PER_KEY);
TaMemberCardEntityExtendImport currentTemplate =
for (TaMemberCardEntityExtendImport cardEntity : list) {
cardEntity.setUseType(useType);
if (cardEntity.getDataType() == DATA_TYPE_CARD_TEMPLATE) {
currentTemplate = cardE
} else if (currentTemplate != null) {
//导入时跟开卡一致,将实际金额填入vipMoney
cardEntity.setVipMoney(cardEntity.getRealAmount());
cardEntity.setPrestoreAmount(cardEntity.getRealAmo...
Java并发编程:CountDownLatch
2018全球人工智能技术大会(GAITC)将在5月19日-20日的北京国家会议中心举办,本次大会由中国人工智能学会领衔,李德毅、姚期智等院士担任大会主席,包括微软、京东、搜狗、Skype等企业的众多国际一流人工智能专家也会亲临现场!
摘要: 原创出处 http://www.iocoder.cn/TCC-Transaction/http-sample/ 「芋道源码」欢迎转载,保留摘要,谢谢! **本文主要基于 TCC-Transaction 1.2.3.3 正式版** - [1. 概述](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2. 实体结构](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2.1 商城服务](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2.2 资金服务](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2.3 红包服务](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [3. 服务调用](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4. 下单支付流程](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.1 Try 阶段](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.2 Confirm / Cancel 阶段](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.2.1 Confirm](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.2.2 Cancel](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [666. 彩蛋](http://www.iocoder.cn/TCC-Transaction/http-sample/) ------- !...
Java提供了多种并行方式,用哪个是适合的是很多小伙伴的疑问。这篇文章做了不错的分析。译自 https://blog.takipi.com/forkjoin-framework-vs-parallel-streams-vs-executorservice-the-ultimate-benchmark/
前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方法接收参数 字符串转日期 重定向和转发 返回JSON SpringMVC过滤编码器 在SpringMVC的控制器中,如果没有对编码进行任何的操作,那么获取到的中文数据是乱码!
即使我们在handle()方法中,使用request对象设置编码也不行!原因也非常简单,我们SpringMVC接收参数是通过控制器中的无参构造方法,再经过handle()方法的object对象来得到具体的参数类型的。 Struts2是使用拦截器来自动帮我们完成中文乱码的问题的。那么SpringMVC作为一个更加强大的框架,肯定也有对应的方法来帮我们完成中文乱码问题! 值得注意的是:该过滤编码器只能解决POST的乱码问题! 我们只需要在web.xml配置文件中设置过滤编码器就行了!
&!-- 编码过滤器 --&
&filter-name&CharacterEncodingFilter&/filter-name&
&filter-class&
org.springframework.web.filter.CharacterEncodingFilter
&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&...
1.String(字符串) string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
2.Hash(哈希) Redis hash 是一个键值对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 类似Java里面的Map&String,Object&
3.List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。 它的底层实际是个链表
4.Set(集合) Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,
5.zset(sorted set:有序集合) Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。 redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。...
介绍了一下redis实现分布式锁的注意事项,和简单介绍了redisson的分布式锁
论JDK源码的重要性:一道面试题引发的无限思考!大家在看到这个标题时想的是什么?丫丫为什么要讲这个问题呢? 那我们就看一下这道面试题是什么呢?差不多是这样子的面试题 题目的意思是:定义了两个Integer类型变量,通过swap方法交换这两个变量的值。 看似简单的题目,是不是不知道从何下手,我猜想有些大家第一想到的是这样的解法:来看代码: 运行结果如下: 从结果来看是错误的,不能解决我们的问题。为什么?
在分析之前,我们先介绍一下Java访问对象的方式。在 Java 堆中还必须包含能查找到此对象类型数据(如对象类型、父类、 实现的接口、方法等)的地址信息,这些类型数据则存储在方法区中。 既然java栈中的是对象的引用,那么我们如何使用对象那,主流的访问方式有两种:使用句柄和直接指针。 (1)使用句柄: 如果使用句柄访问方式, Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息,如图:(2)直接指针 如果使用直接指针访问方式, Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息, reference 中直接存储的就是对象地址,如图:这两种对象的访...
1. 简介 示意图 特别注意: 准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。 原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装 流程图 App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作 在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit根据用户的需求对结果进行解析 2. 与其他网络请求开源库对比 除了Retrofit,如今Android中主流的网络请求框架有: Android-Async-Http Volley OkHttp 下面是简单介绍: 网络请求加载 - 介绍 一图让你了解全部的网络请求库和他们之间的区别! 网络请求库 - 对比 附:各个主流网络请求库的Github地址 Android-Async-Http Volley OkHttp Retrofit 3. Retrofit 的具体使用 具体请看我写的文章:这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解) 4. 源码分析 4.1 Retrofit的本质流程 一般从网络通信过程如下图: 网络请求的过程 其实Retrofit的本质和上面是一样的套路 只是Retrofit通过使用大量的设计模式进行功能模块的解耦,使得上面的过程进行得更加简单 & 流畅 如下图:...
这篇文章主要讲解Hikic.js里的懒加载使用方法和探究如何实现 那么首先,我们新建一个html文件,并且写好基本结构: &!DOCTYPE&
&title&关于Hikic.js懒加载的深度剖析&/title&
&meta charset="UTF-8"&
&script src="Hikic.js"&&/script&
&/html& 然后我们在body里面插入许多img标签,向下面一样: &!DOCTYPE&
&title&关于Hikic.js懒加载的深度剖析&/title&
&meta charset="UTF-8"&
&img src="download-1.jpg"&
&img src="download-2.jpg"&
&img src="download-3.jpg"&
&img src="download.jpg"&
&script src="Hikic.js"&&/script&
&/html& 我们用火狐打开看下性能: 大家可以看到,在2000ms的位置性能出现了大幅下降,接下来,我们使用Hikic.js的懒加载来加载它,代码如下: &!DOCTYPE&
&title&关于Hikic.js懒加载的深度剖析&/title&
按照官方的入门手册搭建,会遇到一些坑,现在总结如下 ### 1.用eclipse开发的话,需要安装插件sts。 可以在软件市场中搜索下载。安装完,选择main类,右键会有 run as --》spring boot app ### 2.异常:This application has no explicit mapping for /error, so you are seeing this as a fallback. 原因是【Application启动类放的位置不对】要将Application放在最外层,也就是要包含所有子包。 比如你的groupId是com.google,子包就是所谓的com.google.xxx,所以要将Application放在com.google包下。 请参考以下结论:spring-boot会自动加载启动类所在包下及其子包下的所有组件. ### 3.eclipse run as(或者debug as)后,javaw进程会在后台,不会自动结束。 需要在下次调试前,手动kill javaw.exe 进程。 参考: https://gitee.com/didispace/SpringBoot-Learning...
Health Check强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性。
文章出处:俊世太保 中国有句俗话,在这里说出来,可能大家不爱听。那就是人分三六九等?其实笔者不太认可这个陈旧的观点。毕竟现在是21世纪,社会上的任何工种都应得到足够的尊重。可话又说回来,理想很丰满,现实很骨感。为什么大家都是工作8小时,有的只是拿到月薪3千,而有的人则轻松上万?按照这个逻辑,我们用到现在这些互联网身上,比如第一梯队的BATJ,而第二梯队的大致是今日头条、滴滴出行与美团这样的公司。 而今天,有一则头条员工怒怼阿里员工的新闻在网络上引发了热议。 我们从上图发现,这好像阿里巴巴准备挖一个头条的在职员工,大家都知道阿里巴巴是划分等级的。头条的小伙伴前往阿里巴巴面试,阿里巴巴的主考官是P7级别,这个级别属于中上了,再往上是P8与P9,可头条员工感觉在阿里巴巴受到了侮辱。面试官遇到别人研究比他深刻的就匆匆略过,反倒是坚信自己擅长的一部分才是真正所谓的技术。头条员工感受自己没有得到足够的尊重。 而我们看到,百度和蚂蚁金服,还有阿里巴巴集团与网易的员工都来看热闹。百度员工说到:面试是需要实力与一定的运气的。这次面试不上,也许是受到了面试官的刁难,但如果换了一个面试官,还是面试不上的话, 那肯定得在自己...
随着深度学习的火热发展,各类芯片陆续出现在人们的视野中,例如GPU, TPU, DPU, NPU, BPU……,那这些分别是什么?它们与CPU又是什么关系呢?下面来小白一下 首先介绍一下这些词的英文全称: CPU全称:Central Processing Unit, 中央处理器; GPU全称:Graphics Processing Unit, 图像处理器; TPU全称:Tensor Processing Unit, 张量处理器; DPU全称:Deep learning Processing Unit, 深度学习处理器; NPU全称:Neural network Processing Unit, 神经网络处理器; BPU全称:Brain Processing Unit, 大脑处理器。 下面就来科普一下这些所谓的“XPU” 1、CPU CPU( Central Processing Unit, 中央处理器)就是机器的“大脑”, 主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)、寄存器(Register)、高速缓存器(Cache)和它们之间通讯的数据、控制及状态的总线。由计算单元、控制单元和存储单元三大部分组成。如下图所示 2、GPU 为了解决CPU在大规模并行运算中遇到的困难、提升速度,GPU应运而生,采用数量众多的计算单元和超长的流水线。 关于GPU,先中提到的一个生物概念——并行计算。并行计算(Parallel Computing)是指同时使用多种计算...
内存分析(in-memory analytics)是我们编写速度快、效率高的代码必不可少的知识。如果自己编写的代码在内存的分配一无所知,我想这样的程序让你去优化,应该是无从下手的。那么内存分析是什么?是指当数据存放在计算机的随机存取存储器(RAM)中时查询数据的方式,和存储在物理磁盘中的数据的查询方式相反。随着RAM成本的下降,内存分析对很多业务都变得可行。   Android的一些内存知识   垃圾回收(GC)   垃圾回收包含两个过程:    1)判定阶段,也就是判断哪些对象可以被回收,    2)收集阶段,是指具体的回收策略。   判定阶段主要有两种方式    1)引用计数,对象每多一个引用计数加1,少一个引用计数减1,计数为0时就表示这个对象可以被回收了。但是引用计数有个缺点,不能判断循环应用的情况,所以就有了下面的方式    2)根搜索,从一些根对象(GCRoot)开始遍历搜索,如果一个对象无法被搜索到,说明这个对象可以被回收了。   可以作为GCRoot的对象:   1 一些虚拟机栈中的对象;2 方法区中的类静态属性对象;3 方法区中的常量对象;4 Native栈中JNI的引用对象   收集阶段主要有四种方式   1)标记清除,最简单的算法,讲标记好的对象直接清除,速...
物理服务器搬迁之后,找不到pvs,vg , 这时候需要先运行命令 /opt/DynamicLinkManager/bin/dlmstart
然后把vg激活 vgchange -a y vgxxx 就可以出现VG 了
原文地址:https://mp.weixin.qq.com/s/QIqGGFJd8bcrHfJoSiwViA XSS攻击 XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),它指的是攻击者在网页中嵌入恶意脚本程序, 当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie、 盗取用户名密码、下载执行病毒木马程序等等。 为了不和层叠样式表 (Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 XSS的防御 我们需要对用户输入的数据进行HTML转义处理。
如今很多开源的开发框架本身默认就提供HTML代码转义的功能,如流行的jstl、Struts等等,不需要开发人员再进行过多的开发。使用jstl标签进行HTML转义,将变量输出。 CSRF攻击 CSRF攻击的全称是跨站请求伪造(cross site request forgery), 是一种对网站的恶意利用。 攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等等,甚至盗取你的账号。 尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。 CSRF的防御 cookie设置为HttpOnly、增加token...
交换排序,快排
最近跟风,和同事一起组团买了个腾讯云,拿来练练手,本文将简单介绍腾讯云(CentOS 7.0+)+nginx+mariadb+nodejs的环境配置
Nginx防盗链 vim /usr/local/nginx/conf/vhost/test.conf /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload curl -e "http://www.baidu.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif curl -e "http://www.test.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif Nginx访问控制 vim /usr/local/nginx/conf/vhost/test.conf /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload 访问测试 访问测试 vim /usr/local/nginx/conf/vhost/test.conf /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload 访问测试 访问测试 vim /usr/local/nginx/conf/vhost/test.conf /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload 访问测试 Nginx解析php相关配置
命令:mysql& 或者
# mysqladmin -uroot -p密码 processlist
如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。只列出前100条,如果想全列出请使用s mysql& 命令: 或者 # mysqladmin -uroot -p密码 status Aborted_clients
由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 Aborted_connects
尝试已经失败的MySQL服务器的连接的次数。 Connections
试图连接MySQL服务器的次数。 Created_tmp_tables
当执行语句时,已经被创造了的隐含临时表的数量。 Delayed_insert_threads
正在使用的延迟插入处理器线程的数量。 Delayed_writes
用INSERT DELAYED写入的行数。 Delayed_errors
用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 Flush_commands
执行FLUSH命令的次数。 Handler_delete...
### inotifywait 是一个可以实时监控文件变动的工具,它利用linux内核中的inotify机制实现监控功能。 查看内核版本 & [root[@Oracle](https://my.oschina.net/oracle) ~]# uname -r & 2.6.32-220.el6.i686 & & 安装inotify-tools & yum install -y inotify-tools & 测试监控/etc,inotifywait -m /etc & 或监控文件 inotifywait -m /etc/xxx.logs ``` ### inotifywait 命令参数说明: -m 选项表示 monitor ,即开启监视 -r 选项表示递归监视,但是会比较慢一些,若监视/etc 目录,其中的子目录下修改文件也是能被监控到。 -e 选项指定要监控的“事件”(events)包括了:access、modify、 attrib、 close_write、 close_nowrite、close、open、 moved_to、 moved_from、move、 move_self、 create、delete、delete_self、unmount。 如果修改了/etc/passwd文件,则把这个事件记录在文件/root/modify_passwd.txt里 inotifywait -m /etc/passwd -e modify & /root/modify_passwd.txt 如果不加参数-e的话,默认就是监控所有的事件,在日常运维时,这个工具可以帮助你监控服务器上重要文件和重要目录的变化情况。 ``` 示例: ``` inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --...
你真的是一个Kotlin开发者吗?
详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
  社区中并不缺少有关软件工程师职业发展的文章,甚至可以说是泛滥。很多人都能在这个话题上说两句,三五年工作经验的编程老鸟也好,架构师也好,技术 VP 也好,CTO 也好,都有各自的看法与实践经验。没有哪一套方法是适用于所有人的,这一套软件工程师职业发展纲要,也不过是在你踽踽前行的路上,迷茫时可用来参考借鉴。你的核心竞争力,永远是你的自身实力。切记! 一、专业技能学习捷径 1、爱上你的编码神器   众所周知,软件工程师要做的工作就是写代码,准确地说,你的目标应该是写出满足业务需求并且无法找出 Bug 的代码,而不是写一大堆没用的文字。既然你的任务是写出高质量的代码,那么你首先应该训练的就是打字速度,你需要掌握键盘盲打技能,甚至还要爱上你的“编码神器”,并做到将此工具的用法烂熟于心,闭上眼睛都能正确敲中你想要的快捷键。 2、熟悉底层技术原理   当你完全驾驭了计算机的输入设备以后,你需要进一步了解计算机的内部工作原理,不是让你把机器大卸八块,而是你需要全面了解计算机的组成结构与工作原理。如果你不是计算机科班出生也没关系,在网上买一本关于计算机组成原理的书自学即可。你无需做到精通,能全面了解即可,因为接下来你...
每周为您推送最有价值的开源技术内参!
# 环境要求 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窗口,查看具体错误内容,直到无错误为...
最近使用`consul`作为项目的服务注册与服务发现的基础功能。在塔建集群使用中遇到一些坑,下面一个个的记录下来。 ## consul集群多node consul集群的node也就是我们所说的consul实例。集群由多个node组成,为了集群的可用性,需要超过半数的node启用server。如5个node中起码3个启用server模式,3个node组成的集群就2个node启用server模式。 看到这里的时候你一定觉得没有什么问题呀,但是consul坑就是多。加入你的集群组成如下: ``` Node Address Status Type Build Protocol DC Segment BJ-MQTEST-01 10.163.145.117:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-MQTEST-02 10.163.147.47:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-TGO-01 10.163.145.110:8301 alive client 1.0.6 2 iget-topology-aliyun ``` 那么client可以使用上述的3个ip连接到consul集群,假设client A使用使用10.163.145.117注册了service,重启后使用地址10.163.145.110注册之前的service信息,此时你就会惊喜的发现,UI可以同时看到在同一个servicename下存在两个相同的serviceid。 这就是consul集群多node的坑,因为service底层虽然使用了KV存储,但是service的KEY与serviceid...
### 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...
### 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' ] }...
## 更新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/15_added_entity_Overview.xml 将 changeSet中新增的三个column提取至新的changeSet中, 如下: 注意: changeSet的id不能与之前的相同 ``` ###### 4. 运行项目使配置生效 ``` 不需要手动修改MySQL,自动生效 ```...
### 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"中每条日志形式如:" | 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]...
### 写在开头 ``` 使用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 = } public Set getManys() { } } @Entity @Table(name = "many") public class Many { ... @ManyToOne private O } ``` ### 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...
# 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...
如何快速申请免费的阿里云服务器
### 新增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"} } ```...
### 需求 ``` 对MySQL数据库中某个表的某个字段执行k-means算法,将处理后的数据写入新表中。 ``` ### 源码及驱动 ``` http://download.csdn.net/download/xiaobuding007/ ``` ### 源码 ```java import java.sql.*; import java.util.*; /** * @author tianshl * @version
上午11:13 */ public class Kmeans { // 源数据 private List origins = new ArrayList&&(); // 分组数据 private Map& // 初始质心列表 private L // 数据源 private String tableN private String colN /** * 构造方法 * * @param tableName 源数据表名称 * @param colName 源数据列名称 * @param cores 质心列表 */ private Kmeans(String tableName, String colName,List cores){ this.cores = this.tableName = tableN this.colName = colN } /** * 重新计算质心 * * @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 newC } /...
最近在学习Spring boot,写了个读写分离。并未照搬网文,而是独立思考后的成果,写完以后发现从零开始写读写分离并不难! 我最初的想法是: 读方法走读库,写方法走写库(一般是主库),保证在Spring提交事务之前确定数据源.
保证在Spring提交事务之前确定数据源,这个简单,利用AOP写个切换数据源的切面,让他的优先级高于Spring事务切面的优先级。至于读,写方法的区分可以用2个注解。 但是如何切换数据库呢? 我完全不知道!多年经验告诉我 当完全不了解一个技术时,先搜索学习必要知识,之后再动手尝试。
我搜索了一些网文,发现都提到了一个AbstractRoutingDataSource类。查看源码注释如下 /** Abstract {@link javax.sql.DataSource} implementation that routes {@link #getConnection()}
* calls to one of various target DataSources based on a lookup key. The latter is usually
* (but not necessarily) determined through some thread-...
转转作为国内领先的二手电商交易平台,全平台交易额较2016年增幅超过200%达到210.64亿元,同时平台交易订单量达5698万,同比2016年增长了269.76%,欢迎对技术执着、对电商有兴趣的同学加入转转,一起探索技术和商业的边界。现诚招各类工程师,欢迎各位同学推荐或者投递简历。 环境福利: 季度奖、年终奖、六险一金、氛围活跃、业务高速增长 办公地址: 北京海淀区西小口路东升科技园b-2楼6层(地铁 8 号线西小口C口出) 投递邮箱: decli#qq.com(请将 # 改成 @) ★★★★★ 部门负责人直招,最快半天面完所有流程。 ★★★★★ 欢迎各位同学自荐或者推荐加入转转,简历符合要求第一时间通知面试。
1、高级大数据 BI 开发工程师【20k-40k/月】 【1、岗位职责】 1、基于海量日志及 hadoop 生态圈相关组件,开发大数据分析平台的后台服务,支持部门的数据接入、落地,统计、分析业务; 2、构建基于spark/storm的实时数据处理平台,支撑上层业务使用,如:数据监控、日报展现、统计分析、接口调用等; 3、负责数据仓库及数据体系化建设,构建敏捷BI平台,快速支持产品运营统计分析需求,释放rd人力; 4、高并发、海量数据场景下的数据接入基础服务、工具研发。 【2、任职...
前言 前面已经学习了Struts2和Hibernate框架了。接下来学习的是Spring框架...本博文主要是引入Spring框架... Spring介绍 Spring诞生: 创建Spring的目的就是用来替代更加重量级的的企业级Java技术 简化Java的开发 基于POJO轻量级和最小侵入式开发 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板**减少样板式代码 ** 侵入式概念 Spring是一种非侵入式的框架... 侵入式 对于EJB、Struts2等一些传统的框架,通常是要实现特定的接口,继承特定的类才能增强功能 改变了java类的结构 非侵入式 对于Hibernate、Spring等框架,对现有的类结构没有影响,就能够增强JavaBean的功能 松耦合 前面我们在写程序的时候,都是面向接口编程,通过DaoFactroy等方法来实现松耦合
private CategoryDao categoryDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.CategoryDAOImpl", CategoryDao.class);
private BookDao bookDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.BookDaoImpl", BookDao.class);
private UserDao userDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.UserDaoImp...
面向各部门组织的技术分享活动,一起探讨、学习,愿能有所得。
Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户 调用Web服务来检索数据 响应事件或错误 使用发布-订阅模式来提供内容或基于主题的消息路由 AMQP是Advanced Message Queuing Protocol的简称,它是一个面向消息中间件的开放式标准应用层协议。AMQP定义了这些特性: 消息方向 消息队列 消息路由(包括:点到点和发布-订阅模式) 可靠性 安全性 RabbitMQ 本文要介绍的RabbitMQ就是以AMQP协议实现的一种中间件产品,它可以支持多种操作系统,多种编程语言,几乎可以覆盖所有主流的企业级技术平台。 安装 在RabbitMQ官网的下载页面https://www.rabbitmq.com/download.html中,我们可以获取到针对各种不同操作系统的安装包和说明文档。这里,我们将对几个常用的平台一一说明。 下面我们采用的Erlang和RabbitMQ Server版本说明: Erlang/OTP 19.1 RabbitMQ Server 3.6.5 Windows安装 安装Erland,通过官方下载页面http://www.erlang.org/downloads获取exe安装包...
# 准备阶段 ## 下载 Flutter SDK 新建 Flutter 文件夹,克隆 Flutter SDK: ```bash git clone -b beta https://github.com/flutter/flutter.git ``` ## 配置 Flutter 环境 我是 Mac 系统,Flutter SDK 下载完后的路径:Users/wuxiaolong/Flutter/flutter/ 。 ### 在命令行下,进入用户目录 ```bash cd $HOME ``` ### 打开.bash_profile文件 执行命令打开文件: ```bash open -e .bash_profile ``` 打开文件后,添加 Flutter SDK 安装的路径: ```bash export PATH=${PATH}:/Users/wuxiaolong/Flutter/flutter/bin:$PATH ``` ### 更新刚配置的环境变量 ```bash source .bash_profile ``` ### 验证 终端直接输入 flutter,没有提示该命令找不到,则配置成功。 ## flutter doctor 命令行输入`flutter doctor`,安装 Futter 剩余依赖项。 ## 安装 Flutter 和 Dart 插件 启动 Android Studio,搜索 Flutter 插件并单击 install,系统提示您安装 Dart 插件,点击 Yes 安装即可。 **提示**:安装 Dart 插件可能会提示下载失败,多试几次。 ## 第一个项目 Android Studio - File - New - New Flutter Project,等待创建成功后,运行效果如下: ![](http://7q5c2h.com1.z0.glb.clou...
详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
大多数的开发者大多数的系统可能从来没接触过分布式系统,也根本没必要进行分布式系统架构,为什么?因为在访问量或者QPS没有达到单台机器的性能瓶颈的时候,根本没必要进行分布式架构。那如果业务量上来了,一般会怎么解决呢? 首先考虑的就是机器升级。机器配置的垂直扩展,首先要找到当前性能的瓶颈点,是CPU,是内存,是硬盘,还是带宽。砸钱加CPU,砸钱换SSD硬盘,砸钱换1T内存,这通常是解决问题最直接也最高效的方法。带宽不够?加带宽,1G不够用100G。CPU 8核不够?搞32核96核。这是绝大多数公司能思考到的第一个方案,也是最高效最快最安全的方法,立竿见影。 其次就是系统拆分,将所提供服务的主流程以及支线流程梳理出来,按照流程进行系统拆分。如同一棵树,核心业务作为主干流程,其他系统按照需要进行拆分,如同树的开枝散叶。所采取的方式有这么一些,按前后端进行拆分,按照领域拆分,按团队拆分,当然通常来说这些拆分基本都要跟着组织架构走。 再不行就进行技术升级,更换更加高效或者场景适合的技术。比如从 Oracle 更换到HBase。从A数据库连接池更换到B数据库连接池。技术的变革对于业务量的支持也是非常巨大的,同一台机器不同的技术,效能发挥的程度...
Spark分为两大块:1基于hive的sql操作,2基于mllib的机器学习模型
1.Spark On Hive:在R下通过sql命令可完美支持对hive的增删改查; 2.MLLib的机器学习模型:分为普通机器学习模型和RDD版的机器学习模型,由于Spark目前将逐渐淘汰掉RDD版的API,所以这里不再包含RDD版的API: 1.基本数据统计:无R版,大概是R通过summary等基本命令即可完成; 2.ML Pipelines(数据管道):无R版,大概是R本身就有DataFrame和Data.Table等,可以直接进行数据治理; 3.数据抽取、变换、特征选择:无R版,同上 4.分类和回归: a.逻辑回归:spark.logit b.决策树分类器:无R版,原因不明 c.随机森林分类器:spark.randomForest d.梯度提升树分类器:spark.gbt e.多层感知器分类器:spark.mlp f.支持向量机:spark.svmLinear g.一对多分类器(One-vs-All):无R版,原因不明 h.朴素贝叶斯:spark.naiveBayes i.线性回归:R只有一个广义线性回归的API: spark.glm j.决策树回归:无R版,原因不明 k.随机森林回归:spark.randomForest 参数为regression即可 l.梯度提升树回归:同上 m.生存回归(survival regression):spark.survreg 生存分析:通过研究个体间的相似性,预测个体的生存时间,主...
我踩过的坑,你可别再踩了~
消息中间件的定义: 没有标准定义,一般认为,采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成
为什么要用消息中间件? 解决分布式系统之间消息的传递。 电商场景:用户下单减库存,调用物流系统,系统扩充后服务化和业务拆分。系统交互,一般用RPC(远程过程调用)。如果系统扩充到有几十个接口,消息中间件来解决问题。
和RPC有何区别? 使用区分标准:1、系统之间的依赖程度
2、量(业务量,数据量,访问量)
消息中间件有些什么使用场景? 1、 异步处理 用户注册(50ms),还需发送邮件(50ms)和手机信息(50ms) 串行(150ms)用户注册—》发送邮件----》发送手机信息 并行(100ms):用户注册—》发送邮件|----》发送手机信息 消息中间件(56ms):用户注册(50ms)—》(6ms)消息中间件《-----发送邮件《-----发送手机信息 2、 应用的解耦 订单系统---》库存系统(强耦合) 消息中间件:订单系统---》消息中间件《----库存系统(解耦) 3、 流量的削峰 用户请求-----》秒杀应用 应用的前端加入消息队列 用户请求-----》消息队列《----秒杀应用 4、 日志处理 错误日志---》消息队列《----日志处理 用户行为日志--》消...
# 1.IE浏览器访问QC报qcbin/setup_a.cab this file didn't pass signature checking ``` Internet选项--& 高级 --& 去掉 "对证书地址不匹配发出警告"和"检查发行商证书是否吊销" 的勾 ```
三月: 3.1: a.关注区块链源码探秘,https://zhuanlan.zhihu.com/c_
b.btcoin github: https://github.com/bitcoin/bitcoin 3.2: 智能合约,https://github.com/EthFans/wiki/wiki/智能合约 3.3: 写入文件到hdfs,ant/tree/master/script/pywebhdfs 3.7: Pyrasite调试进程内存泄露问题; 3.12: pytest、parametrize:https://docs.pytest.org/en/latest/parametrize.html
Powershell实现远程唤醒,远程唤醒需要被唤醒的电脑支持远程唤醒,需要关闭电脑的睡眠、支持远程唤醒,可通过BIOS设置。 远程唤醒时向网络中发送UDP的数据包,数据包前两个字节为0xFF,后面紧接着是被唤醒设备的MAC地址重复16遍,整个包的长度是102个字节 具体的Powershell脚本如下 param($Mac)
echo “Wake up $Mac ”
$byteArray =[Byte[]](,0x00*102)
for($i=0;$i -lt 6; ++$i)
$byteArray[$i]=0xFF
$mac= $Mac.split('-')|foreach{('0x'+$_)}
for($i=1;$i -le 16; ++$i)
for($j=0;$j -lt 6;++$j)
$byteArray[$i*6+$j]=$mac[$j]
$UdpClient = New-Object System.Net.Sockets.UdpClient
$UdpClient.Connect(([System.Net.IPAddress]::Broadcast) ,9)
$UdpClient.Send($byteArray,$byteArray.length)
下载链接: https://downloads.mongodb.com/win32/mongodb-win32-x86_64-enterprise-windows-64-3.6.3-signed.msi?_ga=2.0943554
添加到服务: 进入安装路径:C:\Program Files\MongoDB\Server\3.6\bin 执行:
.\mongod.exe --logpath "C:\Program Files\MongoDB\Server\3.6\data\logs\mongod b.log" --logappend --dbpath "C:\Program Files\MongoDB\Server\3.6\data\db" --directoryperdb --serviceName MongoDB
-install --auth 启动服务 net start MongoDB
如果出现报错: 发生服务特定错误: 100 请删除data\db\mongod.lock 如果不行可考虑删除整个db目录,前提是没有数据...
# 声音的作用和功能 姜安庆 ## 概述 在日常生活中,会被碰各种场合需要,或者拍摄自己的记录片与,画面与声音是其中两大类艺术元素,声音开不到也摸不到,但是能够极大增强观者感受 * 塑造空间感 声音能够携带方向性信息,在空间内容,有一部分声音会直接进入耳朵,形成所谓的直达声。直达声能够让人产生声音的定位感觉。除了直达声之外,还有一部分声音通过墙壁、地板、家具等反射形成反射声。xxx的反射声会形成混响。而混响能够影响人对声音空间感觉的认知。所以我们可以利用声音获取空间感。举例:电影《霸王别姬》片段。 * 产生沉浸感 在无声电影时代,由于电影声音技术的局限,早期电影是有影像而没有声音和声效的。影片只对观众的视觉产生单一的刺激。观众对影片的感知是不完整的。为了解决这一局限,无声电影多采用单画面的字幕,来表现重要的对白和音效,所以也被称为默片。有些院线在放映时,会由音乐家根据剧情的发展进行即兴伴奏。随着有声电影的出现,影片中的画面和声音开始结合。可以同时刺激观众的感官神经。让人产生复杂多变的真实感受,得到更丰富的体验。现代视频作品是影像+声音的艺术。有各种声音元素的加入,并对其进行精巧的编排,可以丰富视听感受。...
1 containing block(包含块) 1.1 什么是包含块 简单来说,包含块就是“包含自己的那块元素”,元素的“包含块”决定了元素的大小和定位。 “包含块”是一个相对的概念,并不是说父级元素就是包含块。比如说,绝对布局中,父级元素是position:,子级元素是position:,那么此时父级元素是子级元素的包含块,自己元素的大小和定位由父级元素决定;但positioin:fixed固定定位元素的包含块是浏览器窗口。 1.2 包含块的判断以及范围 根元素的包含块 &html&根元素是页面最顶端的元素,它没有父元素,但也有包含块,叫做“初始包含块initial containing block”。 固定元素的包含块 如果元素是固定定位position:fixed,那么它的包含块是当前的可视窗口(即当前浏览器窗口)。 静态/相对定位元素的包含块 如果元素是静态或相对定位position:static/relative,那它的包含块是最近的块级(display:block、display:inline-block、display:table-cell)祖先元素。 绝对定位元素的包含块 如果元素是绝对定位position:absolute,那么它的包含块是最近的position属性值为非static的祖先元素,该祖先元素可以是块元素也可以是行内元素。 如果元素找不到position属性值为非s...
最近使用`consul`作为项目的服务注册与服务发现的基础功能。在塔建集群使用中遇到一些坑,下面一个个的记录下来。 ## consul集群多node consul集群的node也就是我们所说的consul实例。集群由多个node组成,为了集群的可用性,需要超过半数的node启用server。如5个node中起码3个启用server模式,3个node组成的集群就2个node启用server模式。 看到这里的时候你一定觉得没有什么问题呀,但是consul坑就是多。加入你的集群组成如下: ``` Node Address Status Type Build Protocol DC Segment BJ-MQTEST-01 10.163.145.117:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-MQTEST-02 10.163.147.47:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-TGO-01 10.163.145.110:8301 alive client 1.0.6 2 iget-topology-aliyun ``` 那么client可以使用上述的3个ip连接到consul集群,假设client A使用使用10.163.145.117注册了service,重启后使用地址10.163.145.110注册之前的service信息,此时你就会惊喜的发现,UI可以同时看到在同一个servicename下存在两个相同的serviceid。 这就是consul集群多node的坑,因为service底层虽然使用了KV存储,但是service的KEY与serviceid...
目前接触过两款比较优秀的IDE,atom和sublime text 3,自己都装了emmet插件,使用emmet也有段时间了,但官方文档还没看过。今天忽然想起来看看,才发现被墙了(╬◣д◢)!
好吧,在不借助梯子的情况下还是找到了文档(http://yanxyz.github.io/emmet-docs/abbreviations/syntax/),详细缩写文档(http://yanxyz.github.io/emmet-docs/cheat-sheet/)。
今天在atom上使用时遇到一个问题,a标签按tab键无法正常扩展,Ctrl + e 可以,修改emmet默认展开快捷键为tab即可。
一、NIO的出现 NIO是JDK1.4里面才出现的东东,他给大家带来的最大好处是异步socket。其它file,pipe暂时就不多谈了。 在JDK1.4出现之前,如果你需要编写一个Java服务器,为了实现异步操作,你必须为每个连接请求生成一个Java线程,当连接请求很多时,线程的调度,上下文切换,所付出的代价是非常昂贵,而且由于Java是跨平台的,各个平台对线程的支持并不相同,性能也不相同,因此传统的Java服务器编程架构是低效的且代价贵,dl大侠写了个util.concurrent包后,总算是减轻了线程调度给java程序员带来的痛苦,但是相比之与C、C++写出来的服务器,java服务器在性能要求很高的情况下,基本上没有什么竞争力,甚至是入围的权利的都没有。 二、异步socket的实现 NIO出现后,好像让java的程序员有了杨眉吐气的机会,怎么个吐气法,当时大家是个什么感受,俺是不知道,因为当时俺不搞java,对java的认识有限。 NIO是一个基于事件的IO架构,最基本的思想就是:有事件我通知你,你再去做你的事情,没事件时你大可以节约大把时间去做其它任何事情。而且NIO的主线程only one,不像传统的模型,需要N个线程去,也减轻了JVM的工作量,使得JVM处理任务时显得更加高效。 刚开始接触NIO时,...
#### 初始环境 centos7 postgresql9.4 #### psql升级 根据官网:https://www.postgresql.org/download/linux/redhat/ 1. Install the repository RPM: ``` yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm ``` 2. Install the client packages ``` yum install postgresql96 ``` 3. Optionally install the server packages: ``` yum install postgresql96-server ``` #### pg_pathman安装 1. 获取源代码 ``` git clone https://github.com/postgrespro/pg_pathman ``` 2. root下编译 ``` make USE_PGXS=1 make USE_PGXS ``` 如果报错pg_config不存在,则安装pg_cofig ``` yum install postgresql96-devel ``` 3. make成功后修改postgresql.conf ``` 打开postgresql.conf:将shared_preload_libraries配置改为如下 shared_preload_libraries = 'pg_pathman' ``` 4. 重启psql #### 附: 1. 增加用户 ``` create user xxx ``` 2. 修改用户密码 ``` alter user xxx with password 'xxx'; ``` 3. 执行分表 ``` CREATE EXTENSION pg_pathman; SELECT create_hash_partitions('bbs_reply', 'thread_id', ...
本文为 TiDB 源码阅读系列文章的第四篇。上一篇文章简单介绍了整体流程,无论什么语句,大体上是在这个框架下运行,DDL 语句也不例外。 本篇文章会以 Insert 语句为例进行讲解,帮助读者理解前一篇文章,下一篇文章会介绍 Select 语句的执行流程。这两条是最常用的读、写语句,其他的语句相信读者能触类旁通,可以自行研究或者是等待后续的文章。对于这两类语句,目前也只会针对核心流程进行说明,更复杂的 Join、Insert-Into-OnDuplicate-Update 等会等到后面的文章进行讲解。另外本文会重点介绍每个语句在执行框架下面的具体执行逻辑,请读者阅读前先了解 Insert 语句的行为。 ## 表结构 这里先给一个表结构,下面介绍的 SQL 语句都是在这个表上的操作。 ```sql CREATE TABLE t { id VARCHAR(31), name VARCHAR(50), age int, key id_idx (id) }; ``` ## Insert 语句 `INSERT INTO t VALUES ("pingcap001", "pingcap", 3);` 以这条语句为例,解释 Insert 是如何运行的。 ## 语句处理流程 首先大家回忆一下上一篇文章介绍的框架,一条 SQL 语句经过协议层、Parser、Plan、Executor 这样几个模块处理后,变成可执行的结构,再通过 Next() 来驱动语句的真正执行。对于框架,...
spring3引入了 mvc XML 配置命名空间, 简化了在 web 应用程序中设置 Spring mvc 的过程。
1、mvc:annotation-driven
&mvc:annotation-driven /& 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。&mvc:annotation-driven /& 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。 &mvc:annotation-driven &&/mvc:annotation-driven&相当于如下配置。 &!--
&mvc:annotation-driven &&/mvc:annotation-driven&
&!-- 上面的标签相当于 如下配置--&
&!-- Begin --&
&!-- HandlerMapping --&
&bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping "&&/bean&
&bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"&&/bean&
&!-- HandlerAdapter...
1.nohup 用途:不挂断地运行命令。 语法:nohup Command [ Arg … ] [ & ]   无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。   如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。   如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。 退出状态:该命令返回下列出口值:      126 可以查找但不能调用 Command 参数指定的命令。      127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。      否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。 2.& 用途:在后台运行 一般两个一起用 nohup command & eg: 1 nohup /usr/local/node/bin/node /www/im/chat.js && /usr/local/node/output.log 2&&1 & 进程号7585 查看运行的后台进程 (1)jobs -l jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令) (2)ps -ef
1 ps -aux|grep chat.js a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分 注:   用ps -def | grep查找进程很方...
一、环境介绍: 1、操作系统:
3.10.0-693.el7.x86_64 2、主机名
node1 192.168.5.251
node2 192.168.5.252
node3 192.168.5.253
二:配置基础环境 1、配置node3结点与其他结点互信
[root@node3 ~]# ssh-keyge
[root@node3 ~]# ssh-copy-id node1
[root@node3 ~]# ssh-copy-id node2
2、下载网盘的离线包,解压后复制到所有结点
链接: https://pan.baidu.com/s/1QzA7d86XgNamMR80aTrY9g 密码: ovar
3、安装docker软件包(所有结点)
https://yq.aliyun.com/articles/110806
4、系统路由参数,防止kubeadm报路由警告(所有结点)
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
" && /etc/sysctl.conf
5、导入docker镜像(所有结点)
[root@node3 k8s]# cd /root/k8s/
[root@node3 k8s]# find . -name "*.tar" -exec docker image load -i {} \;
6、安装RPM包(所有结点)
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm
kubelet-1.9.9-9.x86_64.rpm
kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubectl-1.9.0-0.x8...
4MLinux 是一份迷你 Linux 发行,它聚焦在四种功能上:系统维护(可用作一张系统应急修复用的自启动运行光盘),多媒体(能播放视频 DVD 及其他多媒体文件),微型服务器(使用 inetd 后台程序),神秘感(提供几个 Linux 小游戏)。 4MLinux 24.0 稳定版已正式发布,可在桌面和服务器中使用。据发布主页显示,该版本主要是对部分软件进行了升级,如: ·LibreOffice 6.0.0.1 ·GNOME Office (AbiWord 3.0.2, GIMP 2.8.22, Gnumeric 1.12.38) ·DropBox 43.4.49 ·Firefox 58.0.2 ·Chromium 64.0. ·Thunderbird 52.6.0 ·VLC 3.0.0 ·Mesa 17.1.4 ·Wine 3.1 ·…… 此外,还改进了对其他硬件设备的支持: ·添加对平板设备的支持(通过 kernel 和 X.Org 服务器) ·添加对数码相机的支持(通过附带 gtkam 的 ibgphoto2 和它的 GIMP 插件) ·改进了对无线卡的支持(通过内核驱动程序和固件) ·…… 正如一开始提到的,你可以将 4MLinux 配置为 LAMP 服务器(Linux 4.14.18,Apache 2.4.29,MariaDB 10.2.12,PHP 5.6.33 和 PHP 7.2.2)。Perl 5.26.0 和 Python 2.7.13 也支持使用。 原文来自:http://www.oschina.net/news/93885/4mlinux-24-0-stable-release...
码云是国内最大的代码托管平台,为了支持更大的用户规模,开发团队也在对一些组件进行大规模的重构.
这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料,各种各样的形式都有,看的人心累,结合了mybatis的官方demo和文档终于找到了最简的两种模式,花了一天时间总结后分享出来。 orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开发中可以根据需求灵活使用。发现一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis。 hibernate特点就是所有的sql都用Java代码来生成,不用跳出程序去写(看)sql,有着编程的完整性,发展到最顶端就是spring data jpa这种模式了,基本上根据方法名就可以生成对应的sql了,有不太了解的可以看我的上篇文章[springboot(五):spring data jpa的使用](http://www.ityouknow.com/springboot//springboot(%E4%BA%94)-spring-data-jpa%E7%9A%84%E4%BD%BF%E7%94%A8.html)。 mybatis初期使用比较麻烦,需要各种配置文件、实...
监控mongo写个模板其实挺快的,如果公司每个mongo使用的端口都一致的话,就可直接建立一套模板,然后这个模板链接到各个服务器上即可。但如果公司使用mongo的端口如果不一致的话,那建议使用zabbix的自动发现的功能,自动发现mongo监听的端口,并对它进行相关数据的收集。
先看一下效果图, 此监控图是zabbix的筛选功能可能把相关的图整合到一个页面里面去。
具体的自动发现实现如下: 探索规则配置如上,机器上的zabbix agent配置如下: UserParameter=mongo.discover,python /usr/local/zabbix/discover_mongo.py
其中/usr/local/zabbix/discover_mongo.py为自动发现的脚本,脚本内容如下: #coding:utf-8
import simplejson as json
import commands
(status, output) = commands.getstatusoutput('''sudo netstat -tlnp|grep 'mongod'|awk '{print $4}'|awk -F':' '{print $(NF)}'|sort -u|grep -v "^28"''')
outputs = output.split('\n')
ports = []
for port in
ports += [{'{#MONGOPORT}': port}]
print json.dumps({'data':ports},sort_keys=True,indent=4) 使用系统命令netstat把监听的端口筛选出来,然后以json的格式进行输出。定义到...
HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高
2018全球人工智能技术大会(GAITC)将在5月19日-20日的北京国家会议中心举办,本次大会由中国人工智能学会领衔,李德毅、姚期智等院士担任大会主席,包括微软、京东、搜狗、Skype等企业的众多国际一流人工智能专家也会亲临现场!
这次提到的Java反射涉及的代码比较多。因为工作中经常用到反射,对代码做了很多抽象以及过滤器。虽然代码量很多,但是简单易用,过滤插件也易修改。 下面介绍下工作中哪些地方比较容易用到反射。比如插件或者过滤器,如果抽象的子类比较少,配置成XML等结构也是可以达到同样的效果。如果希望灵活一些,添加了插件或者过滤器代码子类后希望可以直接使用。可能反射会比较好点,通过扫描所有class或者jar文件,得到所有继承的子类。如果每次调用都扫描所有的文件会比较影响性能。所以在实现里面加入反射缓存,对所要获取反射子类时涉及的所有参数作为一个key缓存所有的反射结果。下次如果是同样的key,就不在重新扫描。 代码示例如下: public static void main(String[] args) {
//设置扫描范围,可以是class文件所在位置例如bin下或者是mysql开头或者mysql结尾的jar,
//设置为""为全部都扫描,这种比较耗时
ReflectUtils.createSharedReflections("classes", "bin", "mysql");
//调试阶段可以设置每次都全扫描
//Beans.setDesignTime(true);
final Collection&String& subTypes = ReflectUtils.listSubClass(IA.class);//
for (final String subTy...
RabbitMQ高可用系列之消费失败处理
这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作。但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件。再去安装数据库可能就比较麻烦了。 其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代码的方式启动或者关闭。下面提供一些代码片段,具体的会提供下载地址。 这个是核心代码类,这个类实现了Mysql 的启动和停止以及数据库的启动状态。 package net.simple.
import java.io.F
import java.util.HashM
import java.util.M
import java.util.P
import java.util.S
import com.mysql.management.MysqldR
* @author 李岩飞
* 日 下午1:44:55
public final class EmbedMySqlServer {
private MysqldResource mysqlI
//配置信息
public final P
//端口信息
* 考虑到数据库的性能问题,允许将数据库放在其它磁盘
private String embedMySqlH
public EmbedMySqlServer(final Properties props) {...
pndao是票牛技术团队在使用的MyBatis增强工具,它可以根据一些方法约定,自动生成SQL。它在实际生产中减少了80%以上的重复SQL编写工作。
本文简单介绍了主流的容器管理平台包括Swarm,Kubernetes,Mesos,AWS ECS,并对它们做了基本的比较。
每个有逼格的App在第一次启动时都有一个欢迎界面,通常是几个单页面或者带动画的单页面滑动到最后一页有个启动的按钮,本文将使用Ionic2来创建,So easy!
前端开发不可避免使用到icon图标,本文在bootstrap框架的前提下分享自己使用阿里矢量化图标的方法。同时附上原始标签应用的tips。
摘自本人 http://irfen.me/redis-hyperloglog-intro/ 我们一直都知道,redis几大常用数据结构,字符串、散列、列表、集合、有序集合。其实后来Redis做了很多补充,其中之一就是HyperLogLog,另外的还有GEO(地理位置),是3.2版本加的。 这里我们就来简单介绍下HyperLogLog结构。 先说用处:这个结构可以非常省内存的去统计各种计数,比如注册ip数、每日访问IP数、页面实时UV(PV肯定字符串就搞定了)、在线用户数等。 这里看到所有的用处都是xxx数,所以这个数据结构的特点就是,可以比较准确的估算出你要统计的数量,但是却无法知道统计的详细内容。比如统计每日访问IP数,可以获取当时访问过的IP总数量,但是没法知道这些IP都是什么。 有得必有失,当然你要统计上面提到的那些内容,可以用集合来处理,这样可以知道数量,也能获得所有的详细列表。但是一个大型的网站,每天IP比如有100万个呢,我们粗算一个IP消耗15字节,那么100万个IP就是15M,如果1千万,就是150M。 再来看看我们的HyperLogLog,在Redis中每个键占用的内容都是12K,理论存储近似接近2^64个值,不管存储的内容是什么。12K,知道这个数据结构的作用了吧。这也是为什么他不能知道里面的详细内容了。这是...
微信小程序已经内测有一段时间了,笔者本着好奇加学习的心态写了几个小demo,虽然在MINA框架上并没有遇到太多的坑,但官方开发工具实在不敢恭维。 - api提示不全,要一个个查api啊,写代码超级慢啊 - 很多必备的快捷键都没有,比如全选关键字、快速复制一行等等 - 颜色主题不能选?不喜欢白色风格怎么搞 - 没有插件 没有插件 没有插件 重要的事情说三遍 无奈笔者走上了尝试各种IDE的旅途,现在说一下笔者对于IDE的需求或者设想: - 轻量级:我不喜欢那种类似Eclipse的庞然大物,即使出现类似工具我也不会去使用,因为其中90%的功能都不会被用到。 - 可定制化的代码着色:代码着色是必备功能,如果支持颜色模板最好 - 准确的代码提示:这个太重要了,大家懂得 - 可调试:IDE可以进行调试或运行 - 实时预览界面:由于应用开发与网页不同,实时预览必须在程序运行时才会将动态数据加载到界面,这块我不抱太大希望 针对上面几个需求,笔者前后尝试了目前市面上支持小程序开发的工具,呕心沥血总结如下,以供大家参考。 ## 微信小程序官方开发工具 ![](http://upload-images.jianshu.io/upload_images/8b61a769c9b16.gif?imageMogr2/auto-orient/strip) 注意,这个小...
Makefile 编辑一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的唯一的一件事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。 make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在...
reduce 方法(升序) 语法:
array1.reduce(callbackfn[, initialValue]) 参数 定义 array1 必需。一个数组对象。 callbackfn 必需。一个接受最多四个参数的函数。对于数组中的每个元素,reduce 方法都会调用 callbackfn 函数一次。 initialValue 可选。如果指定 initialValue,则它将用作初始值来启动累积。第一次调用 callbackfn 函数会将此值作为参数而非数组值提供 返回值:
通过最后一次调用回调函数获得的累积结果。 异常:
当满足下列任一条件时,将引发 TypeError 异常: callbackfn 参数不是函数对象。 数组不包含元素,且未提供 initialValue。 回调函数语法:
function callbackfn(previousValue, currentValue, currentIndex, array1)
可使用最多四个参数来声明回调函数。
下表列出了回调函数参数。 回调参数 定义 previousValue 通过上一次调用回调函数获得的值。如果向 reduce 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。 currentValue 当前数组元素的值。 currentIndex 当前数组元素的数字索引。 array1 包含该元素的数组对象。 第一次调用回调...
装饰者模式 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 装饰者模式特点 装饰者和被装饰对象有相同的超类型。 你可以用一个或者多个装饰者包装一个对象。
既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装的)的场合,可以用装饰过的对象代替它。 装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。 对象可以在任何时候被装饰,所以可以在运行时动态的,不限量的用你喜欢的装饰者来装饰对象。 装饰者模式类图 从上图可以看出,装饰者和被装饰者拥有共同的父类Componet,为了方便后面的扩展,我们加了一个装饰者父类Decorator,让Decorator去继承Componet,然后让众多装饰者去继承Decorator。 应用场景(婚纱照收费) 生活中符合装饰者模式的应用场景其实还挺多,就拿前阵子去拍婚纱照的经历来说吧,婚纱工作人员一般先会跟你整体说,拍什么样的场景,多少套衣服,怎么去收费,然后在不改变原有收费的前提下,会跟你说精修入册数量,每加一张,就加收多少钱。现在我们来把这个分级收费模式抽象一下,假如说,我们拍摄一张照片是40块...
以下内容根据网上资料和自己整理总结而成 一、什么是Netty? Netty是一个高性能 事件驱动、异步非堵塞的IO(NIO)Java开源框架,Jboss提供,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器,快速开发高性能、高可靠性的网络服务器和客户端程序。支持HTTP、 WebSocket 、Protobuf、 Binary TCP |和UDP,Netty已经被很多高性能项目作为其Socket底层基础,如HornetQ Infinispan Vert.x Play Framework Finangle和 Cassandra。其竞争对手是:Apache MINA和 Grizzly。 也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。 “快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。
二、不选择Java原生NIO编程的原因
首先开发出高...
看了[开涛的Nginx+Lua开发教程](http://www.iteye.com/blogs/subjects/nginx-lua),很是感兴趣。所以,自己也把环境搭建起来玩。 跟开涛的不同,我使用Vagrant + Ansible来搭建(不要问我为什么不使用Docker)。这样,所有的人只要两条命令就可以搭建好了,而不需要手工一条命令一条命令打。 所谓使用Openresty来做读服务,是指Openresty直接从数据源读数据,然后渲染输出,而不经过应用服务器,比如Tomcat服务器。[Open

我要回帖

更多关于 摄像头什么时候发明的 的文章

 

随机推荐