自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 spring security 4. Security Namespace Configuration

4.1 IntroductionNamespace configuration has been available since version 2.0 of the Spring framework. It allows you to supplement(增补,补充; ) the traditional Spring beans application context syntax with

2016-03-31 19:31:57 1510

转载 文章标题

一、数据库表有5个:users、roles、perms、users_roles、roles_perms。/* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Version : 50154 Source Host : localhost:3306 S

2016-03-29 12:58:08 259

转载 spring security 3.1中基于数据库自定义验证授权功能实现

一、数据库表有5个:users、roles、perms、users_roles、roles_perms。/* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Version : 50154 Source Host : localhost:3306 S

2016-03-29 11:48:27 737

转载 Spring Security笔记:使用数据库进行用户认证(form login using database)

一、项目结构与前面的示例相比,因为要连接db,所以多出了一个spring-database.xml用来定义数据库连接,此外,为了演示登录用户权限不足的场景,加了一个页面403.jsp,用来统一显示权限不足的提示信息二、数据库表结构(oracle环境)create table T_USERS( d_username VARCHAR2(50) not null, d_password VARC

2016-03-29 11:31:39 672

转载 数据库分库分表(sharding)系列(四) 多数据源的事务处理

系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题。总体上看,目前对于一个分布式系统的事务处理有三种方式:分布式事务、基于Best Efforts 1PC模式的事务以及事务补偿机制。分布式事务这是最为人们所熟知的多数据源事务处理机制。优势: 1. 基于两阶段提交,最大限度地保证了跨数据库操作的“原子性”,是分布式系统下

2016-03-28 14:17:28 384

转载 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量

当团队对系统业务和数据库进行了细致的梳理,确定了切分方案后,接下来的问题就是如何去实现切分方案了,目前在sharding方面有不少的开源框架和产品可供参考,同时很多团队也会选择自主开发实现,而不管是选择框架还是自主开发,都会面临一个在哪一层上实现sharding逻辑的问题,本文会对这一系列的问题逐一进行分析和考量。一、sharding逻辑的实现层面从一个系统的程序架构层面来看,sharding逻辑可

2016-03-28 14:15:10 273

转载 数据库分库分表(sharding)系列(二) 全局主键生成策略

本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案。第一部分:一些常见的主键生成策略一旦数据库被切分到多个物理结点上,我们将不能再依赖数据库自身的主键生成机制。一方面,某个分区数据库自生成的ID无法保证在全局上是唯一的;另一方面,应用程序在插入数据之前需要先获得ID,以便进行SQL路由。目前几种可行的主键生成策略有: 1. UUID:使用UUID

2016-03-28 14:08:08 296

转载 数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

第一部分:实施策略图1.数据库分库分表(sharding)实施策略图解1.准备阶段对数据库进行分库分表(Sharding化)前,需要开发人员充分了解系统业务逻辑和数据库schema.一个好的建议是绘制一张数据库ER图或领域模型图,以这类图为基础划分shard,直观易行,可以确保开发人员始终保持清醒思路。对于是选择数据库ER图还是领域模型图要根据项目自身情况进行选择。如果项目使用数据驱动的开发方式,团

2016-03-28 14:02:14 335

转载 数据库Sharding的基本思想和切分策略

一、基本思想Sharding的基本思想是把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(serv

2016-03-28 13:54:44 230

转载 数据库Sharding的基本思想和切分策略

一、基本思想Sharding的基本思想是把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(serv

2016-03-28 13:54:31 272

转载 千万级并发实现的秘密:内核不是解决方案,而是问题所在!

摘要:C10K问题让我们意识到:当并发连接达到10K时,选择不同的解决方案,笔记本性能可能会超过16核服务器。对于C10K问题,我们或绕过,或克服;然而随着并发逐渐增多,在这个后10K的时代里,你是否有想过如何去克服C10M。 既然我们已经解决了C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能。不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接。 要

2016-03-24 09:40:19 271

转载 c10k问题

c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来)。由于硬件成本的大幅度降低和硬件技术的进步,如果一台服务器能够同时服务更多的客户端,那么也就意味着服务每一个客户端的成本大幅度降低,从这个角度来看,c10k问题显得非常有意义。 为了解决C10K问题,有各种各样的IO策略,它们的分歧或者说不同之处大

2016-03-24 09:30:36 346

转载 Qt教程 第三章:家庭价值

这个例子演示了如何创建一个父窗口部件和子窗口部件。我们将会保持这个程序的简单性,并且只使用一个单一的父窗口部件和一个独立的子窗口部件。#include <qapplication.h>#include <qpushbutton.h>#include <qfont.h>#include <qvbox.h>int main( int argc, char **argv ){ QAppli

2016-03-23 13:02:56 323

转载 Qt教程 第二章:调用退出

你已经在第一章中创建了一个窗口,我们现在使这个应用程序在用户让它退出的时候退出。 我们也会使用一个比默认字体更好的一个字体。 “include include include 一行一行地解说#include <qfont.h>因为这个程序使用了`QFont`,所以它需要包含`qfont.h`。Qt的字体提取和X中提供的可怕的字体提取大为不同,字体的载入和使用都已经被高度优化了。 QPus

2016-03-23 13:00:39 380

转载 Qt教程 第一章:Hello, World!

第一个程序是一个简单的Hello World例子。它只包含你建立和运行Qt应用程序所需要的最少的代码。#include <qapplication.h>#include <qpushbutton.h>int main( int argc, char **argv ){ QApplication a( argc, argv ); QPushButton hello( "Hello

2016-03-23 12:57:45 384

转载 基于PyQt(Python+QT)的gui程序开发

首先需要引用from PyQt4 import QtGui, uic, QtCore 很多控件像QPushButton是从QtGui的空间中得来的,下面def __init__(self, parent=None)中定义了界面的设计及与控件相互联系的方法。class AddressBook(QtGui.QWidget): def __init__(self, parent=None)

2016-03-23 12:42:55 930

转载 java aio 编程

Java NIO (JSR 51)定义了Java new I/O API,提案2000年提出,2002年正式发布。 JDK 1.4起包含了相应的API实现。 JAVA NIO2 (JSR 203)定义了更多的 New I/O APIs, 提案2003提出,直到2011年才发布, 最终在JDK 7中才实现。 JSR 203除了提供更多的文件系统操作API(包括可插拔的自定义的文件系统), 还提供了

2016-03-23 09:12:44 374

转载 工作容易,赚钱很难

李宗盛有首歌的歌词里写到:「工作是容易的,赚钱是困难的」。乍一听感觉有点矛盾,工作的一个重要结果不就是赚钱么,为什么工作容易赚钱却难?但仔细一想就恍然其中想表达的意思了。工作的本质是出售劳动价值,通过工作赚到的钱是对劳动价值的价格度量,也即劳动的市场价格。而劳动的市场价格总是围绕价值上下波动,有可能折价也可能溢价,但总不会偏离价值本身太远。所以歌词里的意思可能是,你随便找份工作来养家糊口可能还算容易

2016-03-23 09:03:39 754

转载 为啥公司愿花更多钱从外面招人

要是你有心留意,可能会发现这样的现象:公司新招来的程序员,经验、技能、经历、学历都和你差不多,薪水却比一直待在公司的你高。 为什么?为什么公司愿意花更多的钱招聘新人也不给老员工加薪?这是很多人都遇到过的问题。怎么解释呢?1. 奖励工资的必要性强烈推荐一本书——《牛奶可乐经济学》。这本书第 3 章,“职场的奥秘”,里面就有一个问题:为了吸引到想要的高素质员工,或为了吸引到足够数量的员工,为什么雇主有

2016-03-23 08:56:08 266

转载 java序列化和反序列话总结

序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 通常情况下,序列化有两种用途: 1) 把对象的字节序列永久的保存在硬盘中 2)在网络上传输对象的字节序列 相应的API  java.io.ObjectOutputStream          writeObject(Object obj)  java.io.ObjectInpu

2016-03-22 13:27:53 368

转载 ActiveMQ入门实例

1.下载ActiveMQ去官方网站下载:http://activemq.apache.org/2.运行ActiveMQ解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue

2016-03-20 22:35:59 210

转载 JMS简介与ActiveMQ实战

1. JMS架构Java消息服务(Java Message Service,简称JMS)是用于访问企业消息系统的开发商中立的API。企业消息系统可以协助应用软件通过网络进行消息交互。JMS在其中扮演的角色与JDBC很相似,正如JDBC提供了一套用于访问各种不同关系数据库的公共API,JMS也提供了独立于特定厂商的企业消息系统访问方式。 使用JMS 的应用程序被称为JMS客户端,处理消息路由与传递的

2016-03-20 22:28:28 681

转载 grails简介

如今的Java Web开发对于需求来说已经变得过于复杂。当今众多Java领域的Web开发框架不仅使用复杂,而且并没有很好的遵循Don’t Repeat Yourself(DRY)原则。 像Rails,Django和TurboGears这样的动态框架在Web开发领域开辟了一条新的道路,Grails基于这些概念之上,采用动态方法减小了Java平台上进行Web开发的复杂度,不过与那些框架不同的是,Gra

2016-03-18 13:11:42 400

转载 Generics

Ordinary classes and methods work with specific types: either primitives or class types. If you are writing code that might be used across more types, this rigidity can be overconstraining.One way tha

2016-03-18 13:04:36 344

转载 基于Netty4的HttpServer和HttpClient的简单实现

使用的Netty的版本:netty-4.0.23.Final.tar.bz2 ‐ 15-Aug-2014 (Stable, Recommended)Http 消息格式:Http request:Method path-to-resource HTTPVersion-numberHeader-name-1: value1Header-name-2: value2Optional request b

2016-03-18 09:25:21 453

转载 Java NIO框架--Netty4的简单示例

简介相比Netty3, Netty4有很多显著的变化: NioEventLoopGroup是一个处理I/O操作的多线程事件环。即为Netty4里的线程池,在3.x里,一个Channel是由ChannelFactory创建的,同时新创建的Channel会自动注册到一个隐藏的I/O线程。 4.0使用新的名为EventLoopGroup的接口来替换ChannelFactory,它由一个或多个EventL

2016-03-18 09:14:41 430

转载 netty入门实例

TimeServer.javapackage netty.timeserver.server;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.Chan

2016-03-18 09:00:48 281

转载 python函数 callable(object)

callable(object) 检查对象object是否可调用。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。 注意:类是可调用的,而类的实例实现了__call__()方法才可调用。 版本:该函数在python2.x版本中都可用。但是在python3.0版本中被移除,而在python3.2以后版本中被重新添加。Return True

2016-03-16 09:12:34 486

转载 python gevent

Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。 gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为

2016-03-15 16:24:02 431

转载 python 协程

协程,又称微线程,纤程。英文名Coroutine。 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。 所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用

2016-03-15 16:21:10 471

转载 python Web开发

最早的软件都是运行在大型机上的,软件使用者通过“哑终端”登陆到大型机上去运行软件。后来随着PC机的兴起,软件开始主要运行在桌面上,而数据库这样的软件运行在服务器端,这种Client/Server模式简称CS架构。随着互联网的兴起,人们发现,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,Browser/Server模式开始流行,

2016-03-12 10:25:37 1588

转载 python aiohttp

asyncio可以实现单线程并发IO操作。如果仅用在客户端,发挥的威力不大。如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用单线程+coroutine实现多用户的高并发支持。asyncio实现了TCP、UDP、SSL等协议,aiohttp则是基于asyncio实现的HTTP框架。我们先安装aiohttp:pip install aiohttp然后编写一个H

2016-03-12 09:54:37 787

转载 python async/await

用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。请注意,async和await是针对coroutine的新

2016-03-12 09:51:09 1584

转载 python asyncio

asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。 asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO。用asyncio实现Hello world代码如下:import asyncio@asyncio.coroutinedef hello():

2016-03-12 09:49:24 734

转载 Python生成器generator之next和send运行流程

对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数。 然后第二个next调用,进入生成器函数后,从yield语句的下一句语句(第5行)开始执行,然后重新运行到yield语句,执行后,跳出生成器函数, 后面再次调用next,依次类推。下面是一个列子:def consumer(): r = '

2016-03-12 09:28:53 487

转载 python 协程

在学习异步IO模型前,我们先来了解协程。 协程,又称微线程,纤程。英文名Coroutine。 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。 所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。 子程序调用总是一

2016-03-12 09:20:45 240

转载 python 异步IO

在IO编程一节中,我们已经知道,CPU的速度远远快于磁盘、网络等IO。在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO。 在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。 因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线

2016-03-12 09:11:54 437

转载 精通 Grails: 构建您的第一个 Grails 应用程序

Java 程序员不需要放弃自己喜爱的语言和已有的开发基础设施就可以采纳一种新型的Web开发框架。 请允许我借助另一种开源 Web 开发框架 —— Ruby on Rails —— 来介绍 Grails。Rails 一发布就迷住了开发人员。Rails 的脚手架功能使您可以用以前所需时间的一小部分完成一个新的项目。支持 Rails 的约定优于配置(convention over configurati

2016-03-11 16:43:04 268

转载 python 类和实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。仍以Student类为例,在Python中,定义类是通过class关键字:class Student(object): passclass后面紧接着是类名,即Student,类名通常是大

2016-03-11 16:04:53 188

原创 python 面向对象编程

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合,而每

2016-03-11 15:59:41 260

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除