一点随笔,胡扯,有很多自己还没学习验证的地方。
IEEE conference模板使用中文
原文使用IEEE Conferences Latex 模板撰写中文学报 还提到了导入图片
\documentclass[conference]{IEEEtran}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
\section{第一部分}
这里是第一部分
\end{CJK}
\end{document}
装饰者模式和代理模式的区别
代理模式中,中介类与委托类的关系在编写中介类时就确定了,而装饰者模式的装饰关系是在运行时才知道。
意思就是,在代理模式中,中介类知道被代理的对象是谁,而在装饰者模式中,中介类的代理对象是由构造函数赋予的。
//装饰器模式
public class Decorator implements Component{
private Component component;
// 无法确定装饰的对象是哪个具体类
public Decorator(Component component){
this.component = component
}
public void operation(){
….
component.operation();
….
}
}
//装饰器的客户
public class Client{
public static void main(String[] args){
// 编程者指定了装饰者需要装饰的是哪一个类
Component component = new Decorator(new ConcreteComponent());
...
}
...
redis与netty的reactor模式的体现?
- redis采用reactor机制,netty也用了reactor机制。
- Redis没有使用第三方的libevent等网络库,而是自己开发了一个单线程的Reactor模型的事件处理模型。而Memcached内部使用的libevent库,多线程模型。
-
netty工作机制如下:netty工作模型。
netty中,有bossGroup和workerGroup。- bossGroup中,每个线程维护一个包装的ServerSocket,监听一个端口。ServerSocket监听到新连接后,得到Socket并包装,并注册到workerGroup其中一个EventLoop所维护的selector上。每个workerGroup有多个EventLoop,每个EventLoop维护着一个Selector实例,类似单线程Reactor模式地工作着(参考)
。 - workerGroup有多个线程通过多路复用监听读写事件。每个EventLoop都是一个单线程Reactor模型,不断循环 监听事件的发生->取出激活的socket->依次处理事件->监听事件的发生。
- bossGroup中,每个线程维护一个包装的ServerSocket,监听一个端口。ServerSocket监听到新连接后,得到Socket并包装,并注册到workerGroup其中一个EventLoop所维护的selector上。每个workerGroup有多个EventLoop,每个EventLoop维护着一个Selector实例,类似单线程Reactor模式地工作着(参考)
-
redis中,由多路复用监听连接、读写事件,触发事件的socket被放置到队列中。文件事件分派器从队列中一个一个取出触发了事件的socket。再转交给对应的事件处理器处理事件。因为由单线程一个一个处理事件,所以redis是单线程的。
epoll实现、事件处理、编程方式、LT ET
LT/ET
Level Triggered (LT) 水平触发
- socket接收缓冲区不为空 有数据可读 读事件一直触发
- socket发送缓冲区不满 可以继续写入数据 写事件一直触发
事件的触发是以缓冲区的空/满状态决定的,只要状态满足,就会触发。
java nio
既然如此,java的nio是水平触发吗?
我写了此文进行探究,结论是java nio是水平触发。
另外如果读过博客,我们知道,Linux epoll的水平触发是以"缓冲区空满状态"来判断的。这里"缓冲区空满"是如何判断的?如果读过《unix网络编程》可知道,在linux
内核,每一个socket会对应一个输入缓冲区和输出缓冲区,这里的"缓冲区空满"应当就是指那两个缓冲区了。
redis源码查看
以ae.c/aeProcessEvents
(其中包含文件事件分派器)为主的源码让我受益匪浅。该函数作用是完成事件处理的一次循环。
ae_epoll.c/aeApiPoll
函数讲述了redis如何用epoll实现事件监听
内存一致性
如何保证线程在切换到另一个CPU上运行之前,cache里的变量已经被写回内存?因为如果没写回内存,其它CPU的cache就会读到错误的数据。
答:内存一致性协议
如何为ppt引入透明背景矢量图
当想做校徽时,网上下载的jpg, png校徽图片,往往底色是白色,而如果放在别的颜色背景上,会显得突兀。如何解决呢?你需要引入矢量图。
- 首先在网上搜索出矢量图片格式的校徽, 比如.cdr, .ai文件.
- 下载打开adobe illustrator cs6, 打开矢量图片
- 将图片存储为.svg格式
- 将svg图片导入ppt
这样导入的图片, 底色就是透明的了
参考:
- ppt导入透明背景矢量图
- 图片去底色
- 中山大学ppt模板 下载付费, 看着模板自己能做个一样的
网友评论