- 浏览: 43705 次
- 性别:
- 来自: 北京
最新评论
文章列表
先说说面试的背景:大概10天前的时候,接到美团HR的面试电话,说是终试,本来要去的,但是在约好面试的时间前一天公司项目临时比较着急,所以回复邮件取消了本次面试;过了一周的周三,HR又电话邀请,商量面试时间,就约在了周四再决定时间;到了18号也就是周四,再次接到HR电话,如此一波三折已不好再推辞,就答应了周五上午10点的面试。
周五大概9点50分左右来到了望京研发园恒电大厦,大概10分钟后,HR领我去了7层会议室。等了大约一刻钟面试官进来了,以下是面试内容:
1.Redis事务机制、LRU算法的实现;自己设计数据结构实现LRU(双端队列,动态调整(后来加上的 ...
Redis安全
这篇文章从Redis的角度提供了一个关于安全的介绍,包括访问控制、恶意攻击等话题。
更多关于安全的话题请打开GitHub中的问题,或者当你严重程度的依赖安全,请使用文章最后介绍的GPG。
Redis通用的安全模式
Redis设计时允许被信任的客户端访问。这意味着将Redis暴露在互联网上,或者一个不被信任的客户端可以访问Redis TCP或者UNIX套接字的环境中是不好的。
举个例子,在通常的web应用环境中,Redis被用作数据库、缓存或者消息系统,web应用前端请求Re ...
事务
multi、exec、discard、watch是Redis中事务的基础。他们允许一组命令在一步内执行完成,并且可以实现如下特点:
1)在事务中的一组命令被序列化并按照顺序追个执行。在事务执行过程中不会出现穿插执行其他客户端请求的问题。这保证了一组命令可以像一个单独的命令一样被执行。
2)事务中的命令要么都被执行要么都不被执行,所以它是原子性的。在事务中exec命令触发事务中所有命令的执行,所以如果客户端在调用multi命令之前丢失了与服务器端的连接,事务中的任何命令都不会被执行,相反,如果exec被调用了,那么事务中所有 ...
redis-cli是Redis的命令行接口,用来直接从终端发送命令给Redis并接受服务器的响应。
redis-cli有两个主要的运行模式:一个是交互式模式,用户输入命令并接受Redis的响应;另外一个模式下,命令被作为redis-cli ...
Redis用作缓存,在有的时候是非常方便地在添加新的数据时自动回收老数据。这种特性在开发者社区广为流传,因为这正是流行的memcached系统的默认特性。
LRU事实上只是Redis支持的存储回收策略的一种方法。maxmemory指令可以使用之来限制内存大小,本文涵盖了更多的Redis中maxmemory指令的常规讨论,也深入地讨论了Redis采用的LRU这种算法,实际上Redis中的LRU只是LRU算法的近似算法。至于为什么,下文将会讨论。
maxmemory指令的配置
maxmomory指令的配置其实已经在《Redis数据 ...
在key上设置一个过期时间(timeout),一旦时间到了,这个key将会被自动删除。这种特性术语通常叫做Redis的不稳定性。
一旦设置了过期时间,这个key只能被命令清除、删除或者重写其内容。这些命令包含del、set、getset以及所有的*store命令。这些命令只能改变key对应的value的存储值而不改变过期时间的设置。举个例子,使用incr改变key对应的value、使用lpush添加一个新的元素到lists中、使用hset设置field对应value的值等等这些操作都不影响已经对key设置的过期时间的属性。
设置了过期时间的k ...
Redis并不是一个纯粹的key-value存储,而是一台支持多种values类型的数据结构服务器。也就是说,传统的key-value存储只能将string类型的key和string类型的value关联起来,而Redis的value不局限在string类型,而是支持更多复杂的数 ...
Redis可以不自己准备配置文件而是使用默认的内置配置文件,但这只是为了开发和测试使用,在生产环境中要根据实际情况更改配置。在macbook 上,使用HomeBrew安装的Redis其默认的配置文件是/usr/local/etc/redis.conf。
正确配置Redis的方式是准备一个通常命名为redis.conf的配置文件。
redis.conf包含许多格式很简洁的指令,如下:
keyword argument1 argument2 argument3...argumentn
一个简单的配置项如下:
...
总共面了两轮,没见着HR,应该是没戏了。
第一轮,自我介绍。项目简单了解了下、jvm GC相关的,然后现场手写代码,问题为:
二分查找的算法。第一次使用了递归,有点问题,面试官看了说不要用递归,不常用,于是改成了循环;写的时候还是有问题,忘记了使用循环的条件,最后面试官提醒了下最终完成了,最终的代码大概是如下:
public static int biSearch(int[]array,inta){
int lo=0;
int hi=array.length-1;
int mid;
while(lo<=hi){
mid=(lo+hi)/2;
if(array[mid] ...
在spring已经成为Java web开发者必学技能的今天,适应spring编程风格将有助于快速理解和学习spring相关项目,避开aop和ioc不谈,比如工厂方法模式的身影随处可见,今天讨论的是spring 访问mongo的API模板,这种模板化的处理方式,也是spring常见的,以下是几个例子:
1.spring-ldap-core中的ldapTemplate
2.spring-jdbc中的jdbcTemplate
3.mybatis-spring中的sqlSessionTemplate
4.spring-data-mongodb中的MongoTemplate
,等等吧,最近在 ...
众所周知,创建索引可以极大地提高查询效率,MongoDB作为一款nosql数据库,同样也支持通过索引进行查询的性能提升。倘若没有索引,MongoDB必须执行在整个集合中的扫描,从而找出匹配查询语句的文档。倘若对于某个查询有合适的索引存在,MongoDB可以使用索引限制必须检索文档的数量。
索引是一种极其特殊的数据结构,它以一种方便检索的形式存储了集合中数据集的一小部分。索引存储了指定字段或者指定字段集合的值,并通过字段的值进行排序。索引实体的排序支持高质量相等匹配和范围相关的查询操作。除此之外,MongoDB可以通过使用索引中的顺序返回排序结果。MongoDB提供了集合级别的索引创建和使用 ...
MongoDB安装完成后,有两种启动方式:
>mongod
这是默认启动方式,没有开启auth权限验证,或者
>mongod --auth
这是使用auth权限验证。在这种模式下,每次操作一个一个库前,必须做auth验证,而且每次默认首先进 ...
本文将介绍MongoDB的使用,主要有:
MongoDB的简介以及导入样例数据;
Java Driver的概览;
基本的CRUD操作和数据聚合( Aggregation);
创建索引以提高查询性能。
1.MongoDB的简介以及导入样例数据
MongoDB是一个提供高性能的文档数据库(document database),它通过消除对对象关系模型(ORM)的刚性需求从而促进开发。
Documents:document是指MongoDB中的记录,由field和value对组成。MongoDB中的document与JSON对象相类似。fields对应的values可 ...
1.通过Homebrew安装MongoDB
HomeBrew安装二进制二进制包基于已经发布的”formulae“,本文将描述brew工具的更新和使用该工具安装mongodb,而对于HomeBrew工具的安装不在此处介绍。本文所有的命令都是在系统终端工具进行,下同。
<a>更新HomeBrew到最新的版本
brew update
<b>安装MongoDB
直接安装MongoDB:
brew install mongodb
安装TLS/SSL支持的MongoDB:
brew install mongodb --with-openssl
安装MongoDB最新的开发版本:
br ...
1.在安装完MySQL后,首先应该修改字符编码统一,保证中文不会乱码:
查看字符集:
mysql> show variables like 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------- ...