试题小结3

项目和项目之间的通信

两个java项目,他们之间进行信息的通信

前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径

其实两个java项目之间的通信还是使用HTTP的请求。主要有两种方式:

①使用apache的HttpClient方式。

②使用JDK自带的java.net包下的HttpURLConnection方式。

HttpURLConnection方式:

HttpURLConnection传递请求常用的有两种方式:POST和GET方式。使用setRequestMethod()方法设置传递的方式。


反爬如何处理

1.通过user-agent进行反爬

2.通过referer进行反爬

3.通过cookie进行反爬

4.通过ip地址进行反爬

5.通过前端样式进行反爬

http://t.csdn.cn/A3Etk


乱码如何解决?

通过 DEBUG 或者打印日志来锁定导致乱码的原因,看看自己的乱码到底是属于哪一种,找到了乱码的原因,问题就解决的差不多了
1. 解决URL地址乱码
如果我们把请求参数放到了URL地址栏中,结果出现了乱码,这个问题在GET、DELETE 等请求中是比较常见的,而解决方案也很简单,我们只需要修改 Tomcat 的 conf/server.xml 配置文件,修改 URL编码格式

1、utf8解决JSP中文乱码问题

2、Tomcat 5.5 中文乱码(利用tomcat已经写好的字符集过滤器)

3、 get方式的解决办法(修改tomcat server.xml,但是不建议使用)

转载于:http://blog.itpub.net/800861/viewspace-969211/


集合的接口和构成有哪些?

试题小结3_第1张图片

 

1、List接口

List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。

ArrayList 可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。

LinkedList 中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。

Vector 是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用

2、Set接口

Set关心唯一性,它不允许重复。

HashSet 当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。

LinkedHashset 当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。

TreeSet 当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。)

3、Queue接口

Queue用于保存将要执行的任务列表。

LinkedList 同样实现了Queue接口,可以实现先进先出的队列。

PriorityQueue 用来创建自然排序的优先级队列。

4、Map接口

Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。

HashMap 当需要键值对表示,又不关心顺序时可采用HashMap。

Hashtable 注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。

LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。

TreeMap 当需要键值对,并关心元素的自然排序时可采用它。

什么是内存泄漏,常见引起引起内存泄漏的原因,及解决办法

http://t.csdn.cn/InFPt

什么是内存泄漏,常见引起引起内存泄漏的原因,及解决办法_内存泄露_Lonely池的博客-CSDN博客

内存泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。

事务及隔离级别

(2条消息) 【MySql】MySql事务及隔离级别_mysql设置隔离级别_爱穿背带裤的馫的博客-CSDN博客

设计模式

http://t.csdn.cn/Nre3c

23种设计模式概述

同步块和同步方法哪个是更好的选择

同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。

post和get的区别

在Web开发中,GET和POST是HTTP方法,用于向服务器发送请求的方式。它们有以下的区别:

  1. GET方法是用于获取资源的请求,而POST方法是用于提交数据至服务器的请求。
  2. GET请求的参数会附加在URL的末尾,可以被其他人看到,而POST请求的参数会被放在请求的body中,不会直接暴露在URL中,更安全。
  3. GET请求可以被缓存,可以被浏览器收藏夹保存,而POST请求不会被缓存。
  4. GET请求的参数长度受到限制,通常为2048个字符,而POST请求的参数长度没有限制。
  5. GET请求对数据的类型没有限制,可以发送任何类型的数据,而POST请求可以发送各种类型的数据,如图片、文件等。

总之,GET请求适用于获取数据,POST请求适用于提交数据,且POST请求更安全,可以发送更多类型的数据。

数据库性能调优

数据库优化的四大方法

  • 架构优化

  • 硬件优化

  • DB优化

  • SQL优化

此上而下,位置越靠前优化越明显,对数据库的性能提升越高。

1.架构优化

1.1分布式缓存

注意:引入分布式缓存后系统需要考虑如何应对缓存穿透、缓存击穿和缓存雪崩的问题。

1.2读写分离

一主多从,读写分离,主动同步,是一种常见的数据库架构优化手段。

适用于读多写少,通过增加从库数量可以线性提升系统读性能。

 主库,提供数据库写服务;从库,提供数据库读能力;主从之间,通过binlog同步数据。

当准备实施读写分离时,为了保证高可用,需要实现故障的自动转移,主从架构会有潜在主从不一致性问题。

1.3 水平切分

架构优化小结

  1. 分布式缓存架构可能比读写分离更适用于高并发、大数据量大场景。
  2. 读写分离主要是用于解决 “数据库读性能问题”
  3. 水平切分主要是用于解决“数据库数据量大的问题”

2.硬件优化

更换数据库的硬盘

3.DB优化

数据库实例参数优化遵循三句口诀:日志不能小、缓存足够大、连接要够用。

数据库在架构设计中都会采用如下两个优化手法:

  • 先将事务写到日志文件RedoLog(WAL),将随机写优化成顺序写

  • 加一层缓存结构Buffer,将单次写优化成顺序写

4.SQL优化

  • 合理使用索引

索引少了查询慢;索引多了占用空间大,执行增删改语句的时候需要动态维护索引,影响性能 选择率高(重复值少)且被where频繁引用需要建立B树索引;一般join列需要建立索引;复杂文档类型查询采用全文索引效率更好;索引的建立要在查询和DML性能之间取得平衡;复合索引创建时要注意基于非前导列查询的情况

  • 使用UNION ALL替代UNION

UNION ALL的执行效率比UNION高,因为UNION执行时需要排重;

  • 避免select * 写法

执行SQL时优化器需要将 * 转成具体的列;每次查询都要回表,不能走覆盖索引。

  • JOIN字段建议建立索引

一般JOIN字段都提前加上索引

  • 避免复杂SQL语句

提升可阅读性;避免慢查询的概率;可以转换成多个短查询,用业务端处理

  • 避免where 1=1写法
  • 避免order by rand()类似写法

RAND()导致数据列被多次扫描

执行计划
要想优化SQL必须要会看执行计划,执行计划会告诉你哪些地方效率低,哪里可以需要优化。通过explain sql 可以查看执行计划

SQL优化小结
这里给大家总结一下SQL优化的套路:

  1. 查看执行计划 explain sql
  2. 如果有告警信息,查看告警信息 show warnings;
  3. 查看SQL涉及的表结构和索引信息
  4. 根据执行计划,思考可能的优化点
  5. 按照可能的优化点执行表结构变更、增加索引、SQL改写等操作
  6. 查看优化后的执行时间和执行计划
  7. 如果优化效果不明显,重复第四步操作

http://t.csdn.cn/7iNWO

以下是Linux常用命令大全:

  1. cd:切换目录
  2. ls:列出目录内容
  3. pwd:显示当前目录
  4. mkdir:创建新目录
  5. touch:创建新文件
  6. rm:删除文件或目录
  7. cp:复制文件或目录
  8. mv:移动文件或目录
  9. cat:显示文件内容
  10. grep:在文件中查找指定内容
  11. find:在目录中查找文件
  12. tar:压缩和解压文件
  13. gzip:压缩文件
  14. unzip:解压缩文件
  15. chmod:修改文件权限
  16. chown:修改文件所有者
  17. chgrp:修改文件所属组
  18. ps:查看进程信息
  19. top:实时查看进程和系统状态
  20. kill:终止进程
  21. ifconfig:配置网络接口
  22. ping:检测网络连接
  23. netstat:显示网络状态
  24. scp:安全地远程复制文件
  25. ssh:通过SSH协议远程登录服务器
  26. su:切换用户
  27. sudo:以超级用户权限执行命令
  28. apt-get:Debian和Ubuntu下的包管理工具
  29. yum:CentOS和Fedora下的包管理工具
  30. man:查看命令的手册页

请注意,这只是一些常用命令的概述,Linux还有很多其他命令和功能。如果您需要更详细的帮助,您可以查阅Linux的官方文档或者使用“man”命令查看命令的详细用法。

JDK1.8新特性

http://t.csdn.cn/7RCBG

stream流

JAVA stream流详细教程_浩骞的博客-CSDN博客

你可能感兴趣的:(java)