本文目录导航:
- php面试题 memcache和redis的区别
- 高性能网关基石——OpenResty
- 「2022最新版」Java基础面试题总结(60道题含答案解析)
- Java汇合/泛型面试题
- HashMap和HashTable的区别
- Collection包结构与Collections的区别
- 泛型罕用特点
- List、Set、Map的区别
- Array与ArrayList的区别
- Map的特点
- 汇合类寄存位置与接口
- 什么是List接口
- Java中的IO与NIO面试题
- 多路复用IO模型、信号驱动IO模型与异步IO模型
- Java反射面试题
- Java序列化面试题
- Java注解面试题
- 最后
php面试题 memcache和redis的区别
Redis与Memcached的区别传统MySQL+ Memcached架构遇到的疑问实践MySQL是适宜启动海量数据存储的,经过Memcached将热点数据加载到cache,减速访问,很多公司都曾经经常使用过这样的架构,但随着业务数据量的不时参与,和访问量的继续增长,咱们遇到了很多疑问要求不时启动拆库拆表,Memcached也需不时跟着扩容,扩容和保养上班占据少量开发期间。
与MySQL数据库数据分歧性疑问。
数据命中率低或down机,少量访问间接穿透到DB,MySQL无法撑持。
4.跨机房cache同步疑问。
泛滥NoSQL百花齐放,如何选用最近几年,业界不时涌现出很多各种各样的NoSQL产品,那么如何才干正确地经常使用好这些产品,最大化地施展其短处,是咱们要求深化钻研和思索的疑问,实践归根结底最关键的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实践运行中做到舍短取长,总体上这些NoSQL关键用于处置以下几种疑问1.大批数据存储,高速读写访问。
此类产品经过数据所有in-momery 的方式来保障高速访问,同时提供数据落地的性能,实践这正是Redis最关键的实用场景。
2.海量数据存储,散布式系统支持,数据分歧性保障,繁难的集群节点参与/删除。
3.这方面最具代表性的是dynamo和bigtable 2篇论文所论述的思绪。
前者是一个齐全无核心的设计,节点之间经过gossip方式传递集群信息,数据保障最终分歧性,后者是一个核心化的打算设计,经过相似一个散布式锁服务来保障强分歧性,数据写入先写内存和redo log,而后活期compat归并到磁盘上,将随机写提升为顺序写,提高写入性能。
free,auto-sharding等。
比如目前经常出现的一些文档数据库都是支持schema-free的,间接存储json格局数据,并且支持auto-sharding等性能,比如mongodb。
面对这些不同类型的NoSQL产品,咱们要求依据咱们的业务场景选用最适宜的产品。
Redis实用场景,如何正确的经常使用前面曾经剖析过,Redis最适宜一切数据in-momory的场景,只管Redis也提供耐久化性能,但实践更多的是一个disk-backed的性能,跟传统意义上的耐久化有比拟大的差异,那么或许大家就会有不懂,仿佛Redis更像一个增强版的Memcached,那么何时经常使用Memcached,何时经常使用Redis呢?假设繁难地比拟Redis与Memcached的区别,大少数都会失掉以下观念:1Redis不只仅支持繁难的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2Redis支持数据的备份,即master-slave形式的数据备份。
3Redis支持数据的耐久化,可以将内存中的数据坚持在磁盘中,重启的时刻可以再次加载启动经常使用。
抛开这些,可以深化到Redis外部结构去观察愈加实质的区别,了解Redis的设计。
在Redis中,并不是一切的数据都不时存储在内存中的。
这是和Memcached相比一个最大的区别。
Redis只会缓存一切的 key的信息,假设Redis发现内存的经常使用量超越了某一个阀值,将触发swap的操作,Redis依据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value要求swap到磁盘。
而后再将这些key对应的value耐久化到磁盘中,同时在内存中肃清。
这种特性使得Redis可以 坚持超越其机器自身内存大小的数据。
当然,机器自身的内存必定要能够坚持一切的key,毕竟这些数据是不会启动swap操作的。
同时由于Redis将内存 中的数据swap到磁盘中的时刻,提供服务的主线程和启动swap操作的子线程会共享这局部内存,所以假设降级要求swap的数据,Redis将阻塞这个 操作,直到子线程成功swap操作后才可以启动修正。
经常使用Redis特有内存模型前后的状况对比:VM off: 300k keys, 4096 bytes values: 1.3G usedVM on:300k keys, 4096 bytes values: 73M usedVM off: 1 million keys, 256 bytes values: 430.12M usedVM on:1 million keys, 256 bytes values: 160.09M usedVM on:1 million keys, values as large as you want, still: 160.09M used当 从Redis中读取数据的时刻,假设读取的key对应的value不在内存中,那么Redis就要求从swap文件中加载相应数据,而后再前往给恳求方。
这里就存在一个I/O线程池的疑问。
在自动的状况下,Redis会出现阻塞,即成功一切的swap文件加载后才会相应。
这种战略在客户端的数量较小,启动 批量操作的时刻比拟适宜。
然而假设将Redis运行在一个大型的网站运行程序中,这显然是无法满足大并发的状况的。
所以Redis运转咱们设置I/O线程 池的大小,对要求从swap文件中加载相应数据的读取恳求启动并发操作,缩小阻塞的期间。
假设宿愿在海量数据的环境中经常使用好Redis,我置信了解Redis的内存设计和阻塞的状况是无法缺少的。
补充的常识点:memcached和redis的比拟1 网络IO模型Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络衔接,接受恳求后,将衔接形容字pipe 传递给worker线程,启动读写IO, 网络层经常使用libevent封装的事情库,多线程模型可以施展多核作用,然而引入了cache coherency和锁的疑问,比如,Memcached最罕用的stats 命令,实践Memcached一切操作都要对这个全局变量加锁,启动计数等上班,带来了性能损耗。
(Memcached网络IO模型)Redis经常使用复线程的IO复用模型,自己封装了一个繁难的AeEvent事情处置框架,关键成功了epoll、kqueue和select,关于单纯只要IO操作来说,复线程可以将速度优点施展到最大,然而Redis也提供了一些繁难的计算性能,比如排序、聚合等,关于这些操作,复线程模型实践会重大影响全体吞吐量,CPU计算环节中,整个IO调度都是被阻塞住的。
2.内存治理方面Memcached经常使用预调配的内存池的方式,经常使用slab和大小不同的chunk来治理内存,Item依据大小选用适宜的chunk存储,内存池的方式可以省去放开/监禁内存的开支,并且能减小内存碎片发生,但这种方式也会带来必定水平上的空间糜费,并且在内存依然有很大空间时,新的数据也或许会被剔除,要素可以参考Timyang的文章:经常使用现场放开内存的方式来存储数据,并且很少经常使用free-list等方式来提升内存调配,会在必定水平上存在内存碎片,Redis跟据存储命令参数,会把带过时期间的数据独自寄存在一同,并把它们称为暂时数据,非暂时数据是永远不会被剔除的,即使物理内存不够,造成swap也不会剔除任何非暂时数据(但会尝试剔除局部暂时数据),这点上Redis更适宜作为存储而不是cache。
3.数据分歧性疑问Memcached提供了cas命令,可以保障多个并发访问操作同一份数据的分歧性疑问。
Redis没有提供cas 命令,并不能保障这点,不过Redis提供了事务的性能,可以保障一串 命令的原子性,两边不会被任何操作打断。
4.存储方式及其它方面Memcached基本只支持繁难的key-value存储,不支持枚举,不支持耐久化和复制等性能Redis除key/value之外,还支持list,set,sorted set,hash等泛滥数据结构,提供了KEYS启动枚举操作,但不能在线上经常使用,假设要求枚举线上数据,Redis提供了工具可以间接扫描其dump文件,枚举出一切数据,Redis还同时提供了耐久化和复制等性能。
5.关于不同言语的客户端支持在不同言语的客户端方面,Memcached和Redis都有丰盛的第三方客户端可供选用,不过由于Memcached开展的期间更久一些,目前看在客户端支持方面,Memcached的很多客户端愈加成熟稳固,而Redis由于其协定自身就比Memcached复杂,加上作者不时参与新的性能等,对应第三方客户端跟进速度或许会赶不上,有时或许要求自己在第三方客户端基础上做些修正才干更好的经常使用。
依据以上比拟不美观出,当咱们不宿愿数据被踢出,或许要求除key/value之外的更少数据类型时,或许要求落地性能时,经常使用Redis比经常使用Memcached更适宜。
关于Redis的一些周边性能Redis除了作为存储之外还提供了一些其它方面的性能,比如聚算计算、pubsub、scripting等,关于此类性能要求了解其成功原理,分明地了解到它的局限性后,才干正确的经常使用,比如pubsub性能,这个实践是没有任何耐久化支持的,生产方衔接闪断或重连之间上来的信息是会所有失落的,又比如聚算计算和scripting等性能受Redis复线程模型所限,是无法能到达很高的吞吐量的,要求审慎经常使用。
总的来说Redis作者是一位十分勤劳的开发者,可以经常看到作者在尝试着各种不同的新颖想法和思绪,针对这些方面的性能就要求咱们要求深化了解后再经常使用。
总结经常使用最佳方式是所有数据in-memory。
更多场景是作为Memcached的代替者来经常使用。
3.当要求除key/value之外的更少数据类型支持时,经常使用Redis更适宜。
4.当存储的数据不能被剔除时,经常使用Redis更适宜。
谈谈Memcached与Redis(一)1. Memcached简介Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能散布式内存缓存主机。
其实质上就是一个内存key-value数据库,然而不支持数据的耐久化,主机封锁之后数据所有失落。
Memcached经常使用C言语开发,在大少数像Linux、BSD和Solaris等POSIX系统上,只需装置了libevent即可经常使用。
在Windows下,它也有一个可用的非官网版本(。
Memcached的客户端软件成功十分多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。
以后Memcached经常使用宽泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和WordPress等。
在Window系统下,Memcached的装置十分繁难,只需从以上给出的地址下载可口头软件而后运转 –d install即可成功装置。
在Linux等系统下,咱们首先要求装置libevent,而后从失掉源码,make && make install即可。
自动状况下,Memcached的主机启动程序会装置到/usr/local/bin目录下。
在启动Memcached时,咱们可以为其性能不同的启动参数。
1.1 Memcache性能Memcached主机在启动时要求对关键的参数启动性能,上方咱们就看一看Memcached在启动时要求设定哪些关键参数以及这些参数的作用。
1)-p <num> Memcached的TCP监听端口,缺省性能为;2)-U <num> Memcached的UDP监听端口,缺省性能为,为0时示意封锁UDP监听;3)-s <file> Memcached监听的UNIX套接字门路;4)-a <mask> 访问UNIX套接字的八进制掩码,缺省性能为0700;5)-l <addr> 监听的主机IP地址,默以为一切网卡;6)-d 为Memcached主机启动守护进程;7)-r 最大core文件大小;8)-u <username> 运转Memcached的用户,假设以后为root的话要求经常使用此参数指定用户;9)-m <num> 调配给Memcached经常使用的内存数量,单位是MB;10)-M 批示Memcached在内存用光的时刻前往失误而不是经常使用LRU算法移除数据记载;11)-c <num> 最大并发连数,缺省性能为1024;12)-v –vv –vvv 设定主机端打印的信息的具体水平,其中-v仅打印失误和正告信息,-vv在-v的基础上还会打印客户端的命令和相应,-vvv在-vv的基础上还会打印内存形态转换信息;13)-f <factor> 用于设置chunk大小的递增因子;14)-n <bytes> 最小的chunk大小,缺省性能为48个字节;15)-t <num> Memcached主机经常使用的线程数,缺省性能为4个;16)-L 尝试经常使用大内存页;17)-R 每个事情的最大恳求数,缺省性能为20个;18)-C 禁用CAS,CAS形式会带来8个字节的冗余;2. Redis简介Redis是一个开源的key-value存储系统。
与Memcached相似,Redis将大局部数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、汇合、有序汇合以及基于这些数据类型的相关操作。
Redis经常使用C言语开发,在大少数像Linux、BSD和Solaris等POSIX系统上无需任何外部依赖就可以经常使用。
Redis支持的客户端言语也十分丰盛,罕用的计算机言语如C、C#、C++、Object-C、PHP、Python、Java、Perl、Lua、Erlang等均有可用的客户端来访问Redis主机。
以后Redis的运行曾经十分宽泛,国际像新浪、淘宝,国外像Flickr、Github等均在经常使用Redis的缓存服务。
Redis的装置十分繁难,只需从失掉源码,而后make && make install即可。
自动状况下,Redis的主机启动程序和客户端程序会装置到/usr/local/bin目录下。
在启动Redis主机时,咱们要求为其指定一特性能文件,缺省状况下性能文件在Redis的源码目录下,文件名为。
高性能网关基石——OpenResty
OpenResty,一个基于Nginx的高性能Web平台,专门用于构建处置高并发的灵活Web运行、Web服务和灵活网关。
例如,Kong网关和国产新秀ApiSIX网关均基于OpenResty构建。
经过成功ngx_lua和stream_lua等Nginx模块,OpenResty将Lua/LuaJIT完美整合到Nginx外部,准许用户经常使用Lua言语成功复杂的HTTP/TCP/UDP业务逻辑,同时坚持高度的并发服务才干。
Web服务生命周期可以分为三个阶段,OpenResty关注的是initing和running阶段,并启动更粗疏的划分。
在running阶段,OpenResty接纳到客户端恳求后,口头一条流水线启动处置。
OpenResty提供了指令来在上述阶段内拔出Lua代码,成功业务逻辑。
这些指令理论有三种方式。
更多C++后盾开发技术点常识内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,TCP/IP,协程,DPDK等初级常识点。
C++后盾开发架构师/C++后盾开发架构师学习资源收费失掉地址【文章福利】整顿了一些C++后盾开发架构师相关学习资料、面试题、教学视频和学习路途图,收费分享给有要求的读者。
上方展现了OpenResty指令所在阶段和口头顺序。
编写了一个OpenResty小demo以直观展现处置阶段。
首先在本地电脑上装置OpenResty,口头命令审核能否装置成功。
创立文件夹结构,编写lua脚本文件,以及性能文件。
启动OpenResty,经常使用-p选项传入文件夹地址。
经过阅读器访问主机,检查照应内容,并经过logs/文件观察日志,了解各阶段口头顺序。
原文链接/post/...
「2022最新版」Java基础面试题总结(60道题含答案解析)
前言
在“金三银四、金九银十”求职高峰期,为了协助大家充沛预备面试并找到现实的上班,本文整顿了一份片面的Java面试题手册。
内容涵盖了Java基础、面向对象编程(JavaOOP)、汇合与泛型、意外处置、IO与NIO、反射、序列化、注解、多线程与并发、JVM、数据库技术(Mysql、Redis、Memcached、MongoDB)、框架技术(Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper)、数据结构与算法、搜查与存储技术(Elasticsearch、Kafka)、微服务架构、以及操作系统常识(Linux)。
经过本文,你可以系统地温习Java基础常识,为行将来到的面试做好充沛预备。
Java汇合/泛型面试题
1、ArrayList和linkedList的区别
ArrayList基于数组成功,失掉元素期间复杂度为O(1),但删除元素时要求从新陈列一切元素,开支较大。
linkList是一个双链表结构,在参与和删除元素时具备比ArrayList更好的性能,但在启动get与set操作时效率低于ArrayList。
ArrayList底层成功是数组,并且数组在要求时可以智能扩容。
linkList在操作时效率较高,尤其是在频繁的参与和删除操作下。
HashMap和HashTable的区别
答:
Collection包结构与Collections的区别
Collection包结构蕴含了汇合类如Set、List和Map。
Collections则是提供一系列静态方法,用于操作和审核汇合类,如排序、反转、搜查等。
泛型罕用特点
泛型准许在申明类、方法或变量时指定数据类型,提高了代码的复用性和类型安保。
经常使用泛型可以防止类型转换失误,增强代码可读性。
List、Set、Map的区别
List是一个有序的汇合,准许蕴含重复元素,经过索引访问。
Set是一个无序的汇合,不准许蕴含重复元素。
Map是一种映射相关,将键映射到值,确保键的惟一性。
Array与ArrayList的区别
Array是一个固定大小的数组,初始化时要求指定大小,操作灵敏度受限;ArrayList是一个灵活数组成功的列表,智能治理内存调配,操作愈加灵敏。
Map的特点
Map是一个键值对汇合,确保键的惟一性,可以存储任何类型的键和值,提供极速的查找、拔出和删除操作。
汇合类寄存位置与接口
Java汇合类关键寄存在util包中,关键接口包括Set、List和Map。
什么是List接口
List接口关键成功类包括ArrayList、Vector和linkedList,提供了有序存储元素的性能。
Java中的IO与NIO面试题
Java IO流类包括File、FileInputSteam、FileOutputStream、BufferInputStream等。
IO与NIO的区别在于IO是阻塞式模型,NIO是非阻塞式模型,提高了并发性能。
多路复用IO模型、信号驱动IO模型与异步IO模型
多路复用模型准许复线程处置多个衔接;信号驱动模型让系统在事情出现时智能触发处置;异步IO模型准许立刻动员I/O操作,无需期待结果。
Java反射面试题
除了new关键字,Java反射可以经过类的getName()方法失掉类名,从而经过类名创立对象。
反射机制在框架、灵活代理、国际化等场景中宽泛运行,提高了代码的灵敏性和可保养性。
Java序列化面试题
序列化是将Java对象转换为字节流的环节,可用于耐久化存储或网络传输。
静态成员不会被序列化。
Java注解面试题
Java注解是一个弱小的元编程工具,可以用于代码注释、程序剖析、编译时审核等。
规范元注解包括@Target、@Retention、@documented和@Inherited。
最后
本文整顿的Java面试题涵盖了宽泛的基础和初级常识,为求职者提供了系统的学习和温习资源。
宿愿这些资料能协助你高效预备面试,找到满意的上班。