开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

合格前端系列系列第二弹-Vue组件开发续篇

大家可以先参考我另外一篇有关vue组件开发的文章,https://my.oschina.net/qiangdada/blog/786981 (一入前端深似海,从此红尘是路人系列第八弹之浅析Vue组件开发)。
qiangdada 发布于 13小时前 阅读 208

【软件周刊第 26 期】2017 Percona Live 开源数据库大会介绍了 MySQL 8.0 的主要新功能

软件周刊(04.23 — 04.29):本周热门软件更新 — Kotlin 1.1.2 发布,基于 JVM 的编程语言;Vue 2.3.0 正式发布,新增服务器端渲染指南;GNOME 3.26 将重新设计 GNOME 控制中心;Ubuntu 17.10 每日构建 ISO 发布,仍使用 Unity 7 桌面环境;OpenResty 1.11.2.3 发布,Web 应用服务器
编辑部的故事 发布于 18小时前 阅读 424

棒棒糖之——Android中视图的绘制流程

一、前言     Android中Activity是作为应用程序的载体存在的,它代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当Activity启动时,我们会通过setContentView方法来设置一个内容视图,这个内容视图就是用户看到的界面,在Android中View存在的两种形式:一种是单一的View控件 ,另一种就是可以包含其他View的ViewGroup容器,前面的内容视图就是以ViewGroup的形式存在的,先看一个Android的UI管理系统的层级管理图:          PhoneWindow是Android系统中最基本的窗口系统,每个Activity都会创建一个。PhoneWindow是Activity和View系统交互的接口。DecorView本质上是一个FrameLayout,是Activity中所有View的祖先。 二、绘制的整体流程     当应用启动时会启动一个主Activity,Android系统会根据Activity的布局来对它进行绘制。绘制会从根视图ViewRoot的performTraversals()方法开始,从上到下遍历整个视图树,每个View控件负责绘制自己,而VewGroup还需要负责通知自己的子View进行绘制操作,视图绘制的过程可以分为三个步骤,分别是测量(Measure)、布局(layout)和绘制(Draw),以下我们看一下performTraversals()的关键代码,performTraversals()...
MrXI 发布于 1天前 阅读 5

【源资讯 第25期】一波开源项目将停止维护

【一周源资讯(2017.4.22-2017.4.28)】 AI 自动编程再次被讨论,但是程序员似乎并不担心?可惜的是,有一波开源项目将停止维护了~
编辑部的故事 发布于 1天前 阅读 2180

RocketMQ源码解析:Message发送&接收

# 1、概述 1. `Producer` 发送消息。主要是**同步**发送消息源码,涉及到 异步/Oneway发送消息,事务消息会跳过。 2. `Broker` 接收消息。(*存储消息在[《RocketMQ源码解析:Message存储》](https://github.com/YunaiV/Blog/blob/master/RocketMQ/1004-RocketMQ源码解析:Message存储.md)解析*) > ![Producer发送消息全局顺序图](https://raw.githubusercontent.com/YunaiV/Blog/master/RocketMQ/images/1003/Producer发送消息全局顺序图.png) # 2、Producer 发送消息 > ![Producer发送消息顺序图](https://raw.githubusercontent.com/YunaiV/Blog/master/RocketMQ/images/1003/Producer发送消息顺序图.png) ## DefaultMQProducer#send(Message) ```Java 1: @Override 2: public SendResult send(Message msg) throws MQClientException, RemotingException, MQBrokerException, InterruptedException { 3: return this.defaultMQProducerImpl.send(msg); 4: } ``` * 说明:发送同步消息,`DefaultMQProducer#send(Message)` 对 `DefaultMQProducerImpl#send(Message)` 进行封装。 ## DefaultMQProducerImpl#sendDefaultImpl() ```Java 1: public SendResult send(Message...
芋艿V 发布于 2天前 阅读 113 点赞 2

xmlplus 组件设计系列之七 - 路由

在浏览器端,对路由的理解一般是根据不同的 URL 完成页面的切换。在服务器端,则是根据不同的 URL 请求回馈相关的页面。在本章,我们讲述的是根据接收到的不同命令,路由组件呈现出不同的页面,这算是广义上的路由的定义。在这里将介绍与路由相关的一个组件,即视图栈 ViewStack。 ## 视图栈 ViewStack 该组件在[《文档》](http://xmlplus.cn/docs)部分的最后一个章节[《延迟实例化》](http://xmlplus.cn/docs#延迟实例化)已经出现过了。这里将对一些细节部分进行解读。下面再次给出该组件的源码。 ```js ViewStack: { xml: " ", fun: function (sys, items, opts) { var args, children = this.children(), table = children.call("hide").hash(), ptr = table[opts.index] || children[0]; if (ptr) ptr = ptr.trigger("show").show(); this.on("switch", function ( e, to ) { table = this.children().hash(); if ( !table[to] || table[to] == ptr ) return; e.stopPropagation(); args = [].slice.call(arguments).slice(2); ptr.trigger("hide", [to+''].concat(args)).hide(); ptr = table[to].trigger("show", [ptr+''].concat(args)).show(); }); return Object....
qudou 发布于 2天前 阅读 28

10分钟教你理解Yii的别名机制 - 寻找它们

> 要先说一句,不要尝试去修改yii预定义的别名,除非你的脑袋被驴踢了。 因为开发需要,有时候我们需要将一些路径或URL保存起来,避免直接写到代码中,于是我们定义了一个类似于常量的变量,在全局均可以使用,这个变量就叫做别名,当然你也可以在配置文件中进行设置。 在yii中我们可以人为指定别名并使用它们,并且,yii还有默认预定义的别名12个,即使你没懂本文,记住这12个别名将也能极大提高编码质量。 # 预定义的别名 - ** [@yii](https://my.oschina.net/xiaoyin) ** 表示Yii框架所在的目录,也是 yii\BaseYii 类文件所在的位置(vendor/yiisoft/yii2/BaseYii.php) - ** [@app](https://my.oschina.net/u/188761) ** 表示正在运行的应用的根目录(非网站根目录) - ** [@vendor](https://my.oschina.net/u/945407) ** 表示Composer第三方库所在目录,你通过composer下载的库,包含yiisoft核心库都在这里。 - ** [@bower](https://my.oschina.net/bower) ** 表示Bower第三方库所在目录,一般在vendor/bower里(该库主要存放一些例如jquery的库文件) - ** [@npm](https://my.oschina.net/npm) ** 表示npm第三方库所在目录,一般是 @vendor/npm - ** @runtime ** 表示正在...
阿北2017 发布于 2天前 阅读 44

使用lombok减少样板代码,写更优雅简洁的代码

内容介绍 lombok介绍 安装 lombok提供的注解 使用lombok的得与失 总结 引言 lombok介绍  JAVA中,我们经常要写非常多的样板文件,比如 set get方法,重写equals hashcode方法等,这些代码百年不变,lombok提供了一系列的注解让你摆脱这些魔板代码的书写。 安装 使用lombok需要使ide工具支持,否则会出现找不到set 和get方法。本文以idea为例,eclipse的话需要自行下载jar并配置 eclipse.ini文件参数具体百度。 idea的话去plugins 搜索lombok,选择 lombok plugin 点击右侧install 安装完重启即可。 使用,在maven项目的pom.xml中引入: <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency> 接下来就可以使用lombok提供的注解了,我们一个一个介绍。 注解介绍 假设我们有一个实体类: public class Role implements Serializable { private static final long serialVersionUID = -1L; private Long id; // uuid生成 private String cname; private String ename; private String comments; } @Getter 和 @Setter 这两个注解@Getter 和 @Setter 如果标注在单个属性上面则只对...
李矮矮 发布于 2天前 阅读 132

容器日志处理及实现

## 容器日志 #### 输出形式: 目前容器日志有两种输出形式: - stdout,stderr 标准输出 这种形式的日志输出我们可以直接使用docker logs查看日志, k8s 集群中同样集群可以使用kubectl logs类似的形式查看日志。 - 日志文件记录 这种日志输出我们无法从以上方法查看日志内容,只能tail日志文件查看。 #### 收集方式: 不论你的业务容器日志如何输出,都是可以使用统一的日志收集器收集。常见的日志收集方式: - k8s 集群 1. 集群启动时会在每个机器启动一个Fluentd agent收集日志然后发送给 Elasticsearch。实现方式是每个agent挂载目录/var/lib/docker/containers使用fluentd的tail插件扫描每个容器日志文件,直接发送给Elasticsearch。 2. Fluentd agent起在业务同一个 pod 中共享 volume 然后实现对日志文件的收集发送给Elasticsearch。 - docker swarm 集群 docker swarm 目前暂时没有提供日志查看机制。但是docker cloud提供了与kubectrl logs类似的机制查看 stdout 的日志。目前还没有 fluentd 插件直接对服务进行日志收集,暂时考虑直接使用使用跟容器一样的机制收集。docker service create 支持--log-driver - docker 容器 从 docker1.8 内置了fluentd log driver ...
好雨云帮 发布于 2天前 阅读 264 点赞 1

2017 面向游戏玩家的八款最佳 Linux 发行版

五一小长假快到了,不知各位有什么安排呢?如果不想去外面添堵,在家玩一些小游戏也是不错的选择。面向 Linux 的游戏在过去几年中发生了很大的变化,现在已经有数十种发行版为游戏玩家进行了重点优化。 接下来,推荐几款最新的,也是经过测试挑选后选择出来的最好的面向游戏玩家的 Linux 发行版。 1、SteamOS SteamOS 似乎总是排在各个 Linux 游戏发行版列表的第一个。它专为游戏设计考虑,预装了 Steam,基于 Debian。 默认情况下,SteamOS 仅安装 Steam,但你也可以激活“桌面模式”,会获得一个功能齐全的桌面操作系统,您可以运行除 Steam 和游戏之外的其他应用程序。它具有开箱即用的一切,不需要其他安装和配置即可在 Steam 上玩游戏。 SteamOS 支持许多显卡、手柄和其他与游戏有关的硬件。但是,如果机器较旧,则不建议使用 SteamOS ,因为它也有一定的硬件要求。 下载地址 2、Ubuntu GamePack Ubuntu GamePack 是一款基于 Ubuntu 的 Linux 发行版。你也可以使用默认的 Ubuntu ,并在 Linux、Wine 和 Steam 的商店里下载和安装想玩的游戏,但它不会像 Ubuntu GamePack 那样去优化游戏。 GamePack 预装了 Lutris、PlayOnLinux、Wine 和 Steam 等,默认提供强大的硬件...
编辑部的故事 发布于 2天前 阅读 3236 评论 13 点赞 2

深度认识 Sharding-JDBC:做最轻量级的数据库中间层

Sharding-JDBC 采用在 JDBC 协议层扩展分库分表,是一个以 jar 形式提供服务的轻量级组件,其核心思路是小而美地完成最核心的事情。
编辑部的故事 发布于 3天前 阅读 2142 评论 10 点赞 4

[喵咪BELK实战(1)]浅谈日志的重要性以及介绍BELK

哈喽大家好呀!这次主要为大家带来BELK日志系统相关的博文,日志大家都知道,比如nginx请求日志,系统的日志,自己程序写入的日志,可以说是日志无处不在,但是对于这些无处不在的日志我们怎么去查看分析它们呢?这个就比较有意思了,随着系统逐渐增大排查问题的成本越来越高,这个时候就需要引入日志系统来聚合索引和查询日志及时发现问题,轻松追查故障原因从而高效的解决问题…
喵了_个咪 发布于 3天前 阅读 80 评论 2

PHPer 进击学习之路:各种实用的 PHP 开源库推荐(二)

做 PHP 开发,选择合适的 PHP 库非常重要,优秀的 PHP 库可以为你节省很多代码和编码时间。本文在是在上一篇文章 PHPer 进击学习之路:各种实用的 PHP 开源库推荐(一)基础上做的补充,希望对你的学习工作有帮助。 11、PHP 邮件发送包 PHPMailer PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括: 在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址 支持多种邮件编码包括:8bit,base64,binary和quoted-printable 支持SMTP验证 支持冗余SMTP服务器 支持带附件的邮件和Html格式的邮件 自定义邮件头 支持在邮件中嵌入图片 调试灵活 经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等 可运行在任何平台之上 12、PHP 图表制作 pChart pChart是一个基于GD library(图形处理函数库)开发的PHP图表制作开源项目。支持多种图表类型包括: Line chart Cubic curve chart Plot chart Bar chart Filled line chart Filled cubic curve chart Pie chart Radars chart Limits chart 13、PHP 快速开发类库 Eden  Eden是一个开源且免费的PHP快速开发类库。它包含很多组件用来自动加载、事件驱动、文档系统、缓存、模板、国际化、数据库、...
编辑部的故事 发布于 3天前 阅读 2088 评论 17 点赞 9

MNIST 机器学习入门(TensorFlow)

为0知识入门TensorFlow和机器学习的开发者准备的 MNIST 入门教程
随风溜达的向日葵 发布于 3天前 阅读 221 评论 1

Xposed从入门到弃坑:0x02、IXposedHook相关接口解析

在上一篇文章中我们通过一个简单的例子开发了一款Xposed框架,感受到了Xposed的强大功能,在demo中我们新建了一个XposedInit的类实现了IXposedHookLoadPackage 接口,在handleLoadPackage中进行hook,最终达到了我们的目的,那IXposedHookLoadPackage是干什么的呢?还有handleLoadPackage什么时候会调用呢?还有IXposedHookInitPackageResources和IXposedHookZygoteInit的左右是什么?这期会做一个讲解。对上一篇文章有遗忘的可以回过头在看一遍:[Xposed从入门到弃坑:一、Xposed初探][1] ## IXposedHookLoadPackage 从字面上翻译就是在加载包时开始hook。接口需要实现*handleLoadPackage*方法,该方法会在执行Application.onCreate()方法前调用,并且携带一个*XC_LoadPackage.LoadPackageParam lpparam*返回过来,lpparam包含了hook到的应用的一些信息,具体通过表格来说明 **(表格的description均为hook到的应用相关信息,不是Xposed项目的信息)** | fields | type | description | | --- | --- | --- | | packageName | String | 应用包名 | | processName | String | 应用加载后的进程名 | | classLoader | ClassLoader | 应用的classloader | | appInfo | Applica...
WrBug 发布于 3天前 阅读 214 评论 2

Vagrant安装、使用

Vagrant安装配置 实际上Vagrant只是一个让你可以方便设置你想要的虚拟机的便携式工具,它底层支持VirtualBox、VMware甚至AWS作为虚拟机系统,本书中我们将使用VirtualBox来进行说明,所以第一步需要先安裝Vagrant和VirtualBox。 VirtualBox安装 VirtualBox是Oracle开源的虚拟化系统,它支持多个平台,所以你可以到官方网站:https://www.virtualbox.org/wiki/Downloads/ 下载适合你平台的VirtualBox最新版本并安装,它的安装过程都很傻瓜化,一步一步执行就可以完成安装了。 Vagrant安装 最新版本的Vagrant已经无法通过gem命令来安装,因为依赖库太多了,所以目前无法使用gem来安装,目前网络上面很多教程还是类似这样的命令,那些都是错误的。目前唯一安装的办法就是到官方网站下载打包好的安装包:http://www.vagrantup.com/downloads.html 他的安装过程和VirtualBox的安装一样都是傻瓜化安装,一步一步执行就可以完成安装。 尽量下载最新的程序,因为VirtualBox经常升级,升级后有些接口会变化,老的Vagrant可能无法使用。 要想检测安装是否成功,可以打开终端命令行工具,输入vagrant,看看程序是不是已经可以运行了。如果不行,请检查一下$PATH里面是否包含vagrant所在...
黎明times 发布于 3天前 阅读 225

SGPlayer 原理详解 - 支持 VR、RTMP 的视频播放框架

# SGPlayer 原理详解 SGPlayer 是一款基于 AVPlayer、FFmpeg 的媒体资源播放器框架。支持全景视频,RTMP、RTSP 等直播流;同时支持 iOS、macOS、tvOS 三个平台。本文将采用图解+说明的方式把关键模块的实现原理介绍给大家。 - 项目地址:[OSChina - SGPlayer](http://git.oschina.net/libobjc/SGPlayer) ## 发起原因 关于视频播放,苹果提供的 AVPlayer 在性能上有着十分出色的表现,在无特需求且资源可控的时,首选一定是它。但随着 VR 和直播的兴起,仅使用 AVPlayer 很多时候已经无法满足需求。出于性能考虑,又不能完全抛弃 AVPlayer,毕竟在点播时有着明显的优势。而在现有的开源项目中,普遍定位比较单一,并不能兼顾 AVPlayer、直播、VR。这样一来,需同时使用3款播放器才能满足需求,即点播使用 AVPlayer,直播使用一个独立的播放器,VR 使用一个独立的播放器。这样处理3套不同的接口和回调事件,着实很让人崩溃!SGPlayer 的出现大大简化了这一过程。 ## 组成结构 和 播放流程 ![SGPlayer](https://coding.net/u/0x010101/p/resource-public/git/raw/master/SGPlayer/SGFFPlayer-playback.jpeg) 上图展示了 SGPlayer 的播放流程和主要组件,下面简单介绍图中各组件...
libobjc 发布于 3天前 阅读 186 评论 1

浅析前端页面渲染机制

作为一个前端开发,最常见的运行环境应该是浏览器吧,为了更好的通过浏览器把优秀的产品带给用户,也为了更好的发展自己的前端职业之路,有必要了解从我们在浏览器地址栏输入网址到看到页面这期间浏览器是如何进行工作的,进而了解如何更好的优化实践,本篇主要围绕这两点展开阐述。前端页面渲染机制可谓是老生常谈,但又很有必要再谈的话题,于是还是决定写一篇,即是对知识的回顾总结,又能与大家分享,何乐而不为。网上相关类型的文章也很多,有兴趣的可以多学习一下。
熊建刚 发布于 3天前 阅读 520 评论 4

YARN资源调度策略之Capacity Scheduler

##背景 yarn默认使用的是最简单的FIFO调度器,即一个default队列,所有用户共享,分配资源也是先到先得,没有优先级之分。有时一两个任务就把资源全占了,其他任务吃不到资源造成饥饿,显然这样的资源分配是不合理的(在当今社会主义之中,我们要共同富裕啊)。yarn还有两种资源调度器,capacity schedule和fair schedule,本文主要研究下capacity schedule。 ##什么是capacity schedule Capacity Schedule调度器以队列为单位划分资源。简单通俗点来说,就是一个个队列有独立的资源,队列的结构和资源是可以进行配置的,如下图: ![输入图片说明](https://static.oschina.net/uploads/img/201704/27103502_DzKJ.png "在这里输入图片标题") default队列占30%资源,analyst和dev分别占40%和30%资源;类似的,analyst和dev各有两个子队列,子队列在父队列的基础上再分配资源。 队列以分层方式组织资源,设计了多层级别的资源限制条件以更好的让多用户共享一个Hadoop集群,比如队列资源限制、用户资源限制、用户应用程序数目限制。队列里的应用以FIFO方式调度,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源滥用。而当...
PeanutLike 发布于 3天前 阅读 70

linux下使用update-alternatives切换java版本的正确姿势

关于update-alternatives命令的使用,请见:https://my.oschina.net/polly/blog/825345 之前的文章说明了使用文件夹管理来代替原来的当个命令配置的方式,不过这个是属于个人使用的方式,并不是规范的通用的方式。 按照默认的方式,每一个软件包对应的命令都是分别设置的,这样的好处是,可以不同的命令使用不同的版本。如java使用1.9,javap使用1.8 还是以java为例,它默认配置了"java/javac/appletviewer/jconsole"。 在新安装了一个版本的时候,为了保留旧的版本,而让新版本生效,首先要做的是看一下旧版本的优先级是多少,如: ``` sudo update-alternatives --display javac javac - auto mode link best version is /usr/lib/jvm/java-8-openjdk-amd64/bin/javac link currently points to /usr/lib/jvm/java-8-openjdk-amd64/bin/javac link javac is /usr/bin/javac slave javac.1.gz is /usr/share/man/man1/javac.1.gz /usr/lib/jvm/java-8-openjdk-amd64/bin/javac - priority 1081 ``` 这里我们看到目前的java版本是java-8,其优先级是1081。 那么我要们安装java-9,而让他自动生效,那么我们就要让他的优先级大于1081,如设置为3000。 明确了这个前提,那就开...
polly 发布于 3天前 阅读 82

武汉源创会现场漂亮小姐姐那么多,千里堵车也要来相会

有美食有美女的武汉站,就算千里堵车也要来相会,随着武汉站落幕,4月源创会行程圆满结束,武汉站所有分享PPT下载链接可在文末查看。
开源中国源创会

合格前端系列系列第二弹-Vue组件开发续篇

大家可以先参考我另外一篇有关vue组件开发的文章,https://my.oschina.net/qiangdada/blog/786981 (一入前端深似海,从此红尘是路人系列第八弹之浅析Vue组件开发)。
qiangdada 发布于 13小时前 阅读 208

iOS崩溃日志之手动解析与自动解析

![输入图片说明](https://static.oschina.net/uploads/img/201704/23214326_2dn8.png "在这里输入图片标题") ### 前言 >  在日常开发中难免遇到程序崩溃的时候,若在Dev环境下通过编译器便能很容易定位到崩溃代码处,但是若版本发布在正式环境里(包括Adhoc和distrubute),我们便无法直接定位到崩溃代码处了。此刻app里的统计平台反馈给我们的是一段没有可读性的日志。那么如何高效、快速、准确地解析日志以便我们快速定位到问题代码? [talkingData平台上的崩溃日志] ![输入图片说明](https://static.oschina.net/uploads/img/201704/23214456_8eDC.png "talkingData平台上的崩溃日志") #### 一、所需文件 1. 崩溃日志文件 我们公司使用的是talkingData统计分析平台,故在网站平台可以看到详细的日志记录,平台上还能看到具体是哪一个版本的APP崩溃。从网站平台下载下来的日志文件为csv格式。 ![输入图片说明](https://static.oschina.net/uploads/img/201704/23221516_9fGr.png "在这里输入图片标题") 2. 符号表文件  2.1 依次点击 Xcode-->Window-->Organizer-->Archives,选中你的项目,右击,点击 “Show in Finder” 便可找到对应的xcarchive文件。 ![](http...
Janyau 发布于 7天前 阅读 160

Struts2的Action

Struts2的结构 Action是Strus2的核心逻辑之一。但这并不意味着Action是复杂的,实际上Action很简单,一个普通的java类就可以作为一个Action。我们之所以可以很方便的使用Action,是因为Struts2的框架对Action做了最大的支持。就像是一个老大,手底下有一大群牛逼的小弟,所以可以整天无所事事。Action的逻辑简单,但是围绕着Action的各个组件的逻辑就复杂的不行了。上图展示了struts2中一个从请求的获取到响应的流程。 一个请求被获取后,会经过层层的Filter到达ActionMapper。ActionMapper可以判断该是否需要为该请求调用一个Action。如果是的话,这个请求会被送给ActionProxy。ActionProxy会通过配置文件和请求生成一个ActionInvocation。ActionInvocation的主要任务是根据运行对应的Action方法,并获取Result。在ActionInvocation中会先运行Interceptor,如果没有从Interceptor中获取Result,则会运行Action的方法。获取result后,会检查配置文件中Action对应的结果,并根据结果访问页面或者请求另外一个Action(Action链)。 Action的实现 Action可以通过三种方式实现: 1.一个类可以是普通的java类,但是必须有一个execute() 2.实现了Action接口,Action接口提供了e...
rainmanqqst 发布于 3年前 阅读 555

New Double架构平台设计及理念

 欢迎加群交流,群号:159908195
晨润--菜菜 发布于 6小时前 阅读 34 评论 1

jstorm进阶-ack机制及KafkaSpout

因为有使用到storm-kafka,所以例子会采用KafkaSpout
whaon 发布于 1周前 阅读 190 点赞 1

AngularJS学习笔记之一: AngularJS入门

AngularJS学习笔记之一: AngularJS入门
阿振 发布于 1年前 阅读 437 点赞 1

枚举类型

1、基本的enum特性 关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。 调用enum的values()方法,可以遍历enum实例,返回的是enum实例的数组,而且该数组中的元素严格保持其在enum中声明时的顺序。 创建enum时,编译器会生成一个相关的类,这个类继承自java.lang.Enum。 Enum提供的一些功能: ordinal():返回一个int值,这是每个enum实例在声明时的次序,从0开始。 ==:比较enum实例,编译器会自动提供equals()和hashCode()方法。 Enum类实现了Comparable接口,具有compareTo()方法,同时它还实现了Serializable接口。 enum实例上调用getDeclaringClass()方法,就能知道其所属的enum类。 name():返回enum实例声明时的名字,这与使用toString()方法效果相同。 valueOf():Enum中定义的static方法,它根据给定的名字返回相应的enum实例,如果不存在,将抛出异常。 静态导入用于enum。使用static import能够就将enum实例的标识符带入当前的命名空间,无需再用enum类型来修饰enum实例。多数情况下,使用static import还是有好处的,不过程序员还是应该对具体情况进行具体分析。 2、向enum中添加新方法 不能继承自一个enum之...
刘胜球 发布于 2年前 阅读 388

最受欢迎的 5 款 Node.js 端到端测试框架

笔者在本文中会结合自身实践和 GitHub 趋势对比最受欢迎的 Node.js E2E 测试解决方案,期望对大家的技术选型有帮助
wangshijun 发布于 1个月前 阅读 1561 评论 3 点赞 2

dpkg工具之dpkg-checkbuilddeps

“ 这周组长安排我调研dpkg-checkbuilddeps内部的执行原理,我简单查看了一下dpkg-checkbuilddeps.pl脚本,居然是perl语言写的,我当时就在想这种legacy级别的历史遗留代码,该怎么看啊,迫于无奈,要交差啊,debug该脚本的执行过程和调研的过程简单的在下面介绍一下,好歹也对自己的工作一个交代。 “
大培哥 发布于 1年前 阅读 630 点赞 1

双主和额外备用节点

双主 额外备用节点
Leech 发布于 9个月前 阅读 436

Android 学习笔记(权威编程第二版)

1.fragment的创建 package com.oyyx.beatboxactivity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; /** * Created by 123 on 2017/4/10. */ public abstract class SingleFragmentActivity extends AppCompatActivity { protected abstract Fragment createFragment(); protected int getLayoutResId() { return R.layout.activity_fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutResId()); FragmentManager manager = getSupportFragmentManager(); Fragment fragment = manager.findFragmentById(R.id.fragment_container); if (fragment == null) { fragment = createFragment(); manager.beginTransaction() .add(R.id.fragment_container, fragment) .commit(); } } } 先构建fra...
masteraux 发布于 5天前 阅读 19

fastjson 对spring mvc 支持,直接返回对象时候,出现类名的错误

 在开发的时候, 我们可能会使用fastjson作为json的解析器,然而在集成spring mvc的时候,会遇到一个错误,返回的json报文中参合了类名, 如, 在使用 <bean class="com.lhfs.web.view.JSONView"> </bean> 作为View的解析器的时候, 会返回   {"message":{"msg":"","ok":false}},  message 这个java类是作为消息的承载体,  我们不需要它. 这时候就需要添加一个参数, 来完成剔除message <bean class="com.lhfs.web.view.JSONView"> <property name="extractValueFromSingleKeyModel" value="true"/> </bean> 这样子, 返回的报文就正确了. {"msg":"","ok":false}
精通吹水 发布于 1年前 阅读 100

树莓派用Python写几个简单程序3_i2c

i2c LCD2004 的使用; i2c 罗盘传感器hmc5883l的使用。 接法简单不介绍。
RagingTyphoon 发布于 2年前 阅读 1872

PAC自动代理的优缺点

传统的VPN代理相信大家都再熟悉不过了,不外乎OpenVPN、PPTP、L2TP/iPsec等协议连接。不过近两年兴起的PAC代理的高大上的科学上网方式(不明觉厉,其实就是代理自动配置,[维基百科](http://zh.wikipedia.org/wiki/代理自动配置)有非常详细的介绍),恐怕很多童鞋还没接触过吧。PAC代理到底是什么,相对传统VPN又有哪些优缺点呢,下面笔者就为大家科普一下。 HTTP代理即通过指定服务器代为请求网页信息,并将response返还给客户端。代理服务器在客户端和web服务器之间,扮演中间人的角色。按照使用场景划分有很多不同作用,这里我们用作翻墙。 通过在pac自动代理中指定HTTP代理服务器(也可以指定socks5代理,但部分客户端不支持),我们就可以在支持pac代理的客户端输入pac文件的url就可以愉快的翻墙了。 理想的方式是在国外直接架设一台HTTP代理服务器,然而事实并没有我们想的这么简单,因为HTTP代理并没有加密,所以会被GFW过滤掉。 这时候我们需要借助一台国内服务器和一台国外服务器,在两个服务器之间架设tunnel,流量加密穿过GFW。而国内服务器同时作为HTTP代理服务器,为国内设备提供代理服务。 我们来画图描述一下,一目了然。 ![PAC代理](https://static.oschin...
得自由 发布于 1个月前 阅读 129

IOS缓存机制详解

IOS缓存机制详解
andyhe91 发布于 2年前 阅读 15295 点赞 4

dubbo 2.5.4 在JDK8下启动错误

错误日志: ERROR context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uriBrokerService': Cannot create inner bean '(inner bean)' of type [com.alibaba.citrus.service.uribroker.impl.URIBrokerServiceImpl$URIBrokerInfo] while setting bean property 'brokers' with key [0]; nested excepti on is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#25': Cannot create inner bean 'server' of type [com.alibaba.citrus.service.uribroker.uri.GenericURIBroker] while setting constructor argument; nested exception is org.springframework.beans.fact ory.BeanCreationException: Error creating bean with name 'server': Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'URIType' of bean class [com.alibaba.citrus.service.uribr...
hanfeng 发布于 1年前 阅读 2954 评论 3 点赞 2

Collections的sort方法

通过Collections的sort方法对List进行排序,有两种方法实现
圣洁之子 发布于 3年前 阅读 380

在ubuntu14.04配置nodejs运行环境

今天使用亚马逊云平台(amazon ec2)可以免费使用半年的云服务器,顿时觉得还是老外敞亮。。。
90后爱国 发布于 2年前 阅读 441

一入前端深似海,从此红尘是路人系列第八弹之浅析Vue组件开发

前段时间由于忙着跳槽的工作交接及熟悉新公司,已经停更博客两周了。不得不说,TX的开发模式的的确确是非常好的,整个团队也都是行业大牛,但是大牛并没有一点脾气,作为一个小白有问题问他们,他们总是乐此不疲的教导着我,感谢志伟哥,感谢项目组所有的人。老规矩,下面直接上干货。
qiangdada 发布于 6个月前 阅读 3677 评论 17 点赞 8

Arduino(一)

Arduino TM1638 模拟仪表盘
小而强大 发布于 2年前 阅读 1113

VUE2.0学习总结

年后公司项目开始上vue2.0,自己对学习进行了总结,希望对大家有帮助!
汤免费 发布于 7天前 阅读 5472 评论 27 点赞 16 打赏 1

只会增删查改?你还缺个数据库管理工具!

任何web软件和应用程序都需要强大的数据库管理工具,因此开发者选择一款合适的数据库管理工具尤为重要。本文列出了几款好用的数据库管理工具(有些并非开源或免费),以供开发者们参考选择: 1、MySQL管理工具 phpMyAdmin phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具。它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等。 2、数据库管理工具 Navicat Lite  Navicat是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资 料库管理员、开发人员及中小企业的需求。 Navicat是以直觉化的使用者图形介面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。Navicat 支持的数据库包括 MySQL、Oracle、SQLite、PostgreSQL 和 SQL Server 等。 Navicat 提供商业版 Navicat Premium 和 免费的版本 Navicat Lite 。但目前 Navicat 已不再提供 LITE 版本。 缺点: 免费版本已停止更新。 3、数据库管理工具 DBeaver DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼...
编辑部的故事 发布于 5天前 阅读 4925 评论 38 点赞 7

运维不仅仅是Linux,居然还要知道这么多?

运维不仅仅是懂Linux就行,因为还有一大部分的Windows运维,向windows运维人员致敬。当然我们这篇文章不是说运维除了懂Linux,还要懂Windows,而是涉及运维的其他方方面面。 如:环境部署、排错和调优、备份、高可用和集群、监控告警、安全和审计、自动化和DevOps、虚拟化和云服务。
永福 发布于 5天前 阅读 3793 评论 27 点赞 16 打赏 3

开源中国用户分析

加入开源中国也有超过三年的时间了,觉得开源中国已经越办越好了,突然很想知道它究竟有多好,我是不是开源中国最老的用户,我有176个开源中国的积分能够排名第几,带着这些问题,我抓取了部分开源中国的用户信息,做了一个简单的分析。 数据获取 要获得用户数据,可以通过开源中国的网页来进行。这个是我的主页面 这个页面包含了用户的基本信息,包括用户名,积分,粉丝,关注等等。 点击粉丝链接可以获得所有的粉丝的情况 然后我们就可以通过这些链接,迭代的找到所有相关连的数据了。 工具选取 这次的数据抓取我选用了requests和pyquery requests是一个非常好用的python的http/rest的客户端,比之python自带的urllib要好用很多,推荐使用。 pyquery是用来解析和操纵html和DOM文档,提供类似jquery的语法,比诸如beatifulSoap要好用不少,尤其如果你是一个前段开发者,熟悉jquery,那就更方便了。大家可以参考我的另一篇博客了解更多的背景信息。 爬取网页数据 为了抓取网页的内容,我们可用chrome自带的工具来查看网页的DOM结构: 核心的代码如下: def get_user_info(url): try: r = requests.get(url + "/fans", headers=headers) doc = pq(r.t...
naughty 发布于 7天前 阅读 3425 评论 48 点赞 16

2017 面向游戏玩家的八款最佳 Linux 发行版

五一小长假快到了,不知各位有什么安排呢?如果不想去外面添堵,在家玩一些小游戏也是不错的选择。面向 Linux 的游戏在过去几年中发生了很大的变化,现在已经有数十种发行版为游戏玩家进行了重点优化。 接下来,推荐几款最新的,也是经过测试挑选后选择出来的最好的面向游戏玩家的 Linux 发行版。 1、SteamOS SteamOS 似乎总是排在各个 Linux 游戏发行版列表的第一个。它专为游戏设计考虑,预装了 Steam,基于 Debian。 默认情况下,SteamOS 仅安装 Steam,但你也可以激活“桌面模式”,会获得一个功能齐全的桌面操作系统,您可以运行除 Steam 和游戏之外的其他应用程序。它具有开箱即用的一切,不需要其他安装和配置即可在 Steam 上玩游戏。 SteamOS 支持许多显卡、手柄和其他与游戏有关的硬件。但是,如果机器较旧,则不建议使用 SteamOS ,因为它也有一定的硬件要求。 下载地址 2、Ubuntu GamePack Ubuntu GamePack 是一款基于 Ubuntu 的 Linux 发行版。你也可以使用默认的 Ubuntu ,并在 Linux、Wine 和 Steam 的商店里下载和安装想玩的游戏,但它不会像 Ubuntu GamePack 那样去优化游戏。 GamePack 预装了 Lutris、PlayOnLinux、Wine 和 Steam 等,默认提供强大的硬件...
编辑部的故事 发布于 2天前 阅读 3236 评论 13 点赞 2

JavaScript异步编程

如果你有志于成为一个优秀的前端工程师,或是想要深入学习JavaScript,异步编程是必不可少的一个知识点,这也是区分初级,中级或高级前端的依据之一。如果你对异步编程没有太清晰的概念,那么我建议你花点时间学习JavaScript异步编程,如果你对异步编程有自己的独特理解,也欢迎阅读本文,一起交流。
熊建刚 发布于 4天前 阅读 2555 评论 9 点赞 7

深度认识 Sharding-JDBC:做最轻量级的数据库中间层

Sharding-JDBC 采用在 JDBC 协议层扩展分库分表,是一个以 jar 形式提供服务的轻量级组件,其核心思路是小而美地完成最核心的事情。
编辑部的故事 发布于 3天前 阅读 2142 评论 10 点赞 4

Angular2.0视频教程来了!(视频和PPT的链接都在底部)

各位道友大家好:        “Angular2.0视频教程”来了!这是全球第一个完整的Angular 2.0系列视频教程,到目前为止也是唯一的,该系列的视频在优酷和youtube同步播出。        还是大漠穷秋老师,还是熟悉的声音,还是淡淡的小幽默。3年前,大漠老师在慕课网发布了“AngularJS实战” http://www.imooc.com/learn/156 系列视频教程,迄今为止已经有14万人学习,整体评分9.6分。很多道友反馈说,通过学习这门课程找到了心仪的工作,大漠老师感到非常开心,说明他的付出是有价值的。        这一次,大漠老师再度倾力打造,从开发环境到完整案例,涵盖了Angular2的方方面面。如果你自己看文档,或者在网上寻寻觅觅,看那些碎片化的文章,可能需要几十个小时,甚至几个月才能摸到门道。而你来听大漠老师的系统讲解,只要8小时,你就是Angular开发专家了!整个课程全部基于大漠老师自己开发的NiceFish这个小项目,如果你想先睹为快,请自己检出代码上手试玩 http://git.oschina.net/mumu-osc/NiceFish 。         同时,大漠老师还给大家带来了一波小福利,每一节课都会送出2本《揭秘Angular2》,https://item.jd.com/12027521.html ,整个课程共送...
大漠穷秋 发布于 3个月前 阅读 42767 评论 83 点赞 51 打赏 6

【码云周刊第 17 期】技术创新,基于 React Native 的开源项目

每周为您推送最有价值的开源技术内参!
开源中国码云 发布于 7天前 阅读 1973 评论 3

PHPer 进击学习之路:各种实用的 PHP 开源库推荐(二)

做 PHP 开发,选择合适的 PHP 库非常重要,优秀的 PHP 库可以为你节省很多代码和编码时间。本文在是在上一篇文章 PHPer 进击学习之路:各种实用的 PHP 开源库推荐(一)基础上做的补充,希望对你的学习工作有帮助。 11、PHP 邮件发送包 PHPMailer PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括: 在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址 支持多种邮件编码包括:8bit,base64,binary和quoted-printable 支持SMTP验证 支持冗余SMTP服务器 支持带附件的邮件和Html格式的邮件 自定义邮件头 支持在邮件中嵌入图片 调试灵活 经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等 可运行在任何平台之上 12、PHP 图表制作 pChart pChart是一个基于GD library(图形处理函数库)开发的PHP图表制作开源项目。支持多种图表类型包括: Line chart Cubic curve chart Plot chart Bar chart Filled line chart Filled cubic curve chart Pie chart Radars chart Limits chart 13、PHP 快速开发类库 Eden  Eden是一个开源且免费的PHP快速开发类库。它包含很多组件用来自动加载、事件驱动、文档系统、缓存、模板、国际化、数据库、...
编辑部的故事 发布于 3天前 阅读 2088 评论 17 点赞 9

解Bug之路-串包Bug

#解Bug之路-串包Bug 笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug。现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后的工作中能够少踩点坑。 #串包Bug现场 ##前置故障Redis超时 由于某个系统大量的hget、hset操作将Redis拖垮,通过监控发现Redis的CPU和IO有大量的尖刺,CPU示意图下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201704/27101220_ckSF.png "在这里输入图片标题") CPU达到了100%,导致很多Redis请求处理不及时,其它业务系统都频繁爆出readTimeOut。此时,紧急将这个做大量hget、hset的系统kill,过了一段时间,Redis的CPU恢复平稳。 ##一波未平,一波又起 就在我们以为事件平息的时候,线上爆出登录后的用户名称不正确。同时错误日志里面也有大量的Redis返回不正确的报错。尤为奇葩的是,系统获取一个已经存在的key,例如get User123456Name,返回的竟然是redis的成功返回OK。示意图如下: ``` Jedis.sendCommand:get User123456Name Jedis.return:OK or Jedis.sendCommand:get User123456Name Jedis.return:user789 ``` 我们发现此情况时,联系op将Redis集群的所有Key紧急delete,...
无毁的湖光-Al 发布于 3天前 阅读 1515 评论 28 点赞 13

仿QQ空间和微信朋友圈,高解耦高复用高灵活

先看看效果:   用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦、高复用、高灵活。   动态列表界面MomentListFragment支持 下拉刷新与上拉加载 和 模糊搜索,反复快速滑动仍然非常流畅。 缓存机制使得数据可在启动界面后瞬间加载完成。   动态详情界面MomentActivity支持 (取消)点赞、(删除)评论、点击姓名跳到个人详情 等。 只有1张图片时图片放大显示,超过1张则按九宫格显示。         用到的CommentContainerView和MomentView都是独立的组件,既可单独使用,也可用于ListView或添加至其它ViewGroup等。   CommentContainerView复用   CommentContainerView.java  setOnCommentClickListener : 设置点击评论监听 createView : 创建View bindView : 绑定数据并显示View setMaxShowCount : 设置最多显示数量,超过则折叠 setComment : 设置评论 addCommentView : 添加评论View   1 package apijson.demo.client.view; 2 3 import android.annotation.SuppressLint; 4 import android....
TommyLemon 发布于 6天前 阅读 1332 评论 7

对拉勾网招聘信息做一次数据分析(上)--40行代码拿下所有数据

最近在学MapReduce,出于练手的想法,把拉钩网上的招聘信息拿下做一次分析。
南寻 发布于 7天前 阅读 1243 评论 2 点赞 4

mybatis思维导图,让mybatis不再难懂(一)

>写在前面 与hibernate相比,我无疑更喜欢mybatis,就因为我觉得它真的好用,哈哈。它简单上手和掌握;sql语句和代码分开,方便统一管理和优化;当然缺点也有:sql工作量很大,尤其是字段多、关联表多时,更是如此。而且sql依赖于数据库,导致数据库移植性差。 选用一个框架之前最好先了解它的优缺点,对项目最好用,效率最高的才是一个你最好的选择。 >mybatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 >直接上思维导图 ![1、mybatis简介.png](http://upload-images.jianshu.io/upload_images/4120002-8593f17572d1a1b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![2、与hibernate对比.png](http://upload-images.jianshu.io/upload_images/4120002-fe73ae40aeece93e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![3、几个关键类.png ](http://upload-images.jianshu.io/upload_images/412000...
java思维导图 发布于 2周前 阅读 7877 评论 27 点赞 25

Android全套动画使用技巧

一、Android  View 动画框架     Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,控制的整个View,实现原理是每次绘制视图时View所在ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧。如果没有完成就继续调用invalidate()函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。     视图动画使用简单,效果丰富,它提供了AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation四种动画方式,并提供动画集合AnimationSet,混合使用多种动画。在Android3.0之前,视图动画一家独大,但随着Android3.0之后属性动画框架的推出,它的风光就大不如从前。相比属性动画,视图动画的一个非常大的缺陷就是不具备交互性,当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。但是它的优点也非常明显,即效率比较高且使用方便。     视图动画使用非常简单,不仅可以通过XML文件来描述一个动画过程,同样也可以使用代码来控制整个动画过程。 (1)、透明度动画    为视图...
MrXI 发布于 1周前 阅读 1371 点赞 1

十条关于 WordPress 安全性的小贴士

WordPress 本质上并没大家认为的那么危险,而且开发者也在努力工作,以确保危险漏洞能被快速修复。但不幸的是,WordPress 的成功使其成为众矢之的:如果你能攻破一个 WordPress 安装,那么可能会有数以百万计的网站向你 “开放”。而且即使 WordPress 是安全的,也并不是所有的主题和插件都会有同样级别的开发重视程度。 有些人攻击 WordPress 是为了挑战或造成恶意的损害,这些行为都很容易被发现。最糟糕的罪魁祸首是那种潜入内容的行为,它们会将钓鱼网站深入到文件夹结构,或使用你的服务器发送垃圾邮件。一旦你安装的 WordPress 被破解,可能需要删除所有内容并从头重新安装。 庆幸的是,有很多简单的方案来提升安全性。下面提到的安全修复方案都不会超过几分钟。 1. 切换到 HTTPS HTTPS 可阻止第三方侦听或修改客户端和服务器之间通信的 中间人攻击。理想情况下,应该在安装 WordPress 前激活 HTTPS,如果在安装后再添加,可能需要更新 WordPress 设置。 HTTPS 还可以提升网站的 Goggle PageRank。诸如 SiteGround 这类网站托管服务提供商会提供免费的 SSL 证书。 2. 限制 MySQL 连接地址 确保你的 MySQL 数据库拒绝来自外部的人员和系统连接到本地服务器的行为。大...
编辑部的故事 发布于 5天前 阅读 942 评论 4 点赞 1

JavaScript 热潮是一群精神病人的狂欢(翻译:转自hackernoon论坛)

翻译一篇来自hackernoon论坛里,吐槽javascript的文章
九千里 发布于 5天前 阅读 884 评论 10 点赞 1

学习vue 20天,我写了点东西

往昔 最初团队里使用Angularjs进行开发,刚开始还好,到了项目后期越发感觉Angularjs太重了,以至于后来重构项目时,毅然放弃Angularjs,投入了Vue的怀抱。除了组建团队时,是我搭建了基于Angularjs的前端开发框架,之后都是由前端小组开发。前段时间,由于公司层面的原因,整个团队解散,不得已我又要写前端程序了。 虽然前期Angularjs的开发框架是我搭建的,但对前端来说我也是半路出家了。那个时候也不知道模块开发,更分不清commonJS、AMD、CMD,知道有个requirejs,就研究requirejs,研究了几天突然冒出一个叫grunt的构建工具,于是又研究grunt,同样研究了几天又窜出来个叫gulp的东西,丢了grunt又研究起gulp来,这真有点像小时候听的猴子摘桃的故事,看见好的就丢掉了之前的,最后什么都没得到。gulp搞的差不多了,不知又从哪里看到了一个叫webpack的东西,我的天哪,当时的感觉就是前端的东西太多东西了,那个时候是2015年下。 当下 再一次写前端程序已经到了2017年了,除了维护之前Angularjs的代码,还有新的项目,我选择了Vue 2.0。 学习一门新的技术是需要花费不少代价的,时间不说,动力也是不可或缺的。时间我有,动力也足,那就是半个月做完一个小的管理后台...
程序旅途 发布于 1周前 阅读 1778 评论 9 点赞 5

少年,是时候换种更优雅的方式部署你的php代码了

让我们来回忆下上次你是怎么发布你的代码的: 1. 先把线上的代码用ftp备份下来 2. 上传修改了的文件 3. 测试一下功能是否正常 4. 网站500了,赶紧用备份替换回去 5. 替换错了/替换漏了 6. 一台服务器发布成功 7. 登录每一台执行一遍发布操作 8. 加班搞定 9. 老板发飙 ... 尤其现在的互联网行业,讲究快速迭代,小步快跑。像bug修复或者小功能的修改几乎每天都发版本,大功能的版本迭代每周也差不多会有一次。相信不少同行们像我上面说的这样发布自己的代码吧。或者可能先进一点,直接去服务器上执行一条类似git pull的命令拖下仓库中的代码,但是如果你的代码运行在集群中呢?每台机器登录一次执行一次git pull吗?如果发现代码有问题需要回滚呢? 如果你还在像我上面说的这种方式部署自己的代码的话,那么我希望你能耐心看完这篇文章,从此摆脱代码部署之痛。   其实绕了这么一圈今天是想向大家介绍一下用php写的代码发布工具:deployer。 deployer具有以下吸引人的特性: - 快速      采用了比如并发发布、ssh通道复用、缓存可用情况下使用缓存等技术加速代码部署 - 原子部署   在新发布的版本内执行所有定义的操作,诸如下载依赖、设置文件访问权限等都不会直接...
码王信息 发布于 1周前 阅读 1168 评论 13 点赞 3

TensorFlow入门

TensorFlow入门介绍
随风溜达的向日葵 发布于 5天前 阅读 1406 评论 15 点赞 7

PLSQL

只需更改tnsnames.ora中的ip地址就可以远程链接Oracle数据库 相关文档百度云链接:http://pan.baidu.com/s/1kVHn53p 密码:wir5
miye 发布于 55分钟前 阅读 1

微信小程序picker和range-key的用法

<picker bindchange="bindPickerChange" value="{{index}}" range="{{location}}" range-key="{{'name'}}"> <view class="picker"> 地州{{location[index]}} </view> </picker> range-key用于渲染picker的源是数组的情形,range-key制定了需要picker展示的内容。index是系统自动指定的array的下标,不用修改。 对应的数组内容如下: [{ "id": "XM4xZnN088X5", "name": "西双版纳州" }, { "id": "yrw6F6n30igs", "name": "昆明市" }] 注意range-key中的字段需要单引号指定。
独鸣在彼岸 发布于 1小时前

数据库中级操作

## Mac mysql安装路径 ``` /usr/local/mysql ``` ## SQL ### 对于数据库操作 - 创建 ``` * create database 数据库名; * create database 数据库名 character set 字符集; * create database 数据库名 character set 字符集 collate 校对规则; ``` - 修改 ``` alter database 数据库名 character set 字符集 collate 校对规则; ``` - 删除数据库 ``` alter database 数据库名 character set 字符集 collate 校对规则; ``` - 其它的数据库操作命令 ``` * 切换数据库:use 数据库名; * 查看正在使用的数据库:select database(); ``` ### 对于表操作 - 创建表 ``` create table 表名( 字段名 类型(长度) 约束, 字段名 类型(长度) 约束 ); ``` - 创建的约束 ``` 单表约束: * 主键约束:primary key * 唯一约束:unique * 非空约束:not null * 自增长 atuo_increment *默认值 default ``` - 删除表 ``` drop table 表名; ``` - 修改表 ``` alter table 表名 add 列名 类型(长度) 约束; --修改表添加列. alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束. alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名. alter tab...
海锋 发布于 1小时前

面向互联网的API安全规范

系统服务化之后,服务之间通过API进行交互,服务API基本分为两类:面向内网,面向外网。对于面向外网的API,建立对应的安全策略是首先需要解决的问题。
春哥叨客 发布于 1小时前 阅读 1

JSR 规范

本文抄录地址:https://www.jcp.org/en/jsr/platform?listBy=3&listByType=platform 本文都是经过有道词典翻译结果,诸多差异只做了解。 Java EE (53 JSRs) :J2EE平台共有53个JSR规范的定义,也就是本文抄录的。 Java SE (60 JSRs) : J2SE共有 60个JSR规范,地址:https://www.jcp.org/en/jsr/platform?listBy=2&listByType=platform Java ME (85 JSRs):Java ME 共有 85个JSR规范,地址:https://www.jcp.org/en/jsr/platform?listBy=1&listByType=platform   Java EE Java Enterprise Edition提供了开发多层企业应用程序的api和工具。这个列表的jsr Java EE平台的一部分组件或伞形结构jsr。 JSR 5- XML 5 XML Parsing Specification Description XML解析(JAXP)的java API允许开发人员轻松地在他们的应用程序中使用XML解析器通过行业标准SAX和DOM API。 Status Final Latest Stage Final Release Download page Start: 2000-03-21 Spec Lead: Rajiv Mordani, Oracle   JSR 16 - Connector 16 J2EETM Connector Architecture Description J2EETM连接器体系结构定义了一个标准的体系结构与现有的后端企业信息系统集成java应用程序。 Status final Latest St...
刘引惟 发布于 2小时前 阅读 1

Mac运行C程序

例如,我要编译的文件叫 test.c,那么就在终端中输入 gcc -Wall -g -o test test.c 1 1 其中,-Wall 代表编译器在编译过程中会输出警告信息(Warning),比如有些变量你并没有使用,指针指向的类型有误,main 函数没有返回整数值等。这类信息虽然不是错误,不影响编译,但是很可能是程序 bug 的源头,也有助于你寻找代码中的错误,规范代码格式。所以建议每次编译时都加上 -Wall 参数。 -g 代表编译器会收集调试(debug)信息,这样如果你的程序运行出错,就可以通过 gdb 或者 lldb 等工具进行逐行调试,方便找出错误原因。如果你不是百分之百确定你的程序毫无问题,建议加上 -g 参数。这样 debug 的时候会方便很多。 -o 代表编译器会将编译完成后的可执行文件以你指定的名称输出到你指定的文件夹下。-o 的空格后的名称就是输出的文件的名称。例如我这里 -o 后是 test,就是说 gcc 会在编译成功后在我的当前目录下生成一个叫 test 的可执行文件。如果不加这个参数,每次编译后生成的可执行文件都会放在根目录下,名字叫做 a.out。每次编译成功后都会把上一次的 a.out 文件覆盖。所以建议加上 -o 参数,这样可以更加条理。 最后一项便是你要编译的的源代码的名称了。我这里是...
MikeMei 发布于 2小时前 阅读 2

IntelliJ DataBase功能的使用,以MySql为例子

1. 输入MySql DB设置。可以点击Test Connection,测试是否连接成功。若失败,假设本机已经安装了MySql, 则可能是jar包和MySql版本的问题。选择合适的MySql或者jar包即可。 2. 可以使用最新的驱动,若报错则选择低版本的mysql驱动 3. 我们测试一下结果吧! 可能会遇到的问题: Unknown system variable 'lower_case_table_names' 转个帖子:lower_case_table_names的说明 可能是jar包和MySql版本的问题,选择合适的MySql或者jar包即可。
leonhu 发布于 2小时前 阅读 3

Redis实现高并发下的抢购、秒杀功能

抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少(”超卖”问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。 重点在于第二个问题 常规写法: 查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数 优化方案1:将库存字段number字段设为unsigned,当库存为0时,因为字段不能为负数,将会返回false   优化方案2:使用MySQL的事务,锁住操作的行 优化方案3:使用非阻塞的文件排他锁 优化方案4:使用redis队列,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用(mysql事务在高并发下性能下降很厉害,文件锁的方式也是) 抢购、描述逻辑 模拟5000高并发测试 webbench -c 5000 -t 60 http://192.168.1.198/big/index.php ab -r -n 6000 -c 5000 http://192.168.1.198/big/index.php 上述只是简单模拟高并发下的抢购,真实场景要比这复杂很多,很多注意的地方 如抢购页面做成静态的,通过ajax调用接口 再如上面的会导致一个用户抢多个...
hfisop 发布于 2小时前 阅读 3

volatile关键字

volatile概念:volatile关键字的主要作用是使变量在多个线程间可见。          举个例子:现在有个私用变量 num = 0,有两个线程 T1 和 T2,当线程 T1 访问变量 num 时,并给其赋值为 num = 5,如果将num申明为 volatile的话,那么线程 T2 立马就知道 num 的值变化为 num = 5 了,当线程 T2 访问 num 的时候便会知道其值是 5。 public class RunThread extends Thread { private boolean isRunning = true; private void setRunning(boolean isRunning) { this.isRunning = isRunning; } @Override public void run() { System.out.println("进入run方法"); while (isRunning == true) { //执行逻辑 } System.out.println("停止线程"); } public static void main(String[] args) throws Exception { RunThread rt = new RunThread(); rt.start(); Thread.sleep(3000); rt.setRunning(false); System.out.println("isRunning的值已经被设置了false"); Thread.sleep(1000); System.out.println(rt.isRunning); ...
石飞飞 发布于 2小时前 阅读 3

在b2core框架和simple_html_dom.php文件里面都有一个load()函数

在simple_html_dom.php文件里面,有一个load()函数的定义。 // load html from string function load($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) { global $debugObject; // prepare $this->prepare($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); // strip out comments $this->remove_noise("'<!--(.*?)-->'is"); // strip out cdata $this->remove_noise("'<!\[CDATA\[(.*?)\]\]>'is", true); // Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037 // Script tags removal now preceeds style tag removal. // strip out <script> tags $this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is"); $this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is"); // strip out <style> tags $this->remove_noise("'<\s*style[^>]*[^/]>(.*?)<\s*/\s*style\s*>'is"); ...
FeanLau 发布于 2小时前 阅读 1

c++中i++与++i的重载

i++实现的代码为: //i++实现代码为:                                     int operator++(int)                                   {     int temp = *this;                                          ++*this;                                                  return temp;                                     }//返回一个int型的对象本身   ++i的实现代码: // ++i实现代码为: int& operator++() {     *this += 1;     return *this; }//返回一个int型的对象引用
mskk 发布于 4小时前 阅读 1

Mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'

在远程连接mysql的时候,连接不上,出现如下报错: [Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0](http://) 截图如下: 原因分析: ``` mysql开启了DNS的反向解析功能,这样mysql对连接的客户端会进行DNS主机名查找。 mysql处理客户端解析过程: 1)当mysql的client连过来的时候,服务器会主动去查client的域名。 2)首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。 3)如果hosts文件没有,则查找DNS设置,进行DNS反向解析,直到timeout连接失败。 mysql的DNS反向解析: 1)mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。 2)如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。 解决方案: 1)把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字做主机映射即可。 2)在my.cnf配置文件中的[mysqld]区域添加skip-name-resolve,即跳过mysql连接的DNS反向解析功能,这样能很好地提高mysql性能。在这种情况下,就只能使用MySQL授权表中的IP来连接mysql服务了。 对于第一种方...
林伟琨 发布于 4小时前 阅读 3

确保你的备份恰到好处 Ubuntu桌面版的默认工具:dejá-dup仅被设置为默认备份你的home目录,因此它遗漏一些你在需要将系统恢复到有序的工作状态时的重要部分。让我们试想一下你的系统由以下三个部

北京时间4月17日晚间消息,据《硅谷商业杂志》(SVBJ) 网站报道,乐视已将其位于加州圣何塞(San Jose)的美国总部大楼出售给深圳一家光伏新能源公司Han‘s Group。
linux-tao 发布于 5小时前 阅读 1

New Double架构平台设计及理念

 欢迎加群交流,群号:159908195
晨润--菜菜 发布于 6小时前 阅读 34 评论 1

Redis的JedisConnectionException异常解决方法

刚接触Redis数据库,一上机就遇到了问题,Java jedis JedisConnectionException异常,问题出现了以后我尝试在Google、百度和bing搜索过都没有找到解决方法。搜索到的大多数都只是理论性的文章,没看到实质的解决方法,有解决方法的但不适合我的情况。上网找资料的时候虽然没有找到解决方法,但了解了导致JedisConnectionException异常的原因有多种
偶尔羊癫疯 发布于 7小时前

8.6 Spring Boot集成 Spring Security 《Spring Boot开发:从0到1》 工程实例: LightSword

# 《Spring Boot开发:从0到1》 工程实例: LightSword 使用SpringBoot,Scala開發的自動化測試平台 ## 书籍参考 《Spring Boot开发:从0到1》 ==== 第一部分Spring Boot基础 [第1章 Spring Boot史前简述](http://www.jianshu.com/p/53134362089a) === 1.1 J2EE(Java 2 Platform Enterprise Edition)简介 1.2 Java企业级开发框架概述 1.3 Spring生态系统 1.4 Spring JavaConfig [第2章 Spring Boot简介](http://www.jianshu.com/p/53628ac5c85d) === 2.1 用Spring Boot创造一切 2.2 Spring Boot起源 2.3 Spring Boot在Spring生态中的构成 2.3.1 Spring生态顶级项目 2.3.2 Spring cloud子项目 2.4 Spring Boot核心组件 2.5 Spring Boot版本历史 2.6 Spring Boot学习成本 [第3章 Spring Boot快速开始Hello World](http://www.jianshu.com/p/36529384b8c6) === 3.1 Spring Boot CLI groovy版Hello World 3.2 常规Java版Hello World [第4章 零XML配置的Spring Boot Application](http://www.jianshu.com/p/5e8210f5e5a3) === 4.1 application.properties 4.2 Spring Boot属性配置和使用 4.2.1配置的优先级 4.2.2命令行参数配置 4.2.3 random.*属性配置 4.2.4属性文件配置 4.2....
东海陈光剑 发布于 9小时前 阅读 3

mysql新创建的用户无法登录

刚创建的用户,密码正确却无法登录
zzxuan 发布于 11小时前 阅读 2

dubbo对spring自定义标签的扩展的实现

在spring中使用过dubbo的人应该都配置过类似 <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" /> <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" /> 这种自定义标签,一看就明白是dubbo的,你要是做了框架,和spring结合时是不是也想来个自己框架的自己的标签呢。   在spring官方文档中42.1点介绍中有详细说明怎么自定义标签,简单的来说自定义标签就是: 1:编写一个xml架构来描述自定义的元素 2:编写一个自定义的handler实现NamespaceHandler接口 3:编写一个或者多个自定义的解析器实现BeanDefinitionParser接口  4:注册到Spring容器   第0步:最终功能的要求 我们这里来的名词叫ttdubbo(testdubbo)在spring的配置xml中也使用ttdubbo来,后面暂时只来2个标签,一个为application,一个为registry。这都是dubbo中有的,我把其它的删了,只要这两个,他们的内容都很少,都是2,3个字段。 先来看最终的2个图: applicationContext.xml这个是spring配置文件 还有个是测试代码:     需要来个ttdubbo的maven项目,要引入spring依赖,在resources下添加“META-INF”文件夹 第1步:根据需要编写...
独钓渔 发布于 12小时前 阅读 2 评论 1

Manjaro安装vbox报错

vbox Kernel driver not installed (rc=-1908)
OriginLeon 发布于 12小时前 阅读 2

Centos中查看nginx、apache、php、mysql配置文件路径

1、判断apache 首先执行命令找到httpd路径 ps aux | grep httpd 如httpd路径为 /usr/local/apache/bin/httpd 然后执行以下命令 /usr/local/apache/bin/httpd -V | grep “SERVER_CONFIG_FILE” 即可找到编译时加载的配置文件路径 httpd.conf -V 参数可以看到编译时配置的参数 2、判断nginx 首先执行命令找到nginx路径 ps aux | grep nginx 如nginx路径为 /usr/local/nginx/sbin/nginx 然后执行以下命令 /usr/local/nginx/sbin/nginx -V 默认放在 安装目录下 conf/nginx.conf 3、判断mysql 首先执行命令找到mysql路径 ps aux | grep mysqld 如mysqld路径为 /usr/bin/mysql 然后执行以下命令 /usr/bin/mysql --verbose --help | grep -A 1 ‘Default options’ 或 /usr/bin/mysql --print-defaults 4、判断php加载的配置文件路径 (1)、可通过php函数phpinfo来查看,写个文件,然后用网址访问一下,查找“Loaded Configuration File”对应的值即为php加载的配置文件 (2)、如果是nginx+php配置,也可以通过查找php执行路径 ps aux | grep php 如,路径为 /usr/local/nginx/sbin/php-fpm 然后执行以下命令 /usr/local/nginx/sbin/php-fpm -i | grep “Loaded Configuratio...
benny周 发布于 12小时前 阅读 2

浅析前端页面渲染机制

作为一个前端开发,最常见的运行环境应该是浏览器吧,为了更好的通过浏览器把优秀的产品带给用户,也为了更好的发展自己的前端职业之路,有必要了解从我们在浏览器地址栏输入网址到看到页面这期间浏览器是如何进行工作的,进而了解如何更好的优化实践,本篇主要围绕这两点展开阐述。前端页面渲染机制可谓是老生常谈,但又很有必要再谈的话题,于是还是决定写一篇,即是对知识的回顾总结,又能与大家分享,何乐而不为。网上相关类型的文章也很多,有兴趣的可以多学习一下。
熊建刚 发布于 3天前 阅读 520 评论 4

解Bug之路-串包Bug

#解Bug之路-串包Bug 笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug。现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后的工作中能够少踩点坑。 #串包Bug现场 ##前置故障Redis超时 由于某个系统大量的hget、hset操作将Redis拖垮,通过监控发现Redis的CPU和IO有大量的尖刺,CPU示意图下图所示: ![输入图片说明](https://static.oschina.net/uploads/img/201704/27101220_ckSF.png "在这里输入图片标题") CPU达到了100%,导致很多Redis请求处理不及时,其它业务系统都频繁爆出readTimeOut。此时,紧急将这个做大量hget、hset的系统kill,过了一段时间,Redis的CPU恢复平稳。 ##一波未平,一波又起 就在我们以为事件平息的时候,线上爆出登录后的用户名称不正确。同时错误日志里面也有大量的Redis返回不正确的报错。尤为奇葩的是,系统获取一个已经存在的key,例如get User123456Name,返回的竟然是redis的成功返回OK。示意图如下: ``` Jedis.sendCommand:get User123456Name Jedis.return:OK or Jedis.sendCommand:get User123456Name Jedis.return:user789 ``` 我们发现此情况时,联系op将Redis集群的所有Key紧急delete,...
无毁的湖光-Al 发布于 3天前 阅读 1515 评论 28 点赞 13

JavaScript异步编程

如果你有志于成为一个优秀的前端工程师,或是想要深入学习JavaScript,异步编程是必不可少的一个知识点,这也是区分初级,中级或高级前端的依据之一。如果你对异步编程没有太清晰的概念,那么我建议你花点时间学习JavaScript异步编程,如果你对异步编程有自己的独特理解,也欢迎阅读本文,一起交流。
熊建刚 发布于 4天前 阅读 2555 评论 9 点赞 7

运维不仅仅是Linux,居然还要知道这么多?

运维不仅仅是懂Linux就行,因为还有一大部分的Windows运维,向windows运维人员致敬。当然我们这篇文章不是说运维除了懂Linux,还要懂Windows,而是涉及运维的其他方方面面。 如:环境部署、排错和调优、备份、高可用和集群、监控告警、安全和审计、自动化和DevOps、虚拟化和云服务。
永福 发布于 5天前 阅读 3793 评论 27 点赞 16 打赏 3

TensorFlow入门

TensorFlow入门介绍
随风溜达的向日葵 发布于 5天前 阅读 1406 评论 15 点赞 7

开源中国用户分析

加入开源中国也有超过三年的时间了,觉得开源中国已经越办越好了,突然很想知道它究竟有多好,我是不是开源中国最老的用户,我有176个开源中国的积分能够排名第几,带着这些问题,我抓取了部分开源中国的用户信息,做了一个简单的分析。 数据获取 要获得用户数据,可以通过开源中国的网页来进行。这个是我的主页面 这个页面包含了用户的基本信息,包括用户名,积分,粉丝,关注等等。 点击粉丝链接可以获得所有的粉丝的情况 然后我们就可以通过这些链接,迭代的找到所有相关连的数据了。 工具选取 这次的数据抓取我选用了requests和pyquery requests是一个非常好用的python的http/rest的客户端,比之python自带的urllib要好用很多,推荐使用。 pyquery是用来解析和操纵html和DOM文档,提供类似jquery的语法,比诸如beatifulSoap要好用不少,尤其如果你是一个前段开发者,熟悉jquery,那就更方便了。大家可以参考我的另一篇博客了解更多的背景信息。 爬取网页数据 为了抓取网页的内容,我们可用chrome自带的工具来查看网页的DOM结构: 核心的代码如下: def get_user_info(url): try: r = requests.get(url + "/fans", headers=headers) doc = pq(r.t...
naughty 发布于 7天前 阅读 3425 评论 48 点赞 16

Android 的滑动分析以及各种实现

一、滑动效果的产生     滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件,并且根据事件传入的坐标,动态且不断改变View的坐标,从而实现View跟随用户触摸的滑动而滑动。 (1)、Android的坐标系         Android中将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向,如下图:          系统提供了getLocationOnScreen(int location[])这样的方法来获取Android坐标系中点的位置,即该视图左上角在Android坐标系中的坐标。在触控事件中使用getRawX()、getRawY()方法所获得的坐标同样是Android坐标系中的坐标。  (2)、视图坐标系     Android中除了上面所说的这种坐标系之外,还有一个视图坐标系,它描述了子视图在父视图中的位置关系。这两种坐标系并不矛盾也不复杂,他们的作用是相互相成的。与Android坐标系类似,视图坐标系同样是以原点向右为X轴正方向,以原点向下为Y轴正方向,只不过在视图坐标系中,原点不再是Android坐标系中的屏幕最左上角,而是以父视图左上角为坐标原点,如下图:     在触控...
MrXI 发布于 1周前 阅读 1120 评论 6 点赞 3

现代c++开发利器folly教程系列之:dynamic

一、前言        用过python、php等动态类型语言的人肯定对动态数据类型不陌生。对于定义时不确定、运行时才确定的数据类型,使用动态类型是非常方便的。c++是一门不折不扣的静态类型语言,那么是否就无缘享受“动态”类型的好处了呢?不尽然。folly为我们提供了dynamic类型,从一定程度上实现了c++中的“动态”数据类型,为什么说是“一定程度上”呢,因为dynamic类型只支持c++中的基本类型(部分)和复合类型(array和map),不支持自定义类型。你可能会把dynamic和boost::any或std::any(将在c++17中支持)进行对比,但是其实它们没有可比性,首先是它们的实现原理不同。boost::any虽然可以盛放任何类型,但是它在实现上是用继承的方式进行了类型擦除,因此在还原类型时,需要程序员自己显示的提供类型信息,这也是boost::any的缺点之一。而dynamic虽然代表的类型有限,但是dynamic本身可以记住类型,便于赋值和还原。因此,dynamic不是boost::any的替代品,更像是一种补充,如果非要类比的话,dynamic和boost::variant更为相似。 二、类型支持       如前文所述,dynamic可以盛放的类型是有限的,它可以盛放部分基本类型、字符串类型、数组类型和OBJECT(本质为m...
黑客画家 发布于 2周前 阅读 2289 评论 8 点赞 1

用python找出那些被“标记”的照片

想必大家对照片这个东西再熟悉不过,但我不知道在座的各位是否知道相片的EXIF信息。简单得说它就是每一张图片的"指纹信息",然后这边写了个小工具,或许社工的时候可以用到。
AI3 发布于 2周前 阅读 2102 评论 14 点赞 3

视觉角度: jfinal的Model与Beetlsql比较

JFinal 是目前在 git.oschina.net java中关注最多的项目. 亲自用JFinal开发过有上百张表的项目.项目完结后总要做个总结 这篇文章是介绍项目中开发的一些经历. 会首先列出JFinal的Model开发 (只是Model的使用) 使用Beetlsql替换JFinal的Model (给出一种较爽编码方式) 对比两个在写多条件查询sql时, (就是需要条件判断, 为null的不参与查询) 1.JFinal的Model开发 JFinal的ORM下面称JFinal的Model 这是Model的新增 修改 删除 jfinal 实体类1 public class Elephant extends Model<Elephant> { public static final Elephant Dao = new Elephant(); public List<Integer> findIds() { return Db.query("select id from tb_bird"); } }   jfinal 测试用例1 @Log4j public class ElephantTest { @Test public void testChainSave() { // 无需要创建字段 new Elephant().set("age", 17).set("name", "jfinal").set("desc", "mvc + orm").save(); } @Test public void testUpdate() { Elephant elephant = Elephant.Dao.findById(1); elephant.set("age", 18).update(); } @Test public v...
渔泯小镇 发布于 2周前 阅读 2726 评论 94 点赞 16

解Bug之路-TCP粘包Bug

#解Bug之路-TCP粘包Bug #前言 ##关于TCP流 TCP是流的概念,解释如下 ``` TCP窗口的大小取决于当前的网络状况、对端的缓冲大小等等因素, TCP将这些都从底层屏蔽。开发者无法从应用层获取这些信息。 这就意味着,当你在接收TCP数据流的时候无法知道当前接收了 有多少数据流,数据可能在任意一个比特位(seq)上。 ``` 详情见笔者另一篇博客https://my.oschina.net/alchemystar/blog/833937 ##关于"粘包" 由于TCP流的特性,经常发生一个收到多于(长连接)或者小于当前包字节数的情况,看起来像一个包后面"粘着"后面包的一点内容,所以被应用层的人形象的称为"粘包",这个概念不是笔者发明的,老早就这么叫了。 ##关于流和"粘包" TCP流本身就是操作系统在屏蔽了mac帧、ip包这些底层概念与细节后抽象出来的概念。如果较真,TCP流在网络层也是由ip包一个一个传输组装而来。 TCP本身把底层的各种细节屏蔽抽象成"流"。 应用层的人把TCP导致的收多了(长连接)收不满的现象抽象成"粘包"。 笔者觉得无可厚非,无高下之分。 ##关于喷子 喷子有个特点,就是不看文章内容,只要和他所想不和,就开始喷。 笔者搞过协议栈,完整分析过三个协议栈(从ARP到TCP,分别是lwip、BsdTcp,xinu)的源码,...
无毁的湖光-Al 发布于 2周前 阅读 3037 评论 101 点赞 16

mybatis思维导图,让mybatis不再难懂(一)

>写在前面 与hibernate相比,我无疑更喜欢mybatis,就因为我觉得它真的好用,哈哈。它简单上手和掌握;sql语句和代码分开,方便统一管理和优化;当然缺点也有:sql工作量很大,尤其是字段多、关联表多时,更是如此。而且sql依赖于数据库,导致数据库移植性差。 选用一个框架之前最好先了解它的优缺点,对项目最好用,效率最高的才是一个你最好的选择。 >mybatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 >直接上思维导图 ![1、mybatis简介.png](http://upload-images.jianshu.io/upload_images/4120002-8593f17572d1a1b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![2、与hibernate对比.png](http://upload-images.jianshu.io/upload_images/4120002-fe73ae40aeece93e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![3、几个关键类.png ](http://upload-images.jianshu.io/upload_images/412000...
java思维导图 发布于 2周前 阅读 7877 评论 27 点赞 25

Spring Boot 整合 Redis 实现缓存操作

摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 产品没有价值,开发团队再优秀也无济于事 – 《启示录》 』 本文提纲 一、缓存的应用场景 二、更新缓存的策略 三、运行 springboot-mybatis-redis 工程案例 四、springboot-mybatis-redis 工程代码配置详解   运行环境: Mac OS 10.12.x JDK 8 + Redis 3.2.8 Spring Boot 1.5.1.RELEASE   强烈推荐读者 -  「springboot-learning-example」开源项目,Star 一下 spring boot 实践学习案例,是 spring boot 初学者及核心技术巩固的最佳实践。 https://git.oschina.net/jeff1993/springboot-learning-example     一、缓存的应用场景 什么是缓存? 在互联网场景下,尤其 2C 端大流量场景下,需要将一些经常展现和不会频繁变更的数据,存放在存取速率更快的地方。缓存就是一个存储器,在技术选型中,常用 Redis 作为缓存数据库。缓存主要是在获取资源方便性能优化的关键方面。 Redis 是一个高性能的 key-value 数据库。GitHub 地址:https://github.com/antirez/redis 。Github 是这么描述的: Redis is an in-memory database that persists on disk. The data model is key-va...
泥沙砖瓦浆木匠 发布于 2周前 阅读 3292 评论 14 点赞 1

Java泛型总结

什么是泛型 --- 泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。 泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用object并在需要时再强制类型转换的机制具有更好的可读性和安全性。 泛型程序设计意味着程序可以被不同类型的对象重用,类似c++的模版。 泛型对于集合类尤其有用,如`ArrayList`。这里可能有疑问,既然泛型为了适应不同的对象,`ArrayList`本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个`Object`对象的数组。结果就是对List来说它只操作了一类对象`Object`,而在用户看来却可以保存不同的对象。 泛型提供了更好的解决办法——类型参数,如: ```js List list = new ArrayList(); ``` 这样解决了几个问题: 1 可读性,从字面上就可以判断集合中的内容类型; 2 类型检查,避免插入非法类型。 3 获取数据时不在需要强制类型转换。 泛型类 --- ```java public class Pair{ private T field1; } ``` 其中 `` 是类型参数定义。 使用时:`Pair p = new Pair();` 此时类内部的`field1`就是字符串类型了。 如果引用多个类型,可以使用逗号...
polly 发布于 3周前 阅读 4227 评论 7 点赞 15

负载均衡原理的解析

开头先理解一下所谓的“均衡” 不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就是希望所有服务器都不要过载,并且能够最大程序地发挥作用。 一、http重定向 当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。 性能缺陷: 1、吞吐率限制 主站点服务器的吞吐率平均分配到了被转移的服务器。现假设使用RR(Round Robin)调度策略,子服务器的最大吞吐率为1000reqs/s,那么主服务器的吞吐率要达到3000reqs/s才能完全发挥三台子服务器的作用,那么如果有100台子服务器,那么主服务器的吞吐率可想而知得有大?相反,如果主服务的最大吞吐率为6000reqs/s,那么平均分配到子服务器的吞吐率为2000reqs/s,而现子服务器的最大吞吐率为1000reqs/s,因此就得增加子服务器的数量,增加到6个才能满足。 2、重定向访问深度不同 有的重定向一个静态页面,有的重定向相比复杂的动态页面,那么实际服务器的负载差异是...
源子姗 发布于 3周前 阅读 3913 评论 9 点赞 3

Spring Cloud 项目综述(技术栈一览)

Spring Cloud 为构建分布式系统和微服务提供了一些通用的工具,例如:配置中心,服务注册与发现,熔断器,路由,代理,控制总线,一次性令牌,全局锁,leader选举,分布式 会话,集群状态等。
侯法超 发布于 3周前 阅读 4110 评论 13 点赞 15

Java 的泛型擦除和运行时泛型信息获取

# 前言 现在很多程序员都会在简历中写上精通 Java。但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌握 Java 语法和 JDK 的使用,还需要对 Java 这门语言的各方面原理有深入的了解。除了像并发、JVM 等方面,以及软引用、弱引用等高级知识以外,其实很多我们每天接触到的 Java 特性里面也是另有乾坤。Java 5 引入的泛型便是其中之一。本文这里不谈泛型的使用以及泛型方法、泛型类的定义,这些东西很多书和文章都讲了。本文将介绍一下 Java 泛型的擦除和运行时泛型获取这两个看似矛盾的特性。 # Java 的泛型擦除 程序员界有句流行的话,叫 talk is cheap, show me the code,所以话不多说,看代码。 ## 代码一 ```java Class c1 = new ArrayList().getClass(); Class c2 = new ArrayList().getClass(); System.out.println(c1 == c2); /* Output true */ ``` `ArrayList` 和 `ArrayList` 在编译的时候是完全不同的类型。你无法在写代码时,把一个 String 类型的实例加到 `ArrayList` 中。但是在程序运行时,的的确确会输出true。 这就是 Java 泛型的类型擦除造成的,因为不管是 `ArrayList` 还是 `ArrayList`,在编译时都会被编译器擦除成了 `ArrayList`。Java 之所以要避...
编走编想 发布于 3周前 阅读 1780 评论 11 点赞 7

微服务常用技能之优雅的重试

一般从事软件开发工作的同时通常需要调用远程服务,但是即使是亚马逊、阿里巴巴、腾讯这些巨头提供的服务也可能因为网络或者服务高可用方面的一些问题,或许会遇到超时等异常情况,这时候我们就必需要考虑到异常情况下我们的应用如何能处变不惊处理这些异常,是直接抛出异常还是说可以自动进行一些处理呢? 通常情况下我们首先想到的解决方案一定是重试对吧。 我看过很多代码,他们都怎么写的呢,如下 public String invoke(int times) {    for(int i = 0; i < times; i ++) {        try{            // do some thing            // return        }catch(Exception e) {            return invoke(i);        }    } } 上面的代码意思是首先传入一个次数参数,假设我们传递的是3,那么当遇到异常的时候,重新调用当前方法,次数变为2… 你有没有发现如果调用外部服务很多的时候,这样的for循环写的让人不舒服,因为都是重复的代码,而且显的很啰嗦呢,spring boot给我们带来了一些福音,我们看看spring boot框架下如何进行重试 1、 首先引入JAR包 <dependency>    <groupId>org.springframework.retry</groupId>    <...
稻草鸟人 发布于 3周前 阅读 2582 评论 20 点赞 4

是时候使用Vue2和Yii2进行前后端分离开发啦

本文介绍使用Vue2单页面程序作为前台,以Yii2搭建后台提供API,进行前后端分离开发的入门知识。本文适合Vue2,Yii2爱好者观看。预计花费时间30分钟,跟随教程操作。
_Elvis 发布于 3周前 阅读 4032 评论 16 点赞 8

SSM(十一) 基于dubbo的分布式架构

![dubbo.jpg](https://ooo.0o0.ooo/2017/04/06/58e649d664665.jpg) # 前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的`SSM`项目来让第一次接触的同学能快速上手。 # 浅谈分布式架构 `分布式架构`单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。 > 我们拿一个电商系统来说: ## 单系统 ![E65B5547-AF84-4D31-836D-72892C7AC7EA.png](https://ooo.0o0.ooo/2017/04/06/58e651937130f.png) 对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。 这时候所有的业务逻辑都是在一个项目中就可以满足。 ## 垂直拆分-多应用 ![QQ20170406-230056@2x.jpg](https://ooo.0o0.ooo/2017/04/06/58e65856cf18a.jpg) 当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用`Nginx`进行反向代理和简单的负载均衡。 ## SOA服务化 当整个系统以及发展的足够大的时候,比如一个电商系统中存在有: * 用户系统 * 订单系统 * 支付系统 * 物流系统 等系统。 如果每次修改了其中一个系统就要重新发布上线的话那么耦合就...
crossoverJie 发布于 3周前 阅读 3929 评论 9 点赞 9
顶部