ARTS-week62

Algorithms

Longest Uncommon Subsequence I
思路: 如果两个字符串相等,一定没有非共同子序列,反之,如果两个字符串不等,那么较长的那个字符串就是最长非共同子序。

1
2
3
4
5
6
class Solution {
public:
int findLUSlength(string a, string b) {
return a == b ? -1 : max(a.size(), b.size());
}
};

Review

本周阅读英文文章
1、Polyglot Files: a Hacker’s best friend

2、MongoDB Performance 101: How To Improve the Speed of MongoDB App

3、Simple neural network implementation in C

Technique

池化技术的核心思想是空间换时间,期望使用预先创建好的对象来减少频繁创建对象的性能开销,同时还可以对对象进行统一的管理,降低对象的使用成本等。

1、数据库连接池有两个最重要的配置: 最小连接数和最大连接数,他们控制着从连接池中获取连接的流程:
1)如果当前连接数小于最小连接数,则创建新的连接处理数据库请求;
2)如果连接池中有空间连接则复用空闲连接;
3)如果空闲连接池已经大于等于最大连接数,则按照配置中设定的时间(C3P0的连接池配置是CheckoutTimeout)等待旧的连接可用;
注: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。
4)如果等待超过了这个设定时间则向用户抛出错误。

2、连接池故障原因:
1)数据库的域名对应的IP发生了变更,池子的连接还使用旧的IP,当旧IP下的数据库服务关闭后,再使用这个连接查询旧会报错;
2)MySQL的wait_timeout参数控制着当数据库连接闲置多长时间后,数据库会主动的关闭这条连接。这个机制对于使用方是无感知的,使用这个被关闭的连接时就会发生错误。

3、保证可用性:
1)启动一个线程来定期检测连接池中的连接是否可用,比如连接发送select 1命令看数据库是否抛出异常,如果抛出就从连接池中移除;
2)获取连接后,先校验是否可用,如果可用才会执行SQL语句。比如DBCP的连接池的testOnBorrow配置项,就是控制是否开启这个验证。这个方式在获取连接时会引入多余的开销。

4、池化的缺陷,比如:
1)存储池中的对象会消耗多余的内存,如果对象没有被频繁使用,就造成了内存上的浪费;
2)池中的对象需要在系统启动的时候就预创建完成,一定程序上增加了系统启动时间。

Share

一个快速测试Python正则表达式的网站: https://pythex.org/

参考

《池化技术:如何减少频繁创建数据库连接的性能损耗?》

0%