整理分享尚硅谷全套资源

【尚硅谷官网资料导航】

谷粒学院在线学习:http://www.gulixueyuan.com/

免直播课:www.atguigu.com/online.shtml 

全套免费视频教程:www.atguigu.com/download.shtml

开发工具、技术文档、jar包资料:www.atguigu.com/opensource.shtml 

自学尚硅谷视频,拿1万+月薪?看网友评价:www.atguigu.com/videoevaluation.shtml 

【全套Java教程–打包下载地址】

Java基础阶段

一、20天横扫Java基础(课堂实录)

https://pan.baidu.com/s/1htTzZRQ

二、尚硅谷Java基础实战——Bank项目

http://pan.baidu.com/share/link?shareid=3690978764&uk=573533038

三、尚硅谷_ORACLE、SQL、PLSQL 视频教程

https://pan.baidu.com/s/1ghb9ENL

四、尚硅谷JDBC视频教程

https://pan.baidu.com/s/1c3XBTk8

五、Java8新特性 

 http://pan.baidu.com/s/1cgWOH4

六、Java——JUC

 http://pan.baidu.com/s/1hsoh76k

七、Java——NIO

http://pan.baidu.com/s/1c2N1ADy

八、最新Java9新特性 视频

        链接: https://pan.baidu.com/s/1ge85H4Z

密码: 9e1k

JavaWeb阶段

一、尚硅谷_JavaScript DOM编程视频教程

https://pan.baidu.com/s/1dzPYA6

二、尚硅谷jQuery 视频教程

https://pan.baidu.com/s/1jJkaWya

三、尚硅谷Ajax视频教程

https://pan.baidu.com/s/1skDOKZ7

四、尚硅谷JavaWeb视频基础

(涵盖JavaWEB 企业级开发所需的Servlet、JSP、MVC 设计模式、EL 表达式、JavaBean、国际化、Cookie和HttpSession、JavaMail等全部核心技术。)

       https://pan.baidu.com/s/1kU6Ley7

五、尚硅谷JavaWEB 项目实战(图书商城)

https://pan.baidu.com/s/1jIoAMKe

JavaEE阶段

一、尚硅谷Struts2视频教程

       https://pan.baidu.com/s/1jI6xxkE

二、尚硅谷Hibernate 4视频教程

https://pan.baidu.com/s/1bqpEEej

三、尚硅谷Spring 4视频教程

https://pan.baidu.com/s/1Qk_-M7AMg3mLJjarYsaNbQ

四、尚硅谷SSH整合&综合案例视频

https://pan.baidu.com/s/1dFbTMxV

五、尚硅谷SVN视频教程

https://pan.baidu.com/s/1kWZz9vp

六、尚硅谷SpringMVC视频教程

?    https://pan.baidu.com/s/1gfoaUw7

七、尚硅谷JPA视频教程

https://pan.baidu.com/s/1hsqGMOW

八、尚硅谷SpringData视频

https://pan.baidu.com/s/1c38938W

九、尚硅谷SSSP整合&分页视频

https://pan.baidu.com/s/1miEVgr2

十、尚硅谷Redis视频

http://pan.baidu.com/s/1pLKsBOJ

十一、  尚硅谷Maven视频

https://pan.baidu.com/s/1dHfbx8d

十二、  尚硅谷Shiro视频

https://pan.baidu.com/s/1yXiOStKfxSCYoMHsNrnCFQ

十三、  尚硅谷MySQL高级视频

 https://pan.baidu.com/s/1i7ircH3

十四、 尚硅谷MyBatis 视频 

        https://pan.baidu.com/s/1snbVg77

十五、尚硅谷SSM高级视频

        https://pan.baidu.com/s/1eTcHjRc

十六、尚硅谷MySQL基础视频178集

https://pan.baidu.com/s/1mjCyBm4

   密码: p03n

十七、最新尚硅谷Spring注解驱动开发

     https://pan.baidu.com/s/1SzHGre2Upj8NzzGZ_6qM4Q

十八、最新尚硅谷SpringBoot视频

    https://pan.baidu.com/s/1isXPv_NrBX2Fuf9pRLU2sQ

密码: sya6   

     

十九、最新尚硅谷Mapper视频

https://pan.baidu.com/s/1yfzUkHjMiF613uiiM5KBYw

     密码:l0xw

二十、最新尚硅谷Linux视频

    https://pan.baidu.com/s/1AmDqMODihyifgW9gevrSwA

      密码:kxpp

二十、最新尚硅谷SVN高级视频

https://pan.baidu.com/s/1ADe9Db5ZbcKC4I_V2RiwDw

      密码:6ean

二十一、最新尚硅谷SpringCloud视频

  https://pan.baidu.com/s/1nB23cEOZJmbCkJebAU4hCg

 密码:w4vq

【全套Android教程–打包下载地址】

Android核心技术

一、Android核心基础_15天精讲精练

   https://pan.baidu.com/s/1b86u2E

二、Android自定义控件视频

https://pan.baidu.com/s/1hrOVZd6

三、Android—JNI视频

http://pan.baidu.com/s/1kVqBCmr

四、Android与H5互调

https://pan.baidu.com/s/1miHaDbM

五、Android常用第三方框架源码分析

http://pan.baidu.com/s/1o789Vjc

六、尚硅谷Android视频《多渠道打包》

http://pan.baidu.com/s/1dEVpQyX

Android项目实战

一、Android项目实战—手机影音

http://pan.baidu.com/s/1i5wLMbN

二、最新Android项目—硅谷新闻

https://pan.baidu.com/s/1nvASXvF

三、最新Android项目实战—硅谷社交

https://pan.baidu.com/s/1dFyXZxR

四、最新Android项目—硅谷商城[新]

http://pan.baidu.com/s/1o8MyptC

五、最新Android项目—硅谷P2P金融

https://pan.baidu.com/s/1KJbXUd3ymMhmJUPCqT9gzA

Android前沿技术

一、Android_软件框架搭建

https://pan.baidu.com/s/1hsFIYig

二、Android_OKHttp使用方法

https://pan.baidu.com/s/1c5McVW

三、Android_JSON解析

http://pan.baidu.com/s/1c23eePE

四、Android_xUtils3

https://pan.baidu.com/s/1nvGsExF

五、Android_Afinal

http://pan.baidu.com/s/1c7lXH8

六、Android_Volley

http://pan.baidu.com/s/1jIkBalg

七、Android_ButterKnife

http://pan.baidu.com/s/1pKOgh9x

八、Android_EventBus

http://pan.baidu.com/s/1qXYTyA4

九、Android_ImageLoader

http://pan.baidu.com/s/1o7DsPmy

十、Android_Picasso

http://pan.baidu.com/s/1c1JITo8

十一、Android_Glide

http://pan.baidu.com/s/1hswlhu0

十二、Android_Fresco

http://pan.baidu.com/s/1qXHtwdA

十三、Android_RecyclerView

http://pan.baidu.com/s/1kVjTLJ5

十四、Android_Pulltorefresh

http://pan.baidu.com/s/1c20xVm4

十五、 Android_UniversalVideoView

http://pan.baidu.com/s/1mhEK9EK

十六、 Android_JieCaoVideoPlayer 

   https://pan.baidu.com/s/1geZZ1Ov

十七、 Android_Banner

https://pan.baidu.com/s/1nv2jpDB

十八、CountdownView秒杀

https://pan.baidu.com/s/1nvAWFMT

十九、OpenDanmaku弹幕

https://pan.baidu.com/s/1eS2x2Hc

二十、TabLayout&ViewPager?

https://pan.baidu.com/s/1mhCKJag#list/path=%2F

【全套H5前端教程–打包下载地址】

一、HTML & CSS 核心教程:(103集实战教学,从入门到精通)

     http://pan.baidu.com/s/1pLwKZN1

二、尚硅谷JavaScript视频(140集实战教学,从入门到精通)

https://pan.baidu.com/s/1gfh9q8r

三、尚硅谷JavaScript高级视频

https://pan.baidu.com/s/1cLhs0u

四、尚硅谷jQuery视频

https://pan.baidu.com/s/1i5Gjxlj

五、最新尚硅谷NodeJS 视频

链接: https://pan.baidu.com/s/1cnr0Cm

密码: sqku

六、最新尚硅谷MongoDB 视频 

链接: https://pan.baidu.com/s/1mirGFyw

密码: nwe1

七、最新尚硅谷Zepto 视频

链接: https://pan.baidu.com/s/1o7PSymu

密码: e86p

八、最新尚硅谷AngularJS 视频

链接: https://pan.baidu.com/s/1o85jOVK

密码: 7vi2

九、最新尚硅谷ES5_6_7 视频

链接: https://pan.baidu.com/s/1i4Z5VNZ

密码: 3fuy

十、最新尚硅谷JS模块化 视频

链接: https://pan.baidu.com/s/1skO0tJZ

密码: tekn

十一、最新尚硅谷自动化构建工具 视频

(1)webpack  链接: https://pan.baidu.com/s/1kUG5cLT 密码: ru45

(2)Gulp     链接: https://pan.baidu.com/s/1hsMqZkS 密码: nprj 

(3)Grunt    链接: https://pan.baidu.com/s/1bGhxL0 密码: m7kq

十二、最新尚硅谷React视频

https://pan.baidu.com/s/1MSNJW3Uw6g7y70nDRfF9Bg

密码:rlhr

十三、最新尚硅谷CSS2.1 视频

链接:https://pan.baidu.com/s/1ggA6SPt

密码:jybl

十三、最新尚硅谷CSS3 视频

     链接:https://pan.baidu.com/s/1bqiUHYZ

 密码:jojr

十四、最新尚硅谷less 视频

链接:https://pan.baidu.com/s/1jJFk5MI

密码:izzk

十五、最新尚硅谷bootstrap 视频

   链接:https://pan.baidu.com/s/1eTxHHN8

 密码:hzet

十六、最新尚硅谷HTML5核心视频

   https://pan.baidu.com/s/18hy_J8FdmBYabVGU8BqVKA

 密码:3fhg

十七、最新尚硅谷HTML5实战视频

   https://pan.baidu.com/s/1ipfFFhtWGvNuCMicxnzQdw

密码:dehi

十八、最新尚硅谷HTML5项目-谷粒音乐

   https://pan.baidu.com/s/1u6LBOWa9QCpETeC3gjzojw

   密码:plb6

【35季公开课教程-打包地址下载】

第1季:横扫Java基础核心技术 

  https://pan.baidu.com/s/1cGZpyY

第2季:Java基础加强 

  https://pan.baidu.com/s/1qXNcgpu

第3季:数据库关键技术 

  https://pan.baidu.com/s/1dEHsT0H

特别季:光棍节,4晚搞定面向对象 

  https://pan.baidu.com/s/1skTfGyp

第4季:Java就业面试攻略(含:简历模板、面试技巧) 

  https://pan.baidu.com/s/1hsQWvVQ

第5季:JavaWeb书城实战 

  https://pan.baidu.com/s/1dFOuFbb

第6季:Android从入门到实战 

  https://pan.baidu.com/s/1pL7LnUN

第7季:锋利的JavaScript 

  https://pan.baidu.com/s/1bKgJxW

第8季:从容面对Java基础笔试&面试 

  https://pan.baidu.com/s/1slVxKjN

附加课:最流行的JS框架_jQuery 

  https://pan.baidu.com/s/1dEX7Ozv

第9季:Android实战_来电拦截专家 

  https://pan.baidu.com/s/1cAnHam

第10季:Java基础实战_战队组建管理系统 

  https://pan.baidu.com/s/1o7TlL2a

第11季:深入解析Ajax网页无刷新技术与项目实战 

  https://pan.baidu.com/s/1hs7Z3cK

第12季:30分钟打造Android万能播放器

  https://pan.baidu.com/s/1gfq0FS3

第13季:Android高薪就业攻略 

  https://pan.baidu.com/s/1jIEbd4a

第14季:客户信息管理系统 

  https://pan.baidu.com/s/1c2niZJE

辅导课:Android全套视频-学习指导&答疑 

  https://pan.baidu.com/s/1b9X0Sm

第15季:Android Studio入门及使用技巧 

  https://pan.baidu.com/s/1nv63xHZ

第16季:玩转Android与H5互调 

  https://pan.baidu.com/s/1dFo2PNF

第17季:HTML5实战_天猫商城品牌墙 

  https://pan.baidu.com/s/1hr4v8Pm

第18季:全栈开发_node服务端开发 

  https://pan.baidu.com/s/1hrOEuuK

第19季:实战:360度全景图片 

  https://pan.baidu.com/s/1hsKkPJQ

第20季:HTML5特效实战 

  https://pan.baidu.com/s/1kVBrpZp

第21季:3小时玩转微信小程序入门 

  https://pan.baidu.com/s/1eUnMTii

第22季:CSS3特效实战 

  https://pan.baidu.com/s/1dESOjFr

第23季:轻松搞定毕业设计:论文写作+项目实战 

  https://pan.baidu.com/s/1eS2DVjW

第24季:Java8新特性全剖析 

  https://pan.baidu.com/s/1boL0IMr

第25季:BAT前端面试揭秘 

  https://pan.baidu.com/s/1i4WdO4t

第26季:1小时带你走进大数据世界 

  https://pan.baidu.com/s/1c4NYTC

第27季:大数据项目实战–仿天猫用户行为分析 

  https://pan.baidu.com/s/1dEKGHQL

第28季:如何做互联网时代的“出彩”Java工程师 

  https://pan.baidu.com/s/1nvFqWHF

第29季:下一个风口–Python与人工智能 

  https://pan.baidu.com/s/1nuS7Qwp

第30季:1小时解密程序员的黑魔法Python 

  https://pan.baidu.com/s/1kV9Voyj

第31季:1小时参悟Java8面向对象 

  https://pan.baidu.com/s/1hsAHvbI

第32季:更好的Java IDE之争:IDEA挑战Eclipse 

  https://pan.baidu.com/s/1c2LEPJ6

第33季:Python学员作品之《雷电战机》 

  https://pan.baidu.com/s/1o7Ha6eA

第34季:HTML5实战之Canvas刮刮卡 

  https://pan.baidu.com/s/1ge7Lw9l

第35季:强大的R语言 

  https://pan.baidu.com/s/1gfENmeR

第36季:毕业的三岔口

https://pan.baidu.com/s/1o8qmSlk

 

第37季:模块化打包神器:pack

   http://pan.baidu.com/s/1nvxHvnz

 

第38季:快速入门JVM

   http://pan.baidu.com/s/1pKHalAz

第39季:抛开噱头,看大数据与人工智能

   https://pan.baidu.com/s/1c20dj1m

第40季:Java8&9就业面试攻略

   https://pan.baidu.com/s/1nv45pZr

?

第41季:大话浏览器渲染原理

https://pan.baidu.com/s/1pMMz1I7#list/path=%2F

第42季: Python核心语法实战:学生管理系统

  https://pan.baidu.com/s/1dGmSNeh#list/path=%2F

第43季:移动端重力感应:摇一摇的实现

  https://pan.baidu.com/s/1NcKhY5HAr0THWG-V22X0cg#list/path=%2F

公开课:Spring Boot实战/Spring Cloud

  https://pan.baidu.com/s/1c-P-tKiRUfJsD4L7uKl7Ug#list/path=%2F

公开课:大数据架构师课程:高薪实战课程

  https://pan.baidu.com/s/15mBp1rNPoOHMnlILDYQXjw#list/path=%2F

公开课:大数据项目实战–智慧出行

  https://pan.baidu.com/s/19SncMsfajhDGIAzoFHlpdA

公开课:从比特币到区块链

  https://pan.baidu.com/s/1CV0lEq-5x8bYRHsLDKEe1g#list/path=%2F

 

【开发工具、技术文档、jar包资料】:

 Java:

java基础文档:https://pan.baidu.com/s/1o8A5kKy

JavaWeb技术文档:https://pan.baidu.com/s/1c1KcMNu

  javaee技术文档:https://pan.baidu.com/s/1dFwAuNR

  教学课件:https://pan.baidu.com/s/1c2tUAHU

  就业相关:https://pan.baidu.com/s/1slv5Yrz

  Java开发工具:http://www.atguigu.com/opensource.shtml

  

Jar: https://pan.baidu.com/s/1jIKMHcM

Android:

Android内部讲课文档:https://pan.baidu.com/s/1bpnkZCV

  Android技术文档:https://pan.baidu.com/s/1o78TbUM

  Android使用工具:https://pan.baidu.com/s/1skZRoLZ

  

  Android框架包清单:https://pan.baidu.com/s/1skLEly9

前端H5:

  开发工具:https://pan.baidu.com/s/1jH8vplG

  技术文档:https://pan.baidu.com/s/1mhZv3q4

  框架包: https://pan.baidu.com/s/1nvBThmp

  Jar:https://pan.baidu.com/s/1pKY9yAZ

使用redux过程中遇到Actions must be plain objects. Use custom middleware for async actions.异常的分析

原文
原因一:使用异步actions时,没有配置redux-thunk这个中间件
中间件就是一个函数,对store.dispatch方法进行了改造,在发出 Action 和执行 Reducer 这两步之间,添加了其他功能。

import { applyMiddleware, createStore } from 'redux';
import createLogger from 'redux-logger';
const logger = createLogger();

const store = createStore(
  reducer,
  applyMiddleware(logger)
);

上面代码中,redux-logger提供一个生成器createLogger,可以生成日志中间件logger。然后,将它放在applyMiddleware方法之中,传入createStore方法,就完成了store.dispatch()的功能增强。

const store = createStore(
  reducer,
  applyMiddleware(thunk, promise, logger)
);

applyMiddleware 是Redux 的原生方法,作用是将所有中间件组成一个数组,依次执行。

原因二:调用action方法时,方法体内部并没有调用dispatch。

/**
 * 加载路由或iframe
 *
 * @param menu      需要加载的菜单
 */
export function onLoadMain(menu) {
    let routeUrl = menu.routeurl;
    let url = menu.url;
    console.log("routeUrl : ",routeUrl);
    if (routeUrl) {
        weaHistory.push({pathname: routeUrl});

        document.getElementById('e9frameMain').style.visibility = 'hidden';
        document.getElementById('e9routeMain').style.display = 'block';
        // let mainframe = document.getElementById('mainFrame');
        // mainframe.src = 'about:blank';
        document.getElementById('mainFrame').src = 'about:blank';
    } else if (url && url != 'javascript:void(0);') {
        let target = menu.target || 'mainFrame';
        if ('mainFrame' != target) {
            window.open(url, target);
        } else {
            // let mainframe = document.getElementById('mainFrame');
            // mainframe.src = url;
            document.getElementById('mainFrame').src = url;
            document.getElementById('e9frameMain').style.visibility = 'visible';
            document.getElementById('e9routeMain').style.display = 'none';
        }
    }
}

以上是一个普通的function,放在action的js文件中,如果你使用了如下方式去调用这个方法,虽然能成功调用,但在配置了redux-thunk这个中间件的情况下,你发起的任何action方法,都会走thunk这个中间件,一旦方法体内没有dispatch这个方法,则会报Actions must be plain objects. Use custom middleware for async actions这个异常。

import * as themeActions from '../../../actions/theme';

handleClick(e) {

        const {actions}=this.props;
        let urlParams= {
            iframeUrl: e.key,
            routeUrl:e.item.props.routeurl
        }

        actions.updateMenusUrl(urlParams);*/
        let menuInfo={
            routeurl:e.item.props.routeurl,
            url: e.key,
            target:'mainFrame'
        }
        //通过派生action的形式来调用这个方法
        actions. onLoadMain(menuInfo);

function mapStateToProps(state) {
    const {middleTheme} = state;

    return {
        backEndMenuUrl: middleTheme.get('backEndMenuUrl'),
        columnMenuInfo:middleTheme.get('columnMenuInfo')
    }
}

function mapDispatchToProps(dispatch) {
    return {
        actions: bindActionCreators(themeActions, dispatch)
    };
}

module.exports = connect(mapStateToProps, mapDispatchToProps)(E9LeftMenusTree);

所以常规function最好通过import导入的形式去调用就OK了,如下:

import {onLoadMain} from '../../../actions/theme';

handleClick(e) {

        const {actions}=this.props;
        let urlParams= {
            iframeUrl: e.key,
            routeUrl:e.item.props.routeurl
        }

        actions.updateMenusUrl(urlParams);*/
        let menuInfo={
            routeurl:e.item.props.routeurl,
            url: e.key,
            target:'mainFrame'
        }
        //常规import组件形式调用function
        onLoadMain(menuInfo);
    }

最后分享下我在解决这个问题中参考的阮大大的关于redux中间件的介绍:Redux中间件和异步操作

memcached 启动参数 和 stat 参数详解

/usr/local/bin/memcached -u root -c 50000 -t 8 -m 256 -l 192.168.1.101 -p 11211 -d
-p <num>      监听的TCP端口(默认: 11211)
-U <num>      监听的UDP端口(默认: 11211, 0表示不监听)
-s <file>     用于监听的UNIX套接字路径(禁用网络支持)
-a <mask>     UNIX套接字访问掩码,八进制数字(默认:0700)
-l <ip_addr>  监听的IP地址。(默认:INADDR_ANY,所有地址)
-d            作为守护进程来运行
-r            最大核心文件限制
-u <username> 设定进程所属用户。(只有root用户可以使用这个参数)
-m <num>      所有slab class可用内存的上限,以MB为单位。(默认:64MB)
              (译者注:也就是分配给该memcached实例的内存大小。)
-M            内存用光时报错。(不会删除数据)
-c <num>      最大并发连接数。(默认:1024)
-k            锁定所有内存页。注意你可以锁定的内存上限。
              试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。
              (不是前面的 -u <username> 参数;在sh下,使用命令"ulimit -S -l NUM_KB"来设置。)
-v            提示信息(在事件循环中打印错误/警告信息。)
-vv           详细信息(还打印客户端命令/响应)
-vvv          超详细信息(还打印内部状态的变化)
-h            打印这个帮助信息并退出
-i            打印memcached和libevent的许可
-P <file>     保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义
-f <factor>   不同slab class里面的chunk大小的增长倍率。(默认:1.25)
              (译者注:每个slab class里面有相同数量个slab page,每个slab page里面有chunk,且在当前slab class内的chunk大小固定。
              而不同slab class里的chunk大小不一致,具体差异就是根据这个参数的倍率在增长,直到分配的内存用尽。)
-n <bytes>    chunk的最小空间(默认:48)
              (译者注:chunk数据结构本身需要消耗48个字节,所以一个chunk实际消耗的内存是n+48。)
-L            尝试使用大内存页(如果可用的话)。提高内存页尺寸可以减少"页表缓冲(TLB)"丢失次数,提高运行效率。
              为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块。
-D <char>     使用 <char> 作为前缀和ID的分隔符
              这个用于按前缀获得状态报告。默认是":"(冒号)
              如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令"stats detail on"来开启。
-t <num>      使用的线程数(默认:4)
-R            每个连接可处理的最大请求数
-C            禁用CAS
-b            设置后台日志队列的长度(默认:1024)
-B            绑定协议 - 可能值:ascii,binary,auto(默认)
-I            重写每个数据页尺寸。调整数据项最大尺寸
echo -e "stats\nquit\n" | /usr/bin/nc 192.168.1.101 11211
STAT pid 20487               ## memcache 进程PID
STAT uptime 1977637         ## 自memcache启动以来,服务器运行秒数
STAT time 1461202739       ## 服务器当前unix时间戳
STAT version 1.4.21      ## memcache 服务器版本
STAT libevent 1.4.13-stable      ## libevent 版本
STAT pointer_size 64      ##  架构(32 或 64 位)
STAT rusage_user 150.835069      ## 进程累计用户时间
STAT rusage_system 249.086133      ## 进程累计系统时间
STAT curr_connections 10      ## 当前打开连接数
STAT total_connections 5509      ## 自memcache启动以来,打开的连接总数
STAT connection_structures 11      ## 服务器分配的连接结构数
STAT reserved_fds 40      ## 
STAT cmd_get 8913248      ## 自memcache启动以来,执行get命令总数
STAT cmd_set 123382      ## 自memcache启动以来,执行set命令总数
STAT cmd_flush 0      ## 自memcache启动以来,执行flush命令总数
STAT cmd_touch 0      ## 自memcache启动以来,执行touch_all命令总数
STAT get_hits 8913074      ## 自memcache启动以来,get命中次数
STAT get_misses 174      ## 自memcache启动以来,get未命中次数
STAT delete_misses 0      ## 自memcache启动以来,delete未命中次数
STAT delete_hits 0      ## 自memcache启动以来,delete命中次数
STAT incr_misses 0      ## 自memcache启动以来,incr未命中次数
STAT incr_hits 0      ## 自memcache启动以来,incr命中次数
STAT decr_misses 0      ## 自memcache启动以来,decr未命中次数
STAT decr_hits 0      ## 自memcache启动以来,decr命中次数
STAT cas_misses 0      ## 自memcache启动以来,cas未命中次数
STAT cas_hits 0      ## 自memcache启动以来,cas命中次数
STAT cas_badval 0      ## 使用擦拭次数
STAT touch_hits 0      ## 自memcache启动以来,touch命中次数
STAT touch_misses 0      ## 自memcache启动以来,touch未命中次数
STAT auth_cmds 0      ##
STAT auth_errors 0      ##
STAT bytes_read 111225505      ## memcached服务器从网络读取的总的字节数
STAT bytes_written 3621054898      ## memcached服务器发送到网络的总的字节数
STAT limit_maxbytes 33554432      ## memcached服务缓存允许使用的最大字节数(分配的内存数)
STAT accepting_conns 1      ## 目前接受的链接数
STAT listen_disabled_num 0      ##
STAT threads 8      ## 被请求的工作线程的总数量
STAT conn_yields 0      ## 连接操作主动放弃数目
STAT hash_power_level 16      ##
STAT hash_bytes 524288      ##
STAT hash_is_expanding 0      ##
STAT malloc_fails 0      ## 
STAT bytes 384154      ## 存储item字节数(当前存储占用的字节数)
STAT curr_items 856      ## item个数(当前存储的数据总数)
STAT total_items 123382      ## item总数(启动以来存储的数据总数)
STAT expired_unfetched 0      ##
STAT evicted_unfetched 0      ##
STAT evictions 0      ## LRU释放的对象数目。为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象
STAT reclaimed 0      ## 已过期的数据条目来存储新数据的数目
STAT crawler_reclaimed 0      ##
STAT lrutail_reflocked 0      ##
END

判断一个点是否在一个多边形里

“判断一个点是否在一个多边形里”,一开始以为是个挺难的问题,但Google了一下之后发现其实蛮简单,所用到的算法叫做“Ray-casting Algorithm”,中文应该叫“光线投射算法”,这是维基百科的描述:[维基百科]

简单地说可以这么判断:从这个点引出一根“射线”,与多边形的任意若干条边相交,累计相交的边的数目,如果是奇数,那么点就在多边形内,否则点就在多边形外。

阅读详细

from collections import namedtuple
from pprint import pprint as pp
import sys
 
Pt = namedtuple('Pt', 'x, y')               # Point
Edge = namedtuple('Edge', 'a, b')           # Polygon edge from a to b
Poly = namedtuple('Poly', 'name, edges')    # Polygon
 
_eps = 0.00001
_huge = sys.float_info.max
_tiny = sys.float_info.min
 
def rayintersectseg(p, edge):
    ''' takes a point p=Pt() and an edge of two endpoints a,b=Pt() of a line segment returns boolean
    '''
    a,b = edge
    if a.y > b.y:
        a,b = b,a
    if p.y == a.y or p.y == b.y:
        p = Pt(p.x, p.y + _eps)
 
    intersect = False
 
    if (p.y > b.y or p.y < a.y) or ( p.x > max(a.x, b.x)):
        return False
 
    if p.x < min(a.x, b.x): intersect = True else: if abs(a.x - b.x) > _tiny:
            m_red = (b.y - a.y) / float(b.x - a.x)
        else:
            m_red = _huge
        if abs(a.x - p.x) > _tiny:
            m_blue = (p.y - a.y) / float(p.x - a.x)
        else:
            m_blue = _huge
        intersect = m_blue >= m_red
    return intersect
 
def _odd(x): return x%2 == 1
 
def ispointinside(p, poly):
    ln = len(poly)
    return _odd(sum(rayintersectseg(p, edge)
                    for edge in poly.edges ))
 
def polypp(poly):
    print "\n  Polygon(name='%s', edges=(" % poly.name
    print '   ', ',\n    '.join(str(e) for e in poly.edges) + '\n    ))'
 
if __name__ == '__main__':
    polys = [
      Poly(name='square', edges=(
        Edge(a=Pt(x=0, y=0), b=Pt(x=10, y=0)),
        Edge(a=Pt(x=10, y=0), b=Pt(x=10, y=10)),
        Edge(a=Pt(x=10, y=10), b=Pt(x=0, y=10)),
        Edge(a=Pt(x=0, y=10), b=Pt(x=0, y=0))
        )),
      Poly(name='square_hole', edges=(
        Edge(a=Pt(x=0, y=0), b=Pt(x=10, y=0)),
        Edge(a=Pt(x=10, y=0), b=Pt(x=10, y=10)),
        Edge(a=Pt(x=10, y=10), b=Pt(x=0, y=10)),
        Edge(a=Pt(x=0, y=10), b=Pt(x=0, y=0)),
        Edge(a=Pt(x=2.5, y=2.5), b=Pt(x=7.5, y=2.5)),
        Edge(a=Pt(x=7.5, y=2.5), b=Pt(x=7.5, y=7.5)),
        Edge(a=Pt(x=7.5, y=7.5), b=Pt(x=2.5, y=7.5)),
        Edge(a=Pt(x=2.5, y=7.5), b=Pt(x=2.5, y=2.5))
        )),
      Poly(name='strange', edges=(
        Edge(a=Pt(x=0, y=0), b=Pt(x=2.5, y=2.5)),
        Edge(a=Pt(x=2.5, y=2.5), b=Pt(x=0, y=10)),
        Edge(a=Pt(x=0, y=10), b=Pt(x=2.5, y=7.5)),
        Edge(a=Pt(x=2.5, y=7.5), b=Pt(x=7.5, y=7.5)),
        Edge(a=Pt(x=7.5, y=7.5), b=Pt(x=10, y=10)),
        Edge(a=Pt(x=10, y=10), b=Pt(x=10, y=0)),
        Edge(a=Pt(x=10, y=0), b=Pt(x=2.5, y=2.5))
        )),
      Poly(name='exagon', edges=(
        Edge(a=Pt(x=3, y=0), b=Pt(x=7, y=0)),
        Edge(a=Pt(x=7, y=0), b=Pt(x=10, y=5)),
        Edge(a=Pt(x=10, y=5), b=Pt(x=7, y=10)),
        Edge(a=Pt(x=7, y=10), b=Pt(x=3, y=10)),
        Edge(a=Pt(x=3, y=10), b=Pt(x=0, y=5)),
        Edge(a=Pt(x=0, y=5), b=Pt(x=3, y=0))
        )),
      ]
    testpoints = (Pt(x=5, y=5), Pt(x=5, y=8),
                  Pt(x=-10, y=5), Pt(x=0, y=5),
                  Pt(x=10, y=5), Pt(x=8, y=5),
                  Pt(x=10, y=10))
 
    print "\n TESTING WHETHER POINTS ARE WITHIN POLYGONS"
    for poly in polys:
        polypp(poly)
        print '   ', '\t'.join("%s: %s" % (p, ispointinside(p, poly))
                               for p in testpoints[:3])
        print '   ', '\t'.join("%s: %s" % (p, ispointinside(p, poly))
                               for p in testpoints[3:6])
        print '   ', '\t'.join("%s: %s" % (p, ispointinside(p, poly))
                               for p in testpoints[6:])
public static class RayCastingAlgorithm {
        public static bool IsWithin(Point pt, IList<Point> polygon, bool noneZeroMode) {
            int ptNum = polygon.Count();
            if (ptNum < 3) {
                return false;
            }
            int j = ptNum - 1;
            bool oddNodes = false;
            int zeroState = 0;
            for (int k = 0; k < ptNum; k++) { Point ptK = polygon[k]; Point ptJ = polygon[j]; if (((ptK.Y > pt.Y) != (ptJ.Y > pt.Y)) && (pt.X < (ptJ.X - ptK.X) * (pt.Y - ptK.Y) / (ptJ.Y - ptK.Y) + ptK.X)) { oddNodes = !oddNodes; if (ptK.Y > ptJ.Y) {
                        zeroState++;
                    }
                    else {
                        zeroState--;
                    }
                }
                j = k;
            }
            return noneZeroMode?zeroState!=0:oddNodes;
        }
    }

mysql主从配置

开启mysql只读模式:

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;

查看主数据库状态:
show master status; //可以查看主mysql状态

备份主数据库:

mysqldump -h -ujbbwbu -p jbbwb > jbbwb.sql

导入备份文件到从数据库:

source jbbwb.sql

设置同步点:
change master to
-> master_host=’192.168.78.128′,
-> master_user=’test’,
-> master_password=’MyPass1!’,
-> master_log_file=’mysql-bin.000001′,
-> master_log_pos=1244;

start slave;

show slave status \G;

关闭mysql只读模式:
SET GLOBAL read_only = 0;
UNLOCK TABLES;