wangqi的blog

贫,气不改;达,志不改


  • 首页

  • 关于

  • 归档

  • 搜索

单例模式实现方式

发表于 2017-11-22 | 更新于: 2019-01-18 | 阅读次数:

单例模式是用来保证这个类在运行期间只会被创建一个类实例。

另外,单例模式还提供了一个全局唯一访问这个类实例的访问点,就是getInstance方法。

对于单例模式而言,不管采用何种实现方式,它都是只关心类实例的创建问题,并不关心具体的业务功能。

阅读全文 »

SnowFlake

发表于 2017-11-22 | 更新于: 2019-01-18 | 阅读次数:

SnowFlake

分布式ID生成一个很小但是很重要的基础应用,比如想要手动给数据库中的一条数据设置一个id。

最先能想到是UUID。UUID保证对在同一时空中的所有机器都是唯一的。UUID的缺点是太长(32位),并且既有数字又有字母。

如果想要生成纯数字的id,则Twitter的SnowFlake是一个非常优秀的id生成方案。

实现也非常简单,8Byte是一个Long,8Byte等于64bit,SnowFlake就是由毫秒级的时间41位 + 机器ID 10位 + 毫秒内序列12位组成。当然也可以根据需要调整机器位数和毫秒内序列位数比例。

阅读全文 »

Shiro读书笔记

发表于 2017-10-19 | 更新于: 2019-01-18 | 阅读次数:

第一章

  • Subject:主体,可以看到主体可以是任何可以与应用交互的”用户”
  • SecurityManager:相当于SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心脏;所有具体的交互都通过SecurityManager进行控制;它管理着所有Subject、且负责进行认真和授权、会话、缓存的管理
  • Authenticator:认证器,负责主题认证。其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了。
  • Authorizer:授权器,或者叫访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能。

spring实战读书笔记

发表于 2017-10-15 | 更新于: 2019-01-18 | 阅读次数:

1.2.1 bean的生命周期

Spring自带了多种类型的应用上下文:

  • AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文
  • AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文
  • ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源
  • FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义
  • XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义
    阅读全文 »

ReentrantLock

发表于 2017-09-29 | 更新于: 2019-01-18 | 阅读次数:

lock
acquire(1)
tryAcquire acquireQueued addWaiter
lockInterruptibly
acquireInterruptibly(1)
tryAcquire doAcquireInterruptibly
unlock
release(1)
tryRelease

阅读全文 »

Linux的三个权限

发表于 2017-09-19 | 更新于: 2019-01-18 | 阅读次数:

Linux还有三个比较特殊的权限,分别是:setuid,setgid,stick bit (粘滞位)

1. setuid 和setgid:

以/etc/passwd和/usr/bin/passwd为例:

/etc/passwd的权限为 -rw-r–r–。也就是说:该文件的所有者拥有读写的权限,而用户组成员和其它成员只有查看的权限。我们知道,在系统中我们要修改一个用户的密码,root用户和普通用户均可以用“/usr/bin/passwd 用户名” 这个命令来修改这个/etc/passwd这个文件,root用户本身拥有对/etc/passwd的写权限,可以理解;那普通用户没有写权限,那他怎么也能修改呢?这里就用到了setuid,setuid的作用是让执行该命令的用户以该命令拥有者的权限去执行,就是普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件了。它的标志为:s,会出现在x的地方,例:-rwsr-xr-x 。而setgid的意思和它是一样的,即让执行文件的用户以该文件所属组的权限去执行。

2. stick bit(粘滞位)

以/tmp为例:

我们知道/tmp是系统的临时文件目录,所有的用户在该目录下拥有所有的权限,也就是说在该目录下可以任意创建、修改、删除文件,那如果用户A在该目录下创建了一个文件,

用户B将该文件删除了,这种情况我们是不能允许的。为了达到该目的,就出现了stick bit(粘滞位)的概念。它是针对目录来说的,如果该目录设置了stick bit(粘滞位),则该目录下的文件除了该文件的创建者和root用户可以删除和修改/tmp目录下的stuff,别的用户均不能动别人的,这就是粘滞位的作用。

3. 如何给文件设置特殊权限

chmod u+s xxx # 设置setuid权限

chmod g+s xxx # 设置setgid权限

chmod o+t xxx # 设置stick bit权限,针对目录

chmod 4775 xxx # 设置setuid权限

chmod 2775 xxx # 设置setgid权限

chmod 1775 xxx # 设置stick bit权限,针对目录

注意:有时你设置了s或t 权限,你会发现它变成了S或T,这是因为在那个位置上你没有给它x(可执行)的权限,这样的话这样的设置是不会有效的,你可以先给它赋上x的权限,然后再给s或t 的权限。

1…1718

wangqi

176 日志
GitHub E-Mail
© 2023 wangqi
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4