关于Markdown的css调整

HashCode典型实现

1.给出自定义java类ComboKey的hashcode方法实现,使得在hashMap中存储时尽可能均匀分散。
    class ComboKey{
        //身高
        private int height ;
        //体重
        private int weight ;
        //年龄
        private int age ;
        //血型
        private int blood;
        ...
        public int hashCode(){
            return height << 24 
                    | weight << 16
                    | age << 8
                    | blood << 0 ; 
        }
        
        //判断hash是否相同
        public boolean equals(Object o){
            return this.hashCode() == o.hashCode() ;
        }
    }

2.实现上题的equals方法的比对。
    直接比较hash值即可。


3.编写严格单例懒汉式单例模式。


4.编写函数,将byte转换成0~255之间值。

设计模式

1.单例

2.原型
    
3.池化
    连接池 , 线程池 , 对象池。
    使用有限的对象,服务于大量的客户端。
    
    DriverManager.getConnection();

    10ms 
    0.1ms
    [DataSource]
    c3p0 , dbcp , proxool

    /* 自定义连接池, */       
    Class.forname()
    conn = DriverManager.getConnect();  //
    conn.setAutoCommit();               //
    conn.preparedStatement()            //
    conn.commit()                       //
    conn.rollback()                     //
    conn.close();                       //回收连接到池中

高低原则

高内聚 :事物内部联系越紧密越好。
低耦合 :事物之间联系越松散越好。

自定义数据源

1.自定义连接装饰类型和连接适配器.
    //连接适配器(适配器模式)
    public class ConnectionAdaptor implements Connection {
        public Statement createStatement() throws SQLException {
            return null;
        }
        ..
    }

    /**
     * 连接包装类,装饰模式
     */
    public class WrappedConnection extends ConnectionAdaptor {
        //原生连接
        private Connection rawConnn ;

        public WrappedConnection(Connection rawConnn) {
            this.rawConnn = rawConnn;
        }

        public void setAutoCommit(boolean autoCommit) throws SQLException {
            rawConnn.setAutoCommit(autoCommit);
        }

        public PreparedStatement prepareStatement(String sql) throws SQLException {
            return rawConnn.prepareStatement(sql) ;
        }

        public void commit() throws SQLException {
            rawConnn.commit();
        }

        public void rollback() throws SQLException {
            rawConnn.rollback();
        }

        /**
         * 释放资源,回收连接到连接池
         */
        public void close() throws SQLException {
        }
    }

2.设计连接池
    
3.
4.

并发

CPU同一时刻只能处理一条指令,cpu轮询方式执行。
因此微观上cpu是串行,宏观上并行。

进程

1.简介
    runtime,执行的应用程序。
    进程间不能共享内存。
    socket

线程

1.简介
    Thread,同一进程内并发执行的代码块。
    线程间可以共享内存。
    创建灵活相应的桌面程序。

2.方法
    run()           //
    start()         //启动线程
    yield()         //放弃
    join()          //进入当前线程
    sleep()         //休眠,不失去锁定全。

3.状态
    NEW
    Runable
    Blocked
    Waiting
    Timed_Waiting
    Terminated

4.创建线程方式
    4.1)直接创建线程
        Thread t = new Thread();


    4.2)通过Runnable创建
        Runnable r = new Runnable(){
            public void run(){
                ...
            }
        };
        new Thread(r).start();
        多个线程共享通知执行过程,耦合度低。

5.线程安全
    上锁控制。
    synchronize
    静态同步方法使用类描述符做为锁,非静态方法使用当前对象做锁。
    同步代码块使用特定对象作为锁。
    //同步方法粒度粗,性能差。

6.和尚吃馒头问题
    100馒头,30和尚,每个和尚最多吃4个馒头,最少吃一个馒头,满足以上前提条件下,尽快把馒头吃了!

    6.1)分析
        和尚是线程。馒头作成对象池进行派发,并作为控制的中心。

协议

protocal,
TCP         //transfer control protocal
IP          //internet protocal

OSI

Open system interconnect,开发系统互联。

七层协议

1.物理层
    RJ45        //
    802.3       //wifi
2.链路层
3.网络层
    ip          //internet protocal
4.传输层
    tcp         //transfer control protocal,传输控制协议
                //有连接,流方式,
                //三次握手时两次身份识别的过程。

    udp         //user diagram protocl,用户数据报协议
                //无连接,无固定路由,不安全,无回执,有限制(64K)

5.会话层
    SQL         //会话开启关闭
    RPC         //
6.表示层
    数据展示进行控制,是否加密,是否以ascii方式。

7.应用层
    http        //hyper text tranfer protocal
    ftp         //file transfer protocal
    smtp        //simple mail transfer protocal
    https       //

8.端口和ip
    8.1)ip
        网络地址。

    8.2)端口
        -32768 ~ 32767
        0 ~ 65535   short
        0 ~ 1023 熟知端口(well known)
        3306
        80
        22

Socket

套接字编程。

InetAddress

地址,没有端口

InetSocketAddress

地址 + 端口

NIO

1.简介
    New IO.
    Socket,阻塞,
2.服务器端
    监听程序,监听特定的端口。

3.客户端
    连接到指定主机的指定端口.

ByteBuffer

1.介绍
    字节缓冲区,内部封装的是数组。
    [属性]
    a)capacity
    容量,缓冲区的总大小。

    b)position
    位置,当前指针的位置。数组的下标值。

    c)limit
    限制,对缓冲区使用的限制,前n个可以使用的元素个数,
    也可以理解为第一个不能使用的元素下标值,默认是容量。

    d)mark
    对当前的指针位置进行标记,方便后来进行reset重置指针。

    e)remain
        剩余的空间,limit - position.
    
    f)原则
        
        0 <= mark <= position <= limit <= capacity
2.方法
    buf.limit()             //get
    buf.limit(int n)        //set
    
    buf.position()          //get
    buf.position(int n)     //set

    buf.mark()              //当前位置,

    buf.remaining()         //limit - position
    buf.hasRemaining()      //判断是否还有可用空间

    buf.clear()             //清空,pos = 0 , limit = capacity , mark = -1 ,
                            //缓冲区归位。

    buf.flip()              //拍板,limit = position , position = 0 ; mark = -1
                            //

Channel

1.介绍
    通道表示到达实体的打开的连接,这些实体可以是socket,file,硬件或其他组件,
    可以执行不同的IO操作,比如读和写。

    通道可以打开也可以关闭,通道一经创建就打开了,一旦close就变为关闭状态。
    通道关闭后,执行操作会报异常。
    使用可以使用isOpen()来判断是否开启。
    通道更具备安全性。


2.零拷贝
    FileChannel.transferTo(...) ;
    从源通道中读取指定位置的指定个数的字节,写入的目标通道。
    许多操作系统直接从文件系统缓存完成字节的传输。可能更加高效。

作业

1.自定义数据源
2.和尚吃馒头
Tables Are Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1
graph TD

A[Start] --> B[Your Operation]
B --> C{Yes or No?}
C --> |yes| D[end]
C --> |no| B

你可能感兴趣的:(关于Markdown的css调整)