STL难点

类中()运算符重载的成员函数本质是一个类的对象,因此也称为函数对象,即仿函数,可做函数参数

lambda表达式,标志为[],如[](int a){cout<<a<<endl;}

内建函数对象#include <functional>

6个算数类函数对象,除了negate是一元运算,其他都是二元运算。

template<class T> T plus<T>//加法仿函数   plus<int>(10,4);
template<class T> r minus<T>/ /球法仿函数

template<class T> T multiplies<T>//乘法仿函数

tenplate<class T> T divides<T>//除法仿函数

tenplate<class T> T modulus<T>//取模仿函数

template<class T> T negate<T>//取反仿函数  negate<int>n
6个关系运算关函数对象,每一种都是二元运算

template<class T> bool equal_to<T>//等于
template<class T> bool not_equal_to<T>//不等于

template<elass T> bool greater<T>//大于    greater<int>()
template<class T> bool greater_eqa1<T>//大于等于

template<class T> bool less<T>//小于
tenplate<class T> bool less_equal<T>//小于等于

逻辑运算类运算函数,not为一元运算,其余为二元运算

template<class T> bool logical_ard<T>//逻辑与
tenplate<class T> bool logical_or<T>/ /逻辑或

template<class T> bool logical_not<T>/1逻辑非
 

适配器

        函数对象适配器:1.利用内建函数对象bind2nd来将两个参数绑定为一个参数

                              2.子类继承public binary_functional<参数1 类型,参数2类型,返回值类型>

        取反适配器:not(n)+bind2nd,n代表n元函数对象

        函数指针适配器:ptr_fun,将一个普通函数适配为函数对象

        成员函数适配器:mem_fun_ref(&person::showage)

### JavaRedis 面试题及常见问题解答 #### 关于 Redis 的 IO 多路复用机制 Redis 使用了 I/O 多路复用机制来提高其并发处理能力。这种机制使得单个线程可以同时监听多个 I/O 事件,并在有事件发生时立即通知程序进行相应处理。常用的 I/O 多路复用技术包括 `select`、`poll` 和 `epoll` 等[^1]。 ```java // 示例:使用 NIO 进行非阻塞 I/O 操作 Selector selector = Selector.open(); ServerSocketChannel serverChannel = ServerSocketChannel.open(); serverChannel.configureBlocking(false); serverChannel.bind(new InetSocketAddress(8080)); serverChannel.register(selector, SelectionKey.OP_ACCEPT); while (true) { int readyChannels = selector.select(); if (readyChannels == 0) continue; Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if (key.isAcceptable()) { // 接受连接并注册读取就绪事件 } else if (key.isReadable()) { // 处理读取操作 } keyIterator.remove(); } } ``` #### Redis 数据结构容量限制 一个 Redis 实例理论上能够存储大量的 keys,具体数量取决于服务器硬件资源以及配置参数。对于 List、Set 和 Sorted Set 类型的数据结构来说,它们各自的最大元素数目也相当可观。然而具体的数值上限并未给出明确说明,通常认为受限于可用内存大小和系统稳定性考虑[^2]。 #### AOF 文件优化与混合持久化策略 为了应对 AOF 日志文件过大带来的挑战,Redis 提供了 AOF 重写功能。该过程涉及将当前数据库状态转换成一系列高效的写入指令保存至新的日志文件中,从而减少冗余记录并压缩整体尺寸。尽管如此,在此期间正常的更新活动仍会被继续追加到旧版本的日志里直到完成切换;另外值得注意的一点是在大体量实例下采用纯 AOF 方式恢复速度较慢,因此实践中往往结合 RDB 快照来进行快速初始化后再应用增量变更以达到效率上的平衡[^3]。 #### Redis 中的事务特性及其局限性 Redis 支持基本形式下的事务控制语句如 `MULTI`, `EXEC`, `DISCARD` 及 `WATCH`. 用户可以通过这些命令组合起来定义一组待执行的操作序列作为逻辑单元对待。不过需要注意的是,一旦某个成员失败并不会触发整个批次回退的行为——即缺乏传统意义上完整的 ACID 属性保障。此外,虽然被标记为“原子”的提交动作确实能在一定程度上隔离外部干扰因素的影响,但这并不意味着其间发生的任何异常状况都能得到妥善解决[^4]. ```java Jedis jedis = new Jedis("localhost"); jedis.multi(); // 开启事务模式 try { jedis.set("foo", "bar"); // 添加事务中的命令 jedis.incr("counter"); // 继续添加更多... List<Object> results = jedis.exec(); // 执行所有排队的任务并将结果返回给客户端 } catch (Exception e) { jedis.discard(); // 如果出现问题则取消之前所有的更改尝试 } // WATCH 键用于乐观锁定 jedis.watch("some-key"); String value = jedis.get("some-key"); if ("expected-value".equals(value)) { Transaction t = jedis.multi(); t.set("some-key", "new-value"); t.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值