bootstrap面试题(闭包面试题)
大家好,今天来为大家分享bootstrap面试题的一些知识点,和闭包面试题的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
Kafka相关面试题
title: Kafka常见问题
date: 2020-04-01 16:25:49
update: 2020-04-01 20:31:30
excerpt: Kafka面试中常见问题
toc_min_depth: 3
tags:
Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
位置
内容
kafka中的消费者在读取服务端的数据时,需要将服务端的磁盘文件通过网络发送到消费者进程,网络发送需要经过几种网络节点。如下图所示:
传统的读取文件数据并发送到网络的步骤如下:
(1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存;
(2)应用程序将数据从内核空间读入用户空间缓冲区;
(3)应用程序将读到数据写回内核空间并放入socket缓冲区;
(4)操作系统将数据从socket缓冲区复制到网卡接口,此时数据才能通过网络发送。
通常情况下,Kafka的消息会有多个订阅者,生产者发布的消息会被不同的消费者多次消费,为了优化这个流程,Kafka使用了“零拷贝技术”,如下图所示:
“零拷贝技术”只用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),避免了重复复制操作。
如果有10个消费者,传统方式下,数据复制次数为4*10=40次,而使用“零拷贝技术”只需要1+10=11次,一次为从磁盘复制到页面缓存,10次表示10个消费者各自读取一次页面缓存。
传统的文件拷贝通常需要从用户态去转到核心态,经过read buffer,然后再返回到用户态的应用层buffer,然后再从用户态把数据拷贝到核心态的socket buffer,然后发送到网卡。
传统的数据传输需要多次的用户态和核心态之间的切换,而且还要把数据复制多次,最终才打到网卡。
如果减少了用户态与核心态之间的切换,是不是就会更快了呢?
此时我们会发现用户态“空空如也”。数据没有来到用户态,而是直接在核心态就进行了传输,但这样依然还是有多次复制。首先数据被读取到read buffer中,然后发到socket buffer,最后才发到网卡。虽然减少了用户态和核心态的切换,但依然存在多次数据复制。
如果可以进一步减少数据复制的次数,甚至没有数据复制是不是就会做到最快呢?
DMA
别急,这里我们先介绍一个新的武器:DMA。
DMA,全称叫Direct Memory Access,一种可让某些硬件子系统去直接访问系统主内存,而不用依赖CPU的计算机系统的功能。听着是不是很厉害,跳过CPU,直接访问主内存。传统的内存访问都需要通过CPU的调度来完成。如下图:
而DMA,则可以绕过CPU,硬件自己去直接访问系统主内存。如下图:
很多硬件都支持DMA,这其中就包括网卡。
零拷贝
回到本文中的文件传输,有了DMA后,就可以实现绝对的零拷贝了,因为网卡是直接去访问系统主内存的。如下图:
Java的零拷贝实现
在Java中的零拷贝实现是在FileChannel中,其中有个方法transferTo(position,fsize,src)。
传统的文件传输是通过java.io.DataOutputStream,java.io.FileInputStream来实现的,然后通过while循环来读取input,然后写入到output中。
零拷贝则是通过java.nio.channels.FileChannel中的transferTo方法来实现的。transferTo方法底层是基于操作系统的sendfile这个system call来实现的(不再需要拷贝到用户态了),sendfile负责把数据从某个fd(file descriptor)传输到另一个fd。
sendfile:
Java的transferTo:
传统方式与零拷贝性能对比
可以看出速度快出至少三倍多。Kafka在文件传输的过程中正是使用了零拷贝技术对文件进行拷贝。建议以后多用FileChannel的transferTo吧。
需要用到的类:
KafkaProducer:需要创建一个生产者对象,用来发送数据
ProducerConfig:获取所需的一系列配置参数
ProducerRecord:每条数据都要封装成一个ProducerRecord对象
几个比较重要的配置项
//kafka集群,broker-list
props.put("bootstrap.servers","hadoop102:9092");
2022最全WebGIS面试题分享
2022年WebGIS面试题汇总如下:
一、基础问题请做个自我介绍
需结合GIS开发经验,突出技术栈(如OpenLayers、Leaflet)、项目经历及解决实际问题的能力。
路由生命周期(导航守卫)
全局守卫:
beforeEach(to, from, next):路由跳转前触发。
beforeResolve(to, from, next):解析守卫,在所有组件内守卫和异步路由组件解析后触发。
afterEach(to, from):跳转完成后触发。
路由守卫:
beforeEnter(to, from, next):针对单个路由配置的守卫。
组件守卫:
beforeRouteEnter(to, from, next):进入组件前触发。
beforeRouteUpdate(to, from, next):路由更新时触发。
beforeRouteLeave(to, from, next):离开组件时触发。
二、技术栈与项目经验项目中使用哪些技术栈?
示例回答:
前端:jQuery+ Bootstrap或 Vue+ Vue-router+ Element-UI。
后端:Node.js+ Express连接MySQL数据库。
地图服务:OpenLayers加载天地图WMTS服务。
天地图的服务格式及加载方式
天地图采用OGC WMTS标准,通过OpenLayers的ol.source.WMTS或ol.source.XYZ加载。
ol.source.XYZ:需配置URL模板、坐标系(如EPSG:3857)。
ol.source.WMTS:需配置原点、分辨率数组、级别、坐标系等参数。
WMS与WMTS的区别
WMTS:返回固定大小的瓦片,支持缓存,响应快。
WMS:返回完整图片,无缓存,适合动态渲染。
其他OGC标准服务
WFS(要素服务)、WPS(地理处理服务)、WCS(栅格服务)。
天地图的坐标系
CGCS2000(中国2000国家大地坐标系)。
Web墨卡托投影与地理坐标系的区别
地理坐标系:三维(经纬度+大地高),如WGS84。
Web墨卡托投影:二维(XY坐标),形状为正方形,常用于Web地图。
常用坐标系分类
大地坐标系:三维(经纬度),如WGS84、CGCS2000。
投影坐标系:二维(XY),如Web墨卡托(EPSG:3857)。
三、JavaScript与前端开发为什么JS是单线程?
JS需操作DOM,多线程会导致冲突(如一个线程删除元素,另一个线程添加子元素)。
Web Worker提供多线程能力,但无法操作DOM。
JS单线程问题及解决方案
问题:同步任务阻塞页面,耗时任务(如网络请求)导致卡顿。
解决方案:
异步任务:通过消息队列和事件循环(Event Loop)处理。
执行顺序:同步任务→微任务(如Promise.then)→宏任务(如setTimeout)。
宏任务与微任务
宏任务:setTimeout、setInterval、I/O、UI渲染。
微任务:Promise.then、process.nextTick。
执行顺序:主线程→微任务队列→宏任务队列。
四、地图服务与优化如何发布自定义地图服务?
使用GeoServer(开源)或ArcGIS/SuperMap/MapGIS(商用)发布WMS/WMTS服务。
点图层加载优化
方法:
使用矢量切片(Vector Tiles)减少数据量。
启用聚类渲染(如OpenLayers的ol.source.Cluster)。
分级加载(根据缩放级别动态显示点)。
查询河周边污染工厂的实现思路
步骤:
使用空间查询(如PostGIS的ST_DWithin)筛选河流缓冲区内的工厂。
结合属性查询(如污染等级字段)过滤结果。
在前端通过OpenLayers高亮显示符合条件的工厂。
影像与矢量叠加实现
前端:使用ol.layer.Group组合影像图层(如XYZ源)和矢量图层(如GeoJSON源)。
后端:通过WMS服务叠加返回单一图片。
五、扩展问题是否了解Cesium?
Cesium是开源的3D地理可视化库,支持倾斜摄影、地形数据加载,常用于三维WebGIS开发。
是否熟悉Vue3和TypeScript?
Vue3的Composition API和TypeScript的静态类型检查可提升代码可维护性,建议结合OpenLayers使用。
数据库与SQL经验
常用数据库:PostgreSQL(PostGIS扩展)、MySQL、MongoDB。
示例SQL:
--查询河流缓冲区内的工厂SELECT* FROM factories WHERE ST_DWithin(geom,(SELECT geom FROM rivers WHERE name='某河'), 1000);浏览器适配经验
使用CSS媒体查询或Flex/Grid布局适配不同屏幕尺寸。
测试主流浏览器(Chrome、Firefox、Edge)的兼容性。
六、开放性问题项目中的亮点与挑战
亮点:如高性能瓦片加载、自定义空间分析工具开发。
挑战:如大数据量渲染卡顿,通过Web Worker或服务端渲染解决。
未来规划
短期:深入学习三维GIS(Cesium)或大数据可视化(Mapbox GL)。
长期:向全栈GIS开发或空间数据分析方向发展。
以上问题覆盖了WebGIS开发的核心知识点,建议结合实际项目经验准备具体案例,以提升面试通过率。
bootstrap面试题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于闭包面试题、bootstrap面试题的信息别忘了在本站进行查找哦。