实践Go的面向对象
Go是一种面向对象的语言吗?
关于Go是一种面向对象的语言吗这种问题,官方的解释是难说,说不准,这回答就有意思了!在我看来尽管Go具有类型和方法,并允许使用面向对象的编程风格,但没有类型层次结构。 Go的接口完全提供了一种不同的方法,可以将类型嵌入其他类型,达到继承的效果,其实又完全不同于继承,因为Go其中一个特点是可以为任何类型的数据定义方法,所以再讨论Go是不是面向对象的语言的时候还是可以先体验体验Go的Functional Programming

Go是一种面向对象的语言吗?
关于Go是一种面向对象的语言吗这种问题,官方的解释是难说,说不准,这回答就有意思了!在我看来尽管Go具有类型和方法,并允许使用面向对象的编程风格,但没有类型层次结构。 Go的接口完全提供了一种不同的方法,可以将类型嵌入其他类型,达到继承的效果,其实又完全不同于继承,因为Go其中一个特点是可以为任何类型的数据定义方法,所以再讨论Go是不是面向对象的语言的时候还是可以先体验体验Go的Functional Programming

记录了一下最近学习golang语言遗忘的和模糊的知识点,主要涵盖主函数退出返回值、如何编写测试程序、如何定义常量、golang的类型转换、golang中的预定义值、指针与其他语言的差异(主要是C语言),以及运算符等等!

本篇主要是讲述了数组和切片、Map的初始化方式与基本使用、重点阐述了如何使用Map实现Set、用Map实现工厂模式,以及字符串的使用,字符串常用API、Unicode与UTF8的关系!

传统的IO流都是阻塞式的。也就是说,当一个线程调用read() 或write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行IO操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。
Java NIO是非阻塞模式的。当线程从某通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。线程通常将非阻塞IO的空闲时间用于在其他通道上执行I0操作,所以单独的线程可以管理多个输入和输出通道。因此,NIO可以让服务器端使用一个或有限几个线程来同时处理连接到服务器端的所有客户端。


SYN攻击其实就是Server收到Client的SYN,Server向Client发送SYN-ACK之后未收到Client的ACK确认报文, 这样服务器就需要维护海量的半开连接 ,等待客户端的 ACK, 最终导致服务器资源耗尽(sync queue 满)而丢弃新的连接。 Server会不断重发SYN-ACK,Linux服务器默认直到63秒才断开连接!
其中一种防护方式是SYN Cookie, SYN Cookies 的应用允许服务器当 SYN 队列被填满时避免丢弃连接。相反,服务器会表现得像 SYN 队列扩大了一样。服务器会返回适当的SYN+ACK响应,但会丢弃 SYN 队列条目。如果服务器接收到客户端随后的ACK响应,服务器能够使用编码在 TCP 序号内的信息重构 SYN 队列条目。