首页 文章 精选 留言 我的

精选列表

搜索[c 14],共10015篇文章
优秀的个人博客,低调大师

开发笔记14 | Java 代码规约第 4 条

返回规约清单列表 规约类型:编程规约 - 命名风格 规约级别:强制 规约描述:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式 正例: localValue / getHttpMessage() / inputUserId 驼峰式命名法分大驼峰式命名法(UpperCamelCase)和小驼峰式命名法(lowerCamelCase)。 有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。 名字从散文形式(prose form)开始: 把短语转换为纯ASCII码,并且移除任何单引号。例如:"Müller’s algorithm"将变成"Muellers algorithm"。 把这个结果切分成单词,在空格

优秀的个人博客,低调大师

SQL Serever学习14——存储过程和触发器

存储过程 在数据库中很多查询都是大同小异,编写他们费时费力,将他们保存起来,以后执行就很方便了,把SQL语句“封装”起来。 存储过程的概念 存储过程是一组SQL语句集,经过编译存储,可以”一次编译,多次执行“。除了第一次调用需要编译,后面都可以直接执行,执行速度更快,而不是普通SQL语句一样,每一次执行都要编译。 提供一种安全机制,如果某用户满意特定视图的使用权限,但是有使用存储过程的权限,通过执行存储过程,依旧可以获取存储过程中的表。 存储过程的优点 改善系统性能,一次编译,多次执行,而普通SQL是每一次都编译执行 安全机制 重用性,可以反复调用 共享性 减少网络流量,存储过程是服务器上编译好的T-sql代码,对一个可能需要几百行的T-sql操作,在客户端只需要通过一条执行语句完成,而不是发送几百行代码 存储过程分类 分为3类: 系统存储过程 通常以sp_开头,有sp_helpdb查看数据库名称和大小 所在位置 还有sp_helptext用于小时规则,默认值,触发器 sp_renamedb重命名数据库 sp_rename 重命名表,列,用户定义的类型 sp_helplogins看用户登录的数据 用户存储过程 用户编写的存储过程(主要是的的就是这个部分) 扩展存储过程 为扩展sqlserver提供的方法,可以动态的加载和执行动态链接库的函数,以xp_开头 存储过程的创建语句 CREATE PROC[EDURE] 存储过程名 [@参数名 参数类型 =默认值 ] OUTPUT WITH RECOMPILE FOR REPLICATION AS SQL语句组 说明:OUTPUT是输出参数, RECOMPILE表示sqlserver不对存储过程计划进行高速缓存,每一次重新编译, FOR REPLICATION表示存储过程只能在复制过程中使用,而且不和WITH RECOMPILE一起使用。 存储过程执行语法格式 EXEC[UTE] [@状态值=] 存储过程名 [@参数名=] 参数值 存储过程重新编译 sqlserver强制重新编译存储过程3种方法: 系统存储过程 ,EXEC sp_recompile 存储过程名 可以创建的时候使用WITH RECOMPILE 指定WITH RECOMPILE选项,EXEC 存储过程 WITH RECOMPILE 存储过程修改 就是把创建语句的CREATE 换成ALTER ,仅此而已。 ALTER PROC[EDURE] 存储过程名 [@参数名 参数类型 =默认值 ] OUTPUT WITH RECOMPILE FOR REPLICATION AS SQL语句组 存储过程删除 可以一次删除多个存储过程 DROP PROCEDURE PROC_3 , PROC_4 创建一个简单的存储过程 CREATE PROC 简单的存储过程 AS BEGIN SELECT 商品编号 ,商品名称,销售价 FROM 商品表 WHERE 商品名称='笔记本' END GO 存储过程中输入输出参数在AS之前,申明,局部变量在AS之后,申明。 创建带参数的存储过程 CREATE PROC 带参数的存储过程 @SPM VARCHAR(20) ='笔记本' AS BEGIN DECLARE @JG SMALLMONEY SELECT @JG=销售价 FROM 商品表 WHERE 商品名称=@SPM RETURN @JG END GO 使用带参数,有返回值的存储过程 DECLARE @MAXJG SMALLMONEY EXEC @MAXJG=带参数的存储过程 SELECT @MAXJG AS 最高的实际销售价格 数据库的触发器 触发器的概念 触发器是特殊的存储过程,只不过它是在操作数据表(增删改)之前或者之后,自动执行的,不能铜鼓名称来调用。 优点 自动,操作表之后立即激活 实施更为复杂的数据约束 级联修改数据库中相关表,自动触发其他与之相关操作 跟踪变化,撤销和回滚 返回自定义错误信息(一般的约束是无法返回信息的) 可以调用更多的存储过程 分类 触发器分为2类: DML DDL DML触发器 进行了增删改之后自动激活,有分为AFTER触发(操作后触发,执行优先级在约束检查之后),和INSTEAD OF 触发(不会执行增删改操作,而是执行INSTEAD OF指定操作,执行优先级在约束检查之前)。 DDL触发器 在执行CREATE, ALTER , GRANT , DENY , REVOKE, UPDATE STATISTICS语句触发。 触发器专用临时表 有2个触发器专用临时表INSERTED 和DELETED 表存在INSERT触发器(DDL触发器),插入数据,系统自动创建一个与表一样结构的INSERTED临时表,新的记录同时,添加到触发器表和INSERTED中,INSERTED保存的副本,方便用户查找当前插入数据。 表存在DELETE触发器,删除数据,系统自动创建一个DELETED临时表,用来保存被删除记录。 修改表,就是删除一条记录,然后插入一条记录,删除记录添加到DELETED表,新增记录添加到INSERTED表。 触发器的创建和触发 DML触发器 CREATE TRIGGER 触发器 ON 表名 FOR | AFTER | INSTEAD OF INSERT ,UPDATE , DELETE AS SQL语句 DDL触发器 CREATE TRIGGER 触发器 ON ALL SERVER | DATABASE FOR | AFTER 事件种类 AS SQL语句 触发器的修改 和创建类似,就是把CREATE 改为ALTER 触发器的删除 DROP TRIGGER 触发器, 触发器2 触发器的启用与禁用 禁用触发器 ALTER TABLE 表名 DISABLE TRIGGER 触发器名 DISABLE TRIGGER 触发器名 禁用数据库级别触发器 DISABLE TRIGGER 触发器名 ON DATABASE 启用触发器 ALTER TABLE 表名 ENABLE TRIGGER 触发器名 ENABLE TRIGGER 触发器 ON 表名 简单的触发器 USE 销售管理 GO CREATE TRIGGER tr_insert_mj ON 买家表 FOR INSERT --指定触发类型 AS BEGIN PRINT '有新买家插入到买家表' END GO 验证,插入一条数据 INSERT INTO 买家表 VALUES('M05','MARS',12232323,'J01') GO 看消息,触发器运行了 创建一个DDL触发器,当删除数据库中的表时,就撤销该操作,并提示:禁止删除数据库表! USE 销售管理 GO CREATE TRIGGER tr_drop_dll ON DATABASE FOR DROP_TABLE AS BEGIN ROLLBACK TRANSACTION PRINT '禁止删除数据表!' END GO 验证一下,删除表 DROP TABLE 买家表 GO 看信息提示 禁用触发器 ALTER TABLE 买家表 DISABLE TRIGGER tr_insert_mj 或者 DISABLE TRIGGER tr_insert_mj ON 买家表 启用触发器 ALTER TABLE 买家表 ENABLE TRIGGER tr_insert_mj 或者 ENABLE TRIGGER tr_insert_mj ON 买家表

优秀的个人博客,低调大师

31 天重构学习笔记14. 分离职责

摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有 订阅 Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接过去的。记得当时一口气看完了整个系列并没有多少感觉,因为这些基本上项目都 在使用,只是我们没有专门把它标示和整理出来,所以也没有引起多大的重视。现在突然接手这个重构项目,由于团队成员技术和经验参差不齐,所以有必要专门整 理一个重构的纲要,当然这个系列也非常适合做新系统的代码规范参考,只要有代码的地方,这个重构规范就很有价值。周末也不想出去闲逛,因为在刚到这个美丽 的城市,没有亲戚或者朋友,所以才能静下心来两天时间写完这个重构参考规范。同时也感受了Windows Live writer写文章的快感。当然重构的整体架构得另当别论(整体架构在我的这篇文章有专门的讲解( http://www.cnblogs.com/zenghongliang/archive/2010/06/23/1763438.html)。 大的架构设计好了以后,这些重构细节点就成了东风之后的大火,对整个项目也是至关重要。31天重构这个系列和《代码大全》、《重构:改善既有代码的设计》 比较起来最大的特点就是比较简单、浅显易懂。那么我这些文章也都是学习Sean Chambers的31天重构的笔记整理,所以如果大家对这个笔记有任何异议也可以指出。 具体也可以通过 http://www.lostechies.com/blogs/sean_chambers/archive/2009/07/31/31-days-of-refactoring.aspx查 看原文。 概念:本文中的“分离职责”是指当一个类有许多职责时,将部分职责分离到独立的类中,这样也符合面向对象的五大特征之一的单一职责原 则,同时也可以使代码的结构更加清晰,维护性更高。 正文:如下代码所示, Video类 有两个职责,一个是处理video rental,另一个是计算每个客户的总租金。我们可以将这两个职责分离出来,因为计算每个客户的总租金可以在 Customer计算,这也比较符合常理。 usingSystem.Collections.Generic; usingSystem.Linq; namespaceLosTechies.DaysOfRefactoring.BreakResponsibilities.Before { public class Video { public voidPayFee( decimalfee) { } public voidRentVideo( Videovideo, Customercustomer) { customer.Videos.Add(video); } public decimalCalculateBalance( Customercustomer) { returncustomer.LateFees.Sum(); } } public class Customer { public IList< decimal> LateFees { get; set; } public IList< Video> Videos { get; set; } } } 重构后的代码如下,这样 Video的职责就 变得很清晰,同时也使代码维护性更好。 usingSystem.Collections.Generic; usingSystem.Linq; namespaceLosTechies.DaysOfRefactoring.BreakResponsibilities.After { public class Video { public voidRentVideo( Videovideo, Customercustomer) { customer.Videos.Add(video); } } public class Customer { public IList< decimal> LateFees { get; set; } public IList< Video> Videos { get; set; } public voidPayFee( decimalfee) { } public decimalCalculateBalance( Customercustomer) { returncustomer.LateFees.Sum(); } } } 总结:这个重构经常会用到,它和之前的“移动方法”有几分相似之处,让方法放在合适的类中,并且简化类的职责,同时这也是面向对象五 大原则之一和设计模式中的重要思想。 本文转自KnightsWarrior51CTO博客,原文链接:http://blog.51cto.com/knightswarrior/342461 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

centos7下安装docker(14安装docker machine​)

为所有host安装和配置docker 之前我们手工安装了一个docker host: 1.安装https CA证书 2.添加GPG key 3.添加docker apt源 4.安装docker 对于多主机的环境手工方式效率低且不容易保证一致性,只对这个问题,docker给出的解决方案是docker machine 用docker machine可以批量安装和配置docker host,这个host可以是本地的虚拟机,物理机,也可以是公有云中的云主机 Docker Machine支持在不同环境下安装配置docker host,包括: 1.常规Linux操作系统; 2.虚拟化平台-VirtualBox,VMware,Hyper-V 3.Openstack 4.公有云-Amazon Web Services,Microsoft Azure,Google Compute Engine,Digital Ocean等 Docker Machine为这些环境起了一个统一的名字:provider 对于特定的某个provider,Docker Machine使用相应的driver安装配置docker host 安装docker machine 实验环境:主机名 IP 操作系统 docker 192.168.7.222 centos7 docker1 192.168.7.235 centos7 docker2 192.168.7.231 centos7 我将在192.168.7.222docker上安装docker machine,然后通过docker machine命令在其他两台host上部署docker 安装docker machine,参照官方文档:https://docs.docker.com/machine/install-machine/#install-machine-directly 执行docker-machine version验证命令是否可用 注:建议根据官方文档搭建 安装bash completion script,这样bash可以通过tab来补全命令和参数: 下载completion script:docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash将其放在/etc/bash_completion.d目录下 命令为:scripts=( docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash);for iin"${scripts[@]}";do sudo wget https://raw.githubusercontent.com/docker/machine/v0.13.0/contrib/completion/bash/${i} -P /etc/bash_completion.d;done 然后将如下代码添加到~/.bashrc PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ' 若出现一下情况: 更改~/.bashrc,在bashrc中添加以下三行: source /etc/bash_completion.d/docker-machine-wrapper.bash source /etc/bash_completion.d/docker-machine-prompt.bash source /etc/bash_completion.d/docker-machine.bash 重新source下bashrc source /root/.bashrc 到此位置docker-machine就安装完成了! 如何卸载docker-machine,可以参考官方文档! 创建machine 对于docker machine来将,术语Machine就是运行docker daemon的主机,创建machine就是在host上安装docker 执行docker-macine ls查看当前的machine 当前还没有一个machine,接下来我们创建第一个machine:docker1-192.168.7.235 创建machine要求能够无密码远程登陆主机,所以需要下通过如下命令将ssh key拷贝到192.168.7.235 1.ssh-keygen -t rsa 在192.168.7.222上面生成密钥 注:这里要回车三次 2.在用户的家目录下生成一个 .ssh的 目录 3.在 .ssh下存放生成的密钥文件 id_rsa :生成的私钥文件 id_rsa.pub:生成的公钥文件 如果希望公钥生效,需满足以下两个条件: 1) .ssh目录的权限必须是700 2) .ssh/authorized_keys文件权限必须是600 3.将密钥拷贝到192.168.7.235里面 ssh-copy-id 4.通过ssh 192.168.7.235测试是否成功 一切准备就绪,执行docker-machine create创建第一个docker1 docker-macine create --driver generic --generic-ip-address=192.168.7.235 docker1 因为我们用的是普通的linux部署docker,所以使用generic driver通用driver,其他driver可以参考:https://docs.docker.com/machine/drivers/ 我们的docker1已经创建成功,步骤如下 1.ssh远程登录主机 2.安装docker 3.复制证书 4.配置docker 5.启动docker 再次执行;docker-machine ls 现在看到docker1已经运行 我们登陆到docker1查看具体配置 在/etc/systemd/system/docker.service.d下文件名是:10-machine.conf 注:-H tcp://0.0.0.0:2376 使docker daemon接受远程连接 --tls*对远程连接启用安全认证和加密 注:主机名hostname也会被更改 使用同样的方法创建docker2 docker-machine create --driver generic --generic-ip-address=192.168.7.231 docker2 由于我忘记传送密钥,导致的报错 当我把密钥传进去后重新创建docker2时提示:docker2已经存在,通过docker-machine ls查看docker2已经处于运行的状态,无法识别docker版本 注:这里的docker的版本还不能指定,默认安装的是repo的版本 可以使用docker-machine rm -f删除docker2 重新传送密钥,然后重新创建docker2 在密钥传送不成功以及网络无法ping通baidu的情况下,终于将docker2建好了: 盗图: 管理machine: 学习无需登录machine就可以执行docker相关的命令 1.docker-machine env docker1显示访问docker1需要的所有环境变量 根据提示,执行eval $(docker-machine env docker1) 可以看到,命令提示符变成了docker1,其原因是我们之前在/root/.bashrc里面配置了PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ',用于显示当前的docker host 注:如果我们输入eval $(docker-machine env docker1)没有显示出docker1的命令提示符,我们可以重新输入一遍PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ' 在此状态下执行的docker命令其效果都相当于在docker1上执行 docker-machine子命令: docker-machine upgrade docker1 docker2批量更新dockerhost版本 docker-machine config docker1 查看host的docker daemon配置 docker-machine start/status/restart/kill docker1是对docker host所在的系统的操作,不是对服务的操作 docker-machine scp是在docker host之间复制 docker-machine rm docker1删除一个docker host 其他请参考 本文转自不要超过24个字符博客51CTO博客,原文链接http://blog.51cto.com/cstsncv/1980580如需转载请自行联系原作者 cstsncv

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册