2019java开发面试问答合集(附答案)

10G整数文件中寻找中位数或者第K大数

采用基于字节的桶排序将数字分到不同的桶中,比如找到第k大数,则先找出每个桶中的第k大数,在比较。

整形是4byte,有32位,先按高八位建255个桶

如果内存只有2g,则每次读取2g的数据遍历放到255个桶中,并统计255个桶的量,2g读取完后将每个桶的数据导出到磁盘,循环读完10g数据。

这时根据255个桶的计数计算出中位数在哪个桶,然后开始建后续8位的桶,直到最后低8位也分完,这时候对桶内数据进行快排即可。

如何实现分布式锁

数据库乐观锁,利用了mysql update行锁的特点,在每次update前先select出数据然后根据数据的版本进行update,如果版本变了就不更新并把错误抛给用户重试最终达到一致。

redis setnx,当该key不存在时就设置value,如果已经存在该key了就直接返回。

zookeeper 不能重复创建同一个节点,创建持久结点时需要主动删除结点释放,创建临时结点时断开连接就会释放

什么是分布式系统,分布式原理是什么

将一个大的系统拆分成多个细小的子系统,子系统之间通过网络通信的构成的大系统称为分布式系统。

分布式事务怎么做

事务有四个特性acid

a:原子性,事务中的操作不可分割,要么一起成功,要么一起失败

c: 一致性,数据库中的数据要是完整的,也包含各资源状态的一致

i:隔离性,事务之间要有自己的工作空间,不能相互干扰

d:持久性,事务完成后数据要落盘

数据库的事务是使用undo和redo日志做的,undo会记录未提交操作的数据用来回滚,redo记录已提交操作的数据落盘。

常用的分布式事务有几种方式:

2pc,两阶段提交,服务a发prepare请求给协调器,协调器将请求写到本地日志,然后发送prepare给其他各服务,执行者收到请求后执行本地事务,但不会commit,然后将结果返回给协调器,协调器判断所有的返回如果都成功则让所有执行者提交commit,如果有失败的则全部回滚。

消息表,服务a在发起事务的时候执行本地事务的消息同时写入消息表然后发送消息给服务b,服务b在完成本地事务后回消息给服务a调度器清除消息表,如果没有清除,则事务调度器读取消息表发送消息给服务b,这就需要服务b有幂等性

消息事务,消息事务是通过消息中间件实现的类似2pc功能比如rocketmq,服务a提交prepare给mq,然后执行本地事务,如果失败则回滚,如果成功则确认prepare消息,mq相当于事务调度器会定期扫描prepare消息询问发送方是否要发送消息,而消费方如果失败则需要一直重试

TCC事务补偿,先锁住资源,然后使用锁住的资源执行业务逻辑,如果失败则释放资源,如果成功则落盘。

分布式cap,base理论

分布式系统的cap理论,c一致性,a可用性,p分区容错性,因为网络和机器原因不可控所以p是一定要保障的,大家都知道cap不能同时满足,所以只能在c和a中选择,因此有base理论,ba基本可用,s软状态(在最终一致前允许存在不一样的状态),e最终一致

zookeeper

使用场景

配置管理,由于强一致性,可以存放集群配置

集群管理,有新机器加入时在指定目录创建临时znode,然后集群所有机器对目录创建watch,当有机器断连时临时znode会自动删除,集群机器收到通知

分布式锁,集群机器同时创建znode,创建成功的抢到锁,zonde删除释放锁

队列,采用编号znode,按照编号顺序依次执行

集群

集群中有三种角色,leader,follower和observer,leader负责写操作,保证集群事务的顺序性,follower参与选举,observer负责读操作。只有当集群初始化和领导者失去多数派支持时会发生领导者选举。

原理

zookeeper的核心是原子广播,采用zab协议,主要有恢复模式(选主)和广播模式(同步)

如何批量替换文本中的字符串

sed -i "s/x/y/g" *

一个文件中可以使用vim

tr命令替换

aws gsub函数

常用的查看cpu,内存,网络,磁盘的命令有哪些

top

查看cpu命令:mpstat

查看内存:free

查看网络:netstat lsof查看端口,统计句柄

查看磁盘:df du fdisk

nginx

proxy_pass和rewrite的区别

proxy_pass请求在后台跳转,不影响浏览器url

rewrite会发起3xx请求,影响浏览器url

nginx和tomcat的区别

nginx是http server,常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等)

tomcat是一个application server,更准确的说是一个servlet/jsp应用的容器,处理http请求并生成动态页面。

正向代理和反向代理

正向代理代理的是客户端,服务端不知道真正的客户端是谁,场景如vpn

反向代理代理的是服务端,客户端不知道真正的服务端是谁,场景如负载均衡

DNS

域名正向解析和反向解析

正向解析是指根据域名找到ip地址

反向解析是根据ip地址找到域名,通常用来屏蔽某个ip上的域名或者邮件

一个域名解析的过程

客户向本地dns服务器发起请求,本地dns服务器一层一层向上递归查询是否有域名解析,直到根服务器

根服务器返回顶级域的dns服务器地址给本地服务器,本地服务器迭代查询:根-顶级域-二级域-三级域,直到某个域服务器返回地址给本地服务器,本地服务器缓存该解析,然后返回给客户端

网络

tcp/ip协议,三次握手,四次挥手

三次握手

客户端发起请求,发送syn报文,seq=x

服务端收到syn请求后,返回ack,此时ack=x+1,然后也返回一个syn,seq=y

客户端收到syn后,返回ack,此时ack=y+1,连接建立

四次挥手

客户端发起请求,发送fin报文,seq=x

服务端收到fin报文后,返回ack,此时ack=x+1,此步骤确认客户端已不会发送数据,但是服务端数据可能没有返回

服务端确认数据全部返回后,发送fin报文,seq=y,告诉客户端已处理完,可以关闭

客户端返回ack=y+1,关闭连接

snat 和 dnat

内网机器要访问外网,需要snat,防火墙修改来源ip为公网出口ip发送请求包给外网,外网机器接收到的请求包的来源是公网出口ip而不是真正的内网ip

外网访问内网机器,需要dnat,外网发送请求包目标地址是公网出口ip,防火墙根据路由修改请求包的目标为内网ip发送给内网机器,内网机器返回时防火墙修改源地址为公网出口ip返回给外网机器

docker

什么是docker容器,什么是docker镜像

Docker镜像用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。

Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。

docker run和docker start有什么区别

docker run = 创建容器docker create + 启动容器docker start

docker file COPY 和 ADD的区别

COPY指令能够将构建命令所在的主机本地的文件或目录,复制到镜像文件系统。

ADD指令不仅能够将构建命令所在的主机本地的文件或目录,而且能够将远程URL所对应的文件或目录,作为资源复制到镜像文件系统,还可以解压压缩文件并把它们添加到镜像中。

如何缩小docker镜像的体积

尽量在同一层运行更多的命令

由于copy,add,run都会生成新的层,尽量使用run命令执行copy和add,如wget

移除编译打包依赖

使用小体积的 Alpine 基础镜像

docker的网络模式

host模式

和宿主机共用网络namesapce,端口直接使用宿主机的端口

other container模式

和host模式很像,只是共用的是另一个容器的网络namespace

需要java学习路线图的私信笔者“java”领取哦!另外喜欢这篇文章的可以给笔者点个赞,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,308评论 1 10
  • 1. 基础知识 1.1 3种常见的计算机体系结构划分 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话...
    Mr希灵阅读 19,862评论 6 120
  • 烦恼 多红尘 喧扰了 俗世 意乱 多是情迷 心绪 谁又说的清 怀念 总难相见 不如 忘了她 一人一马 悠哉江湖 闲...
    醉眼朦胧的鱼阅读 161评论 0 0
  • 计算机中的排序无处不在,支付宝账单是按照日期默认排序的,微信好友名单是按照姓名首字母排序的。对于能够在主存中完成全...
    善倾阅读 286评论 0 0
  • 1、绘制几何图像/位图 void drawBitmap(Bitmap bitmap, float left, fl...
    migill阅读 191评论 0 1