云计算的架构:
1 software as a service 软件即服务,简称SaaS,这层的作用是将应用主要以基于Web的方式提供给客户;由于SaaS层离普通用户非常接近,所以在SaaS层所使用到的技术,大多耳熟能详,下面是其中最主要的五种:由于通用性和较低的学习成本,大多数云计算产品都会比较倾向HTML 、JavaScript和CSS这对黄金组合。
2 Platform as a Service平台即服务,简称PaaS,这层的作用是将一个应用的开发和部署平台作为服务提供给用户;提供对操作系统和相关服务的访问。它让用户能够使用提供商支持的编程语言和工具把应用程序部署到云中。用户不必管理或控制底层基础架构,而是控制部署的应用程序并在一定程度上控制应用程序驻留环境的配置。PaaS是非常经济的面对的用户是开发人员。
3 Infrastructure as a Service基础架构即服务,简称IaaS,这层的作用是将各种底层的计算(比如虚拟机)和存储等资源作为服务提供给用户。它由服务器、网络设备、存储磁盘等物理资产组成。在使用IaaS时,用户并不实际控制底层基础架构,而是控制操作系统、存储和部署应用程序,还在有限的程度上控制网络组件的选择。
从用户角度而言,这三层服务,它们之间关系是独立的,因为它们提供的服务是完全不同的,而且面对的用户也不尽相同。
但从技术角度而言,云服务这三层之间的关系并不是独立的,而是有一定依赖关系的,比如一个SaaS层的产品和服务不仅需要使用到SaaS层本身的技术,而且还依赖PaaS层所提供的开发和部署平台或者直接部署于IaaS层所提供的计算资源上,还有,PaaS层的产品和服务也很有可能构建于IaaS层服务之上。
在管理方面,主要以云的管理层为主,它的功能是确保整个云计算中心能够安全和稳定的运行,并且能够被有效地管理。
正则表达式:
为匹配文本的一组标记符. 说白了,就是一些字符( 元字符),匹配了多少次(重复),在哪里(位置)匹配的范式:元字符,重复,位置
文件系统的概念:
文件系统是用来组织数据在存储介质上的存储方式以及检索方式的。没有文件系统,信息在存储介质上会是一个很大的信息块,没法知道一条信息什么时候会结束,也没法知道信息在什么时候开始,对信息的管理就会十分的麻烦。文件系统可以被使用在很多不同的存储设备(storage devices)上,这些存储设备使用不同的媒介(media),比如磁带,移动硬盘,闪存等,有时候,计算机的主存(RAM)甚至会创建一个临时的文件系统来临时使用。每一种文件系统的结构,逻辑,存取速度,灵活性,安全性,大小,等都不一样。
windows系统常见的文件系统:
FAT:目前最通用的的是FAT32(好多U盘格式)单个文件最大为4G;最大文件数量268,435,437;分区最大容量8TB;可在多种操作系统读写。
NTFS:(New Technology File System)它是一种比FAT32功能更加强大的文件系统。NTFS系统是一个日志性的文件系统,系统中对文件的操作都可以被记录下来,当系统崩溃之后,利用日志功能可以修复数据; Mac OS 10.4+系统上,NTFS格式是只读的; 最大文件数量可达2的32次方减一。
ExFAT(Extended File Allocation Table)又叫FAT64,对FAT文件系统的扩展。也是微软开发的文件系统,但说它是windows下的文件系统并不合适,它是专门为闪存盘设计的文件系统,单个文件突破了4G的限制,而且分区的最大容量可达64ZB(比EB大一级的),建议512TB。ExFAT在windows,Linux以及Mac系统上,都可以读写,作为U盘或者是移动硬盘的格式还是比较合适的。
数据库事务的四大特性:
(1) 原子性(Atomicity):指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency):指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
⑶ 隔离性(Isolation):是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
⑷ 持久性(Durability):指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。
面向对象的三大特性:封装,继承,多态
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
进程间通信方式:
1. 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2. 命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
3. 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
5. 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
6. 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
7. 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
8. 信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
网络入侵方式
1.描探测和嗅探
扫描探测攻击是指攻击者通过在得到目标IP地址空间后,利用特定的软件对其进行扫描或嗅探,根据扫描技术侦察得知目标主机的扫描端口是否是处于**状态,主机提供了哪些服务,提供的服务中是否含有某些缺陷,及服务器的操作系统,从而为以后的入侵攻击打下基础。
2.拒绝服务(DoS)攻击
Dos是Denial of SeⅣice的简称,即拒绝服务攻击,指利用网络协议的缺陷来耗尽被入侵目标的资源,使得被入侵主机或网络不能提供正常的服务和资源访问为,最终使得目标系统停止响应甚至崩溃。是网络上攻击比较频繁,影响严重的一类攻击。
3.缓冲区溢出攻击
缓冲区溢出攻击是指利用缓冲区溢出漏洞所进行的攻击行为,即将一个超过缓冲区规定长度的字符串放置到缓冲区所致。缓冲区溢出攻击能干扰并打乱具有某些特权运行的程序的功能,这样便能使攻击者取得程序的控制权,进而实现对整个目标主机的控制,进行各种各样的非法操作。
4.欺骗类攻击
欺骗类攻击是攻击者较常使用的攻击手段之一,常见的有IP欺骗攻击、WEB欺骗和ARP欺骗攻击。
5.SQL注入式攻击
SQL注入式攻击,简称隐码攻击。SQL注入漏洞是盛行已久的攻击者对数据库进行攻击的常用手段,攻击者通过网站程序源码中的漏洞进行SQL注入攻击,渗透获得想得知的数据,获得数据库的访问权限等,其中获得账号及密码是其中最基础的目的。甚至数据库服务器被攻击,系统管理员帐户被窜改等后果。CSDN 泄密事件就是由SQL注入漏洞所引发的。
网络安全技术: 防火墙、身份认证、访问控制、加密、安全路由等
1.防火墙技术
防火墙技术实质也是一种隔离控制技术,具备分离、限制和分析等功能。入侵者在攻击目标主机之前,必须首先经过防火墙的安全防线,接受防火墙对流经的数据进行扫描,判断是否符合安全规则,防护墙将非法的访问拒之墙外,对合法的行为和数据放行,这样能够过滤掉一些攻击,从而阻止攻击者对被保护系统的非法入侵。最简单的是包过滤技术。
2.身份认证和访问控制技术
身份认证是网络中用于确认操作者身份的一项技术,目前最为安全地身份认证方式是动态密码. 核心思想是:将访问权限与对应的角色相联系,通过给用户分配合适的角色, 让用户与访问权限相关联,从而达到规避入侵风险的作用。
3.密码技术
密码是一项很早就已经使用的防止信息泄漏或篡改的重要技术。密码技术的基本思想就是把信息伪装以隐藏其真实内容,即对信息做一定的数学变化,防止未授权者对信息的攻击。密码技术包括加密和解密两方面。
4.IPS技术
IPS(Intrusion Prevention System)即入侵防御系统,它可以深度检测流经的数据流量,第一时间对恶意数据进行拦截以阻断攻击,对滥用数据进行限流以保护网络带宽资源,是一种积极主动的、积极的入侵检测和防御系统,简单地说,可认为IPS就是防火墙技术加上入侵检测系统,在IDS监测的功能上又增加了主动响应的功能。
5.v*n技术
v*n(Virtual Private Network)即虚拟专用网。通过网络层利用数据包封装技术和密码技术,使得数据包在公共数据网中通过加密的安全途径进行传播,从而在网络中建立起一个临时的、安全的、稳定的隧道连接,即使传输的数据被截获,也很难将数据进行解密。
6.其它安全技术
除以上五类安全技术外,还有病毒防护技术,安全路由技术和安全扫描技术等。
常用的加密算法有: 对称加密算法有DES、IDEA和AES。非对称加密算法RSA和DSA
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,**管理成为用户的负担。
不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。适用于分布式系统中的数据加密
DES算法:DES的算法是对称的,既能用做加密又可用做解密。DES算法具有安全性极高,至今,除了用穷举法对DES算法进行攻击外,还没有发现其它更为有效的攻击方法。但随着计算机运算速度越来越快,对密码的强度的需求也越来越高,可以通过增加DES的**长度来达到更高的抗攻击性,如3DES。
RSA算法:RSA是Rivest、Shamir和Adleman提出来的基于数论的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准,其加密基础是大数分解和素数检测。
AES算法:高级加密标准,即下一代的加密算法标准,特点是结构简单速度快,安全性高,目前AES标准的一个实现是Rijndael算法;
MD5算法:MD5是计算机安全领域广泛使用的一种散列函数,用来为消息的完整性提供保护,还广泛运用于操作系统的登陆认证上,如Unix登录密码、数字签名等方面。
18种常见网络入侵方法
1.拒绝访问:这已经成为一个很常见的网络恶作剧。进攻者用大量的请求信息冲击网站,从而有效地阻塞系统,使运行速度变慢,甚至网站崩溃。这种使计算机过载的方法常常被用来掩盖对网站的入侵。
2.扫描器:通过广泛地扫描因特网来确定计算机、服务器和连接的类型。恶意的人常常利用这种方法来找到计算机和软件的薄弱环节并加以利用。
3.嗅觉器这种软件暗中搜寻正在网上传输的个人网络信息包,可以用来获取密码甚至整个信息包的内容。
4.网上欺骗:伪造电子邮件,用它们哄骗用户输入关键信息,如邮箱账号、个人密码或信用卡等。
5.特洛伊木马:这种程序包含有探测一些软件弱点所在的指令,安装在计算机上,用户一般很难察觉。
6.后门:黑客为了防止原来进入的通道被察觉,开发一些隐蔽的进入通道(我们俗称的后门),使重新进入变得容易,这些通道是难以被发现的。
7.恶意小程序:这是一种微型程序,有时用Java语言写成,它能够滥用计算机资源,修改硬盘上的文件,发出伪造的电子邮件以及偷窃密码。
8.进攻拨号程序:这种程序能够自动的拨出成千上万个电话号码,用来搜寻一个通过调制解调器连接的进入通道。
9.逻辑炸弹:是嵌入计算机软件中的一种指令,它能够触发对计算机的恶意操作。
10.密码**:入侵者**系统的登录或管理密码及其他一些关键口令。
11.社交工程:这种策略是通过与没有戒心的公司雇员交谈,从中得到有价值的信息,从而获得或猜出对方网络的漏洞(如猜出密码),进而控制公司计算机系统。
12.垃圾搜寻:通过对一家公司垃圾的搜寻和分析,获得有助于闯入这家公司计算机系统的有用信息。这些信息常常被用来证实在“社交工程”中刺探到的信息。
13.系统漏洞:这是很实用的攻击方式。入侵者利用操作系统漏洞,可以很轻易地进入系统主机并获取整个系统的控制权。
14.应用程序漏:与上述系统漏洞的方式相似,也可能获取整个系统的控制权。
15.配置漏洞:通常指系统管理员本身的错误。
16.协议/设计漏洞 指通信协议或网络设计本身存在的漏洞,如Internet上广泛使用的基本通信协议——TCP/IP,本身设计时就存在一些缺陷。
17.身份欺骗:包括用户身份欺骗和IP地址欺骗,以及硬件地址欺骗和软件地址欺骗。通过适当的安全策略和配置可以防止这种攻击。
18.炸弹:是利用系统或程序的小毛病,对目标发送大量洪水般的报文,或者非法的会引起系统出错的数据包等,导致系统或服务停止响应、死机甚至重启系统的攻击。这种方式是最简单,但是却是最有效的一种攻击方式。最近黑客们攻击美国的各大网站就是用的这种方法。
Java web 优化手段
简单地来看一个浏览器用户访问的流程: 浏览器->服务器->返回结果显示
这么简单地看,可能想得到的优化手段很少,常见的可能就是优化sql,加快数据库处理;加个缓存,加快返回;使用静态文件,减少动态计算。
细分开来看每一个步骤:
1 浏览器发起一个请求,如果本地有缓存会请求本地缓存文件,没有缓存会请求服务器。所以这里就有一个优化点:需要把常用的css和js文件独立成独立的静态文件,一次加载以后,后面直接加载本地缓存。另外IE浏览器内核在请求图片下载时会限制一次只能同时从同一个域名下载两个文件,这里又有优化点,分散图片存储的域名。使用静态文件,减少计算的同时增加本地缓存的使用,减少请求。静态化是常见的一种优化手段。
2 浏览器真实发起请求服务器时,首先被请求到的是服务器的操作系统层,那么服务器的操作系统对外界连接的响应能力,就是你需要了解的东西了。比如linux的内核参数的调整如何影响最大连接数,简单的一个例子就是在一个默认最大文件句柄数只有1024的服务器上,超过这个压力的时候,你如何优化你的程序,也都没有意义。入口只有那么窄,你得把口给扩开。熟悉服务器的性能,调优系统内核也是一个必要的手段。
3 系统层再把连接交给你的server做处理的时候,server的配置这个时候也相当重要。比如apache的最大连接数,tomcat的最大连接数。对server的配置调优很影响性能。比如tomcat在处理静态文件上的能力比apache要差很多,所以在apache+tomcat的负载均衡就能很好地进行动静请求的分离,提高响应速度。又比如tomcat新版本里的NIO技术又比普通IO性能好上不少。对server的了解,要保持跟踪最新动态。
4 server再把数据交给你的程序处理的时候,就到了考验你编程能力的时候了。你得对你的程序的执行效率非常清楚。必须保证每个响应都在尽量短的时间内执行成功。还有比较常见的一些对不常更新的数据使用内存缓存来加快访问。内存永远是最快的。这方面的优化也有非常非常多的事情可以去做,而且跟你的编程息息相关。
5 程序处理的时候,数据库连接池的使用,连接池大小的配置,连接池性能的优化,sql语句的优化,等等都可能影响你的程序的效率,这些地方永远是值得关注的。当然,优秀的算法在这个地方是少不了的。一个好的业务逻辑设计,可能极大提升你的程序性能。对数据库操作的调优也是一个永远的话题。
6 数据传递到数据库进行保存和查询的时候,你就必须对你的数据库的使用有所了解,知道数据库本身的哪些配置可以优化从而带来性能的提升。一个简单的例子就是在内存足够大的时候,增大mysql的内存缓存就可以极大提升它的响应速度。
7 现在server把数据返回给用户了,那么返回的数据的大小又同样影响着结果的显示速度。尽量减小数据的大小,比如开启apache的gzip就能极大压缩常见的静态文件,可以保证用户更快完出数据的下载,同时节省你的服务器使用带宽,老板一定会很高兴的。
8 用户下次访问的时候,同样面临一个优化的方式:是利用上次跟服务器建立好的连接再次通讯呢?还是重现跟服务器建立连接?这就是在server端做配置要考虑的一个问题,在低并发下,保持跟用户建立的socket连接,并且让用户通过这个连接来多次访问,可以提高速度。但是在高并发下,大量这种建立好的连接就意味着其他用户失去了进来的机会。所以这个是需要权衡的。一般情况下最好可以预估一下一个用户可能在多长的时间里连续发起多少个请求,然后可以把用户断开,把资源用来服务其他用户。
9 ajax技术也是在减少大请求,使用更小的局部数据更新来代替整个页面的刷新,加快用户的响应速度,结合静态化能完美改善性能。
UTF-8编码
UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。
对于上面的问题,代码中给出的两个字节是
十六进制:C0 B1
二进制:11000000 10110001
对比两个字节编码的表示方式:
110xxxxx 10xxxxxx
提取出对应的UNICODE编码:
00000 110001
可以看出此编码并非“标准”的UTF-8编码,因为其第一个字节的“有效编码”全为0,去除高位0后的编码仅有6位。由前面所述,此字符仅用一个字节的UTF-8编码表示就够了。
JAVA在把字符还原为UTF-8编码时,是按照“标准”的方式处理的,因此我们得到的是仅有1个字节的编码。
优点
UTF-8编码可以通过屏蔽位和移位操作快速读写。字符串比较时strcmp()和wcscmp()的返回结果相同,因此使排序变得更加容易。字节FF和FE在UTF-8编码中永远不会出现,因此他们可以用来表明UTF-16或UTF-32文本(见BOM) UTF-8 是字节顺序无关的。它的字节顺序在所有系统中都是一样的,因此它实际上并不需要BOM。
缺点
你无法从UNICODE字符数判断出UTF-8文本的字节数,因为UTF-8是一种变长编码它需要用2个字节编码那些用扩展ASCII字符集只需1个字节的字符 ISO Latin-1 是UNICODE的子集,但不是UTF-8的子集 8位字符的UTF-8编码会被email网关过滤,因为internet信息最初设计为7位ASCII码。因此产生了UTF-7编码。 UTF-8 在它的表示中使用值100xxxxx的几率超过50%, 而现存的实现如ISO 2022, 4873, 6429, 和8859系统,会把它错认为是C1 控制码。因此产生了UTF-7.5编码。