31
2020
07

call和.apply的区别是什么?

call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象。说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 apply方法: 语法:apply(thisObj,[argArray])定义:应用某一对象的一个方法,用另一个对象
31
2020
07

请指出JavaScript宿主对象和原生对象的区别?

原生对象ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。“本地对象”包含哪些内容:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。由此可以看出,简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。内置对
31
2020
07

在什么时候你会使用document.write()?

大多数生成的广告代码依旧使用document.write(),虽然这种用法会让人很不爽。
31
2020
07

请指出浏览器特性检测,特性推断和浏览器UA字符串嗅探的区别?

特性检测:为特定浏览器的特性进行测试,并仅当特性存在时即可应用特性。User-Agent检测:最早的浏览器嗅探即用户代理检测,服务端(以及后来的客户端)根据UA字符串屏蔽某些特定的浏览器查看网站内容。特性推断:尝试使用多个特性但仅验证了其中之一。根据一个特性的存在推断另一个特性是否存在。问题是,推断是假设并非事实,而且可能导致可维护性的问题。
31
2020
07

请解释JSONP的工作原理,以及它为什么不是真正的AJAX。

JSONP (JSON with Padding)是一个简单高效的跨域方式,HTML中的script标签可以加载并执行其他域的javascript,于是我们可以通过script标记来动态加载其他域的资源。例如我要从域A的页面pageA加载域B的数据,那么在域B的页面pageB中我以JavaScript的形式声明pageA需要的数据,然后在 pageA中用script标签把pageB加载进来,那么pageB中的脚本就会得以执行。JSONP在此基础上加入了回调函数,pageB加载完之后会执行page
31
2020
07

请解释变量声明提升。

在JS里定义的变量,存在于作用域链里,而在函数执行时会先把变量的声明进行提升,仅仅是把声明进行了提升,而其值的定义还在原来位置。示例如下:1 var test = function() {2     console.log(name); // 输出:undefined3     var name = "jeri";4     console.log(name); // 输出:jeri5 }6 7 test(
31
2020
07

请指出document.onload和document.ready两个事件的区别。

页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页面包含图片等文件在内的所有元素都加载完成。
31
2020
07

"attribute"和"property"的区别是什么?

1. 定义Property:属性,所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性,添加的这些属性分别对应于每个HTML元素都有下面的这5个标准特性: id,title,lang,dir,className。DOM节点是一个对象,因此,他可以和其他的JavaScript对象一样添加自定义的属性以及方法。property的值可以是任何的数据类型,对大小写敏感,自定义的property不会出现在html代码中,只存在js中。At
31
2020
07

请描述下事件冒泡机制。

冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。捕获型事件:事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。支持W3C标准的浏览器在添加事件时用addEventListener(event,fn,useCapture)方法,基中第3个参数useCapture是一个Boolean值,用来设置事件是在事件捕获时执行,还是事件冒泡时执行。而不兼容W3C的浏览器(IE)用attac
29
2020
07

==和===有什么不同?

首先,== equality 等同,=== identity 恒等。 ==, 两边值类型不同的时候,要先进行类型转换,再比较。 ===,不做类型转换,类型不同的一定不等。先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等: 如果类型不同,就[不相等] 如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 如果两个都是字符串,每个位置的字符都一样
29
2020
07

你如何从浏览器的URL中获取查询字符串参数。

以下函数把获取一个key的参数。 1 function parseQueryString ( name ){ 2     name = name.replace(/[\[]/,"\\\["); 3     var regexS = "[\\?&]"+name+"=([^&#]*)"; 4     var regex = n
29
2020
07

请解释一下JavaScript的同源策略。

在客户端编程语言中,如javascript和 ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议, 相同的端口,相同的host,那么我们就可以认为它们是相同的域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的,如果脚本能
29
2020
07

什么是三元表达式?“三元”表示什么意思?

三元表达式:? :。三元--三个操作对象。在表达式boolean-exp ? value0 : value1 中,如果“布尔表达式”的结果为true,就计算“value0”,而且这个计算结果也就是操作符最终产生的值。如果“布尔表达式”的结果为false,就计算“value1”,同样,它的结果也就成为了操作符最终产生的值。
29
2020
07

JavaScript里函数参数arguments是数组吗?

在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,通过使用下标就可以访问相应的参数。arguments虽然有一些数组的性质,但其并非真正的数组,只是一个类数组对象。其并没有数组的很多方法,不能像真正的数组那样调用.jion(),.concat(),.pop()等方法。
29
2020
07

什么是"use strict";?使用它的好处和坏处分别是什么?

在代码中出现表达式-"use strict"; 意味着代码按照严格模式解析,这种模式使得Javascript在更严格的条件下运行。好处:消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新版本的Javascript做好铺垫。坏处:同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在&quo
29
2020
07

解释"chaining"。

jQuery方法链接。直到现在,我们都是一次写一条jQuery语句(一条接着另一条)。不过,有一种名为链接(chaining)的技术,允许我们在相同的元素上运行多条jQuery命令,一条接着另一条。提示:这样的话,浏览器就不必多次查找相同的元素。如需链接一个动作,您只需简单地把该动作追加到之前的动作上。
29
2020
07

解释"deferreds"。

开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了deferred对象。简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是&
29
2020
07

你知道哪些针对jQuery的优化方法?

1.总是从ID选择器开始继承在jQuery中最快的选择器是ID选择器,因为它直接来自于JavaScript的getElementById()方法。例如有一段HTML代码: 1 <div id="content"> 2     <form method="post"action="#"> 3         <h2>
29
2020
07

请解释.end()的用途。

在官方的API上是这样描述end()方法的:“回到最近的一个"破坏性"操作之前。即,将匹配的元素列表变为前一次的状态。”;看样子好像是找到最后一次操作的元素的上一元素,在如下的例子中:html代码:复制代码代码如下:1 <div>测试内容1</div><div>测试内容2</div>jQuery代码:复制代码代码如下:1 $('<p>新增内容</p>').appendTo('div
29
2020
07

你如何给一个事件处理函数命名空间,为什么要这样做?

任何作为type参数的字符串都是合法的;如果一个字符串不是原生的JavaScript事件名,那么这个事件处理函数会绑定到一个自定义事件上。这些自定义事件绝对不会由浏览器触发,但可以通过使用.trigger()或者.triggerHandler()在其他代码中手动触发。如果type参数的字符串中包含一个点(.)字符,那么这个事件就看做是有命名空间的了。这个点字符就用来分隔事件和他的命名空间。举例来说,如果执行.bind('click.name',handler),那么字符串中的cl
29
2020
07

请说出你可以传递给jQuery方法的四种不同值。

选择器(字符串),HTML(字符串),回调函数,HTML元素,对象,数组,元素数组,jQuery对象等。
29
2020
07

什么是效果队列?

jQuery中有个动画队列的机制。当我们对一个对象添加多次动画效果时后添加的动作就会被放入这个动画队列中,等前面的动画完成后再开始执行。可是用户的操作往往都比动画快,如果用户对一个对象频繁操作时不处理动画队列就会造成队列堆积,影响到效果。jQuery中有stop这个方法可以停止当前执行的动画,并且它有两个布尔参数,默认值都为false。第一个参数为true时会清空动画队列,第二个参数为true时会瞬间完成掉当前动画。所以,我们经常使用obj.stop(true,true)来停止动画。但是这还不够
29
2020
07

请指出.get(),[],eq()的区别。

eq:返回是一个jquery对象作用是将匹配的元素集合缩减为一个元素。这个元素在匹配元素集合中的位置变为0,而集合长度变成1。get:是一个html对象数组作用是取得其中一个匹配的元素。num表示取得第几个匹配的元素。
29
2020
07

请指出.bind(),.live()和.delegate()的区别。

在操纵DOM的语境中,document是根节点。现在我们可以较容易地说明.bind()、.live()和.delegate()的不同之处了。.bind()1 $('a').bind('click', function() {alert("That tickles!")});这是最简单的绑定方法了。JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。.live()1 $('a').l
29
2020
07

请指出$和$.fn的区别,或者说出$.fn的用途。

Jquery为开发插件提供了两个方法,分别是:1 $.extend(obj);2 $.fn.extend(obj);1.那么这两个分别是什么意思?$.extend(obj);是为了扩展jquery本身,为类添加新的方法。$.fn.extend(obj);给JQUERY对象添加方法。2.$.fn中的fn是什么意思,其实是prototype,即$.fn=$.prototype;具体用法请看下面的例子:1 $.extend({2 3     add:function(a,
29
2020
07

"i'm a lasagna hog".split("").reverse().join("");问题:上面的语句的返回值是什么?

答案:"goh angasal a m'i";
29
2020
07

请写出一个函数实现N!的计算。N取很大的值时,该怎么办?

使用循环、递归都能写出函数。当N取值很大时,应该考虑把数值转化为字符串再进行运算。大数乘法再转化为大数加法运算,其具体算法应该有不少C语言实现,可以参考一下。
29
2020
07

(window.foo||(window.foo="bar"));问题:window.foo的值是什么?

答案:"bar"只有window.foo为假时的才是上面答案,否则就是它本身的值。var foo="Hello";(function(){var bar="World";alert(foo+bar);})();alert(foo+bar);
29
2020
07

问题:上面两个alert的结果是什么?

答案:"Hello World"和ReferenceError:bar is not defined
27
2020
07

下面两个函数的返回值是一样的吗?为什么?

function foo1(){  return {      bar: "hello"  };}function foo2(){  return  {      bar: "hello"  };}在编程语言中,基本都是使用分号(;)将语句分隔开,这可以增加代码的可读性和整洁性。而在JS中,如若语句各占独立一行,通常可以省略语句间的分号(;),JS
27
2020
07

在严格模式('use strict')下进行 JavaScript 开发有神马好处?

消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新版本的Javascript做好铺垫。
27
2020
07

将 JavaScript 代码包含在一个函数块中有神马意思呢?为什么要这么做?

换句话说,为什么要用立即执行函数表达式(Immediately-Invoked Function Expression)。IIFE 有两个比较经典的使用场景,一是类似于在循环中定时输出数据项,二是类似于 JQuery/Node 的插件和模块开发。for(var i = 0; i < 5; i++) {    setTimeout(function() {        console.log(i);    &n
27
2020
07

下面的代码会在 console 输出神马?为什么?

var myObject = {    foo: "bar",    func: function() {        var self = this;        console.log("outer func:  this.foo = " + this.foo);        c
27
2020
07

下面的代码会在 console 输出神马?为什么?

(function(){  var a = b = 3;})();console.log("a defined? " + (typeof a !== 'undefined'));   console.log("b defined? " + (typeof b !== 'undefined'));这跟变量作用域有关,输出换成下面的:console.log(b); //3console,log(ty
27
2020
07

使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?

使用 typeof 的弊端是显而易见的(这种弊端同使用 instanceof):let obj = {};let arr = [];console.log(typeof obj === 'object');  //trueconsole.log(typeof arr === 'object');  //trueconsole.log(typeof null === 'object');  //true从上面的输出结果可
27
2020
07

Executors的四种线程池浅析

newFixedThreadPool//Executors.javapublic static ExecutorService newFixedThreadPool(int nThreads) {    return new ThreadPoolExecutor(nThreads, nThreads,                0L, TimeUnit.MILLISECONDS, 
27
2020
07

阻塞队列的简单了解

队列的阻塞插入:当队列满时,队列会阻塞插入元素的线程,直到队列不满队列的阻塞移除:当队列为空时,获取元素的线程会等待队列变为非空BlockingQueue提供的方法如下,其中put和take是阻塞操作操作方法 抛出异常 返回特殊值 阻塞线程 超时退出插入元素 add(e) offer(e) put(e) offer(e, timeout, unit)移除元素 remove() poll() take() pull(timeout, unit)检查 element() peek() 无 无Arra
27
2020
07

线程池原理之执行流程

//ThreadPoolExecutor.javapublic void execute(Runnable command) {    ...    if (workerCountOf(c) < corePoolSize) { //plan A        if (addWorker(command, true))             
27
2020
07

JDK封装的线程池

//ThreadPoolExecutor.javapublic ThreadPoolExecutor(    int corePoolSize,     int maximumPoolSize,    long keepAliveTime,    TimeUnit unit,    BlockingQueue<Runnable> workQueue,   
27
2020
07

线程池及其优点

线程的每次使用创建,结束销毁是非常巨大的开销。若用缓存的策略(线程池),暂存曾经创建的线程,复用这些线程,可以减少程序的消耗,提高线程的利用率降低资源消耗:重复利用线程可降低线程创建和销毁造成的消耗提高响应速度:当任务到达时,不需要等待线程创建就能立即执行提高线程的可管理性:使用线程池可以进行统一的分配,监控和调优
27
2020
07

JAVA线程的几种常用方法

线程启动函数//Thread.java//调用start启动线程,进入Runnable状态,等待系统调度执行public synchronized void start(){//synchronized同步执行    if (threadStatus != 0) //0 代表new状态,非0则抛出错误            throw new IllegalThreadStateException(); 
27
2020
07

JAVA线程的实现原理

java的线程是基于操作系统原生的线程模型(非用户态),通过系统调用,将线程交给系统调度执行java线程拥有属于自己的虚拟机栈,当JVM将栈、程序计数器、工作内存等准备好后,会分配一个系统原生线程来执行。Java线程结束,原生线程随之被回收原生线程初始化完毕,会调Java线程的run方法。当JAVA线程结束时,则释放原生线程和Java线程的所有资源java方法的执行对应虚拟机栈的一个栈帧,用于存储局部变量、操作数栈、动态链接、方法出口等
27
2020
07

构造器(有参、无参)

构造器: 就是和类名相同但无返回类型的方法。用于当前或某一对象的实例化,并将当前或某一对象返回。无参构造:1、如果使用new关键字实际上是调用无参构造器;2、无参构造往往是为了初始化一些值。有参构造:一旦定义了有参构造,必须要显示定义无参构造使用构造器需注意:1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)2.每个类可以有一个以上的构造器3.构造器可以有0个、1个或1个以上的参数4.构造器没有返回值5.构造器总是伴随着new操作一起调用123456789下面是有参无
27
2020
07

什么是集中化的版本控制系统?

那么,集中化的版本控制系统又是什么呢,说白了,就是有一个集中管理的中央服务器,保存着所有文件的修改历史版本,而协同开发者通过客户端连接到这台服务器,从服务器上同步更新或上传自己的修改。
26
2020
07

解释生产者是什么?

答:生产者的主要作用是将数据发布到他们选择的主题上。基本上,它的职责是选择要分配给主题内分区的记录。
26
2020
07

比较RabbitMQ与Apache Kafka

答:Apache Kafka的另一个选择是RabbitMQ。那么,让我们比较两者:功能Apache Kafka– Kafka是分布式的、持久的和高度可用的,这里共享和复制数据RabbitMQ中没有此类功能性能速度Apache Kafka–达到每秒100000条消息。RabbitMQ–每秒20000条消息。
26
2020
07

比较传统队列系统与Apache Kafka

答:让我们比较一下传统队列系统与Apache Kafka的功能:消息保留 传统的队列系统 - 它通常从队列末尾处理完成后删除消息。 Apache Kafka中,消息即使在处理后仍然存在。这意味着Kafka中的消息不会因消费者收到消息而被删除。基于逻辑的处理传统队列系统不允许基于类似消息或事件处理逻辑。Apache Kafka允许基于类似消息或事件处理逻辑。
26
2020
07

为什么要使用Apache Kafka集群?

答:为了克服收集大量数据和分析收集数据的挑战,我们需要一个消息队列系统。因此Apache Kafka应运而生。其好处是:只需存储/发送事件以进行实时处理,就可以跟踪Web活动。通过这一点,我们可以发出警报并报告操作指标。此外,我们可以将数据转换为标准格式。此外,它允许对主题的流数据进行连续处理。由于它的广泛使用,它秒杀了竞品,如ActiveMQ,RabbitMQ等。
26
2020
07

解释术语“Log Anatomy”

答:我们将日志视为分区。基本上,数据源将消息写入日志。其优点之一是,在任何时候,都有一个或多个消费者从他们选择的日志中读取数据。下面的图表显示,数据源正在写入一个日志,而用户正在以不同的偏移量读取该日志。  
26
2020
07

列出所有Apache Kafka业务

答:Apache Kafka的业务包括:添加和删除Kafka主题如何修改Kafka主题如何关机在Kafka集群之间镜像数据找到消费者的位置扩展您的Kafka群集自动迁移数据退出服务器数据中心
26
2020
07

Apache Kafka的缺陷

答:Kafka的局限性是:1.没有完整的监控工具集2.消息调整的问题3.不支持通配符主题选择4.速度问题
26
2020
07

解释如何调整Kafka以获得最佳性能。

答:因此,调优Apache Kafka的方法是调优它的几个组件:1.调整Kafka生产者2.Kafka代理调优3.调整Kafka消费者
26
2020
07

Kafka中的数据日志是什么?

答:我们知道,在Kafka中,消息会保留相当长的时间。此外,消费者还可以根据自己的方便进行阅读。尽管如此,有一种可能的情况是,如果将Kafka配置为将消息保留24小时,并且消费者可能停机超过24小时,则消费者可能会丢失这些消息。但是,我们仍然可以从上次已知的偏移中读取这些消息,但仅限于消费者的部分停机时间仅为60分钟的情况。此外,关于消费者从一个话题中读到什么,Kafka不会保持状态。
26
2020
07

Kafka流的特点。

答:Kafka流的一些最佳功能是Kafka Streams具有高度可扩展性和容错性。Kafka部署到容器,VM,裸机,云。我们可以说,Kafka流对于小型,中型和大型用例同样可行。此外,它完全与Kafka安全集成。编写标准Java应用程序。完全一次处理语义。而且,不需要单独的处理集群。
26
2020
07

Kafka的一些最显著的应用。

答:Netflix,Mozilla,Oracle
26
2020
07

Kafka的流处理是什么意思?

答:连续、实时、并发和以逐记录方式处理数据的类型,我们称之为Kafka流处理。
26
2020
07

系统工具有哪些类型?

答:系统工具有三种类型:1.Kafka迁移工具:它有助于将代理从一个版本迁移到另一个版本。2.Mirror Maker:Mirror Maker工具有助于将一个Kafka集群的镜像提供给另一个。3.消费者检查:对于指定的主题集和消费者组,它显示主题,分区,所有者。
26
2020
07

什么是复制工具及其类型?

答:为了增强持久性和更高的可用性,这里提供了复制工具。其类型为创建主题工具列表主题工具添加分区工具
26
2020
07

Java在Apache Kafka中的重要性是什么?

答:为了满足Kafka标准的高处理速率需求,我们可以使用java语言。此外,对于Kafka的消费者客户,Java也提供了良好的社区支持。所以,我们可以说在Java中实现Kafka是一个正确的选择。
26
2020
07

Kafka提供的保证是什么?

答:他们是生产者向特定主题分区发送的消息的顺序相同。此外,消费者实例按照它们存储在日志中的顺序查看记录。此外,即使不丢失任何提交给日志的记录,我们也可以容忍最多N-1个服务器故障。Apache Kafka对于新手的面试问题:41, 42, 43, 44, 45, 47, 49Apache Kafka对于有经验的人的面试问题:46, 48
26
2020
07

解释一些Kafka流实时用例。

答:《纽约时报》:该公司使用它来实时存储和分发已发布的内容到各种应用程序和系统,使其可供读者使用。基本上,它使用Apache Kafka和Kafka流。Zalando:作为ESB(企业服务总线)作为欧洲领先的在线时尚零售商,Zalando使用Kafka。LINE:基本上,为了相互通信,LINE应用程序使用Apache Kafka作为其服务的中心数据中心。
26
2020
07

解释术语“主题复制因子”。

答:在设计Kafka系统时,考虑主题复制是非常重要的。
26
2020
07

说明Kafka的一个最佳特征。

答:Kafka的最佳特性是“各种各样的用例”。这意味着Kafka能够管理各种各样的用例,这些用例对于数据湖来说非常常见。例如日志聚合、Web活动跟踪等。
26
2020
07

Mybatis都有哪些Executor执行器?它们之间的区别是什么?

Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map<String, Statemen
16
2020
07

介绍下 promise.all

  Promise.all()方法将多个Promise实例包装成一个Promise对象(p),接受一个数组(p1,p2,p3)作为参数,数组中不一定需要都是Promise对象,但是一定具有Iterator接口,如果不是的话,就会调用Promise.resolve将其转化为Promise对象之后再进行处理。      使用Promise.all()生成的Promise对象(p)的状态是由数组中的Promise对象(p1,p2,p3)决定的。如果所有的Prom
16
2020
07

js 执行机制、事件循环

  JavaScript 语言的一大特点就是单线程,同一个时间只能做一件事。单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。JavaScript 语言的设计者意识到这个问题,将所有任务分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous),在所有同步任务执行完之前,任何的异步任务是不会执行的。      当我们打开网站时,网页的渲染过程就是一
16
2020
07

DOM 事件有哪些阶段?谈谈对事件代理的理解

分为三大阶段:捕获阶段--目标阶段--冒泡阶段事件代理简单说就是:事件不直接绑定到某元素上,而是绑定到该元素的父元素上,进行触发事件操作时(例如'click'),再通过条件判断,执行事件触发后的语句(例如'alert(e.target.innerHTML)')好处:(1)使代码更简洁;(2)节省内存开销
16
2020
07

数组去重的方法

1.ES6 的 Setlet arr = [1,1,2,3,4,5,5,6]let arr2 = [...new Set(arr)]2.reduce()let arr = [1,1,2,3,4,5,5,6]let arr2 = arr.reduce(function(ar,cur) {  if(!ar.includes(cur)) {    ar.push(cur)  }  return ar},[])3.filter()// 这种方法会有一个问
16
2020
07

闭包的概念?优缺点?

闭包的概念:闭包就是能读取其他函数内部变量的函数。优点:避免全局变量的污染希望一个变量长期存储在内存中(缓存变量)缺点:内存泄露(消耗)常驻内存,增加内存使用量
16
2020
07

ES5 和 ES6 分别几种方式声明变量

ES5 有俩种:var 和 functionES6 有六种:增加四种,let、const、class 和 import注意:let、const、class声明的全局变量再也不会和全局对象的属性挂钩
16
2020
07

判断 js 类型的方式

1. typeof可以判断出'string','number','boolean','undefined','symbol'但判断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object'2. instanceof原理是 构造函数的 prototype 属性是否出现在对象的原型链中的任何位置function A() {}let a = new A(
14
2020
07

JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
14
2020
07

页面间对象传递的方法

request,session,application,cookie等
14
2020
07

jsp有哪些动作?作用分别是什么?

答:JSP共有以下6种基本动作jsp:include:在页面被请求的时候引入一个文件。jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。jsp:forward:把请求转到一个新的页面。jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
14
2020
07

jsp有哪些内置对象?作用分别是什么? 分别有什么方法?

答:JSP共有以下9个内置的对象:request 用户端请求,此请求会包含来自GET/POST请求的参数response 网页传回用户端的回应pageContext 网页的属性是在这里管理session 与请求有关的会话期application servlet 正在执行的内容out 用来传送回应的输出config servlet的构架部件page JSP网页本身exception 针对错误网页,未捕捉的例外 request表示HttpServletRequest对象。它包含了有关浏览器
14
2020
07

request.getAttribute() 和 request.getParameter() 有何区别?

1.getAttribute是取得jsp中 用setAttribute設定的attribute2.parameter得到的是string;attribute得到的是object3.request.getParameter ()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.setAttribute()和 getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方
14
2020
07

forward 和redirect的区别

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。  redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
14
2020
07

Request对象的主要方法:

setAttribute(String name,Object):设置名字为name的request的参数值getAttribute(String name):返回由name指定的属性值getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body
14
2020
07

什么情况下调用doGet()和doPost()?

Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。
14
2020
07

SERVLET API中forward() 与redirect()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
14
2020
07

Servlet的基本架构

public class ServletName extendsHttpServlet {public void doPost(HttpServletRequestrequest, HttpServletResponse response) throwsServletException, IOException {}public void doGet(HttpServletRequestrequest, HttpServletResponse response) throwsServletExc
14
2020
07

说一说Servlet的生命周期?

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。web容器加载servlet,生命周期开始。通过调用se
14
2020
07

解释一下什么是servlet

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
14
2020
07

HTTP请求的GET与POST方式的区别

(1)get是从服务器上获取数据,post是向服务器传送数据。在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。(2)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。(3) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。(4)安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Po
14
2020
07

Tomcat的优化经验

答:去掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的内存
14
2020
07

Struts,Spring,Hibernate优缺点

Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。 Struts开放源码框架的创建是为了使开发者在构建基于Java Servlet和JavaServerPages(JSP)技术的Web应用时更加容易。Struts框架为开放者提供了一个统一的标准框架,通过使用Struts作为基础,开发者能够更专注 于应用程序的商业逻辑。Struts框架本身是使用Java Servlet和JavaServer Pages技术的一
14
2020
07

spring工作机制及为什么要用?

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet请请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到Model
14
2020
07

Struts工作机制?为什么要使用Struts?

工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.   -(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;   -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户
14
2020
07

Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。

getHiberanteTemplate里面提供了save,update,delete,find等方法。简单说一个:如果配置了声明式事务,当执行getHibernateTemplate的各种方法的时候,事务会自动被加载如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate的autocommit=true
14
2020
07

Hibernate中的update()和saveOrUpdate()的区别.

摘自hibernate说明文档:saveOrUpdate()做下面的事:如果对象已经在本session中持久化了,不做任何事如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常如果对象没有持久化标识(identifier)属性,对其调用save()如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()如果对象是附带版本信息的(通过<version>或 <timestamp>)并且版本属性的值表
14
2020
07

spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。

声明事务和编程事务隔离级别:- DEFAULT使用数据库默认的隔离级别- READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题- READ_COMMITTED会出现重复读和幻影读- REPEATABLE_READ会出现幻影读- SERIALIZABLE最安全,但是代价最大,性能影响极其严重和传播行:- REQUIRED存在事务就融入该事务,不存在就创建事务- SUPPORTS存在事务就融入事务,不存在则不创建事务- MANDATORY存在事务则融入该事务,不存在,抛异常- REQU
14
2020
07

谈谈hibernate的延迟加载和openSessionInView

延迟加载要在session范围内,用到的时候再加载;opensessioninview是在web层写了一个filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟加载在session中的这个前提。
14
2020
07

load()和get()的区别

hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,load默认支持延迟加载,在用到对象中的其他属性数 据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常ObjectNotFoundEcception;所说的load方法抛异常是指在使用该对 象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在 load时会先查一下session缓存看看该id对应的对象是否
14
2020
07

Struts1流程

1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被ActionServlet接收。3、根据struts-config.xml配置, ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。4、是否验证,需要验证则调用ActionForm的validate方法,验证失败则跳转到input,成功则继续。5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。6、
13
2020
07

查看各类环境变量用什么命令?

答案:查看所有 env查看某个,如 home: env $HOME
13
2020
07

使用什么命令查看 ip 地址及接口信息?

答案:ifconfig
13
2020
07

使用什么命令查看网络是否连通?

答案:netstat
13
2020
07

使用什么命令查看磁盘使用空间? 空闲空间呢?

答案:df -hl文件系统 容量 已用 可用 已用% 挂载点Filesystem Size Used Avail Use% Mounted on /dev/hda2 45G 19G 24G44% //dev/hda1 494M 19M 450M 4% /boot
13
2020
07

使用什么命令查看用过的命令列表?

答案:history
13
2020
07

查看当前谁在使用该主机用什么命令? 查找自己所在的终端信息用什么命令?

答案:查找自己所在的终端信息:who am i查看当前谁在使用该主机:who
13
2020
07

搜索文件用什么命令? 格式是怎么样的?

答案:find <指定目录> <指定条件> <指定动作>whereis 加参数与文件名locate 只加文件名find 直接搜索磁盘,较慢。find / -name "string*"
13
2020
07

怎么查看系统支持的所有信号?

答案:kill -l
13
2020
07

终止进程用什么命令? 带什么参数?

答案:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]kill-9 pid
13
2020
07

把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?

答案:把后台任务调到前台执行 fg把停下的后台任务在后台执行起来 bg
13
2020
07

哪个命令专门用来查看后台任务?

答案:jobs
13
2020
07

怎么使一个命令在后台运行?

答案:一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格)
13
2020
07

Grep 命令有什么用? 如何忽略大小写? 如何查找不含该串的行?

答案: 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 grep [stringSTRING] filename grep [^string] filename
13
2020
07

Linux 下命令有哪几种可使用的通配符?分别代表什么含义?

答案: “?”可替代单个字符。 “*”可替代任意多个字符。 方括号“[charset]”可替代 charset 集中的任何单个字符,如[a-z],[abABC]
13
2020
07

1

11
2020
07

拼写纠错是如何实现的?

(1)拼写纠错是基于编辑距离来实现;编辑距离是一种标准的方法,它用来表示经过插入、删除和替换操作从一个字符串转换到另外一个字符串的最小操作步数;(2)编辑距离的计算过程:比如要计算 batyu 和 beauty 的编辑距离,先创建一个7×8 的表(batyu 长度为 5,coffee 长度为 6,各加 2),接着,在如下位置填入黑色数字。其他格的计算过程是取以下三个值的最小值:如果最上方的字符等于最左方的字符,则为左上方的数字。否则为左上方的数字+1。(对于 3,3 来说为 0)左方数字+1(对
11
2020
07

是否了解字典树?

常用字典数据结构如下所示:Trie 的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有 3 个基本性质:1)根节点不包含字符,除根节点外每一个节点都只包含一个字符。2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3)每个节点的所有子节点包含的字符都不相同。(1)可以看到,trie 树每一层的节点数是 26^i 级别的。所以为了节省空间,我们还可以用动态链表,或者用数组来模拟动态。而空间的花费,不会超过单词数×单词长度。(2)实现:对
11
2020
07

介绍一下你们的个性化搜索方案?

基于word2vec和Elasticsearch实现个性化搜索(1)基于word2vec、Elasticsearch和自定义的脚本插件,我们就实现了一个个性化的搜索服务,相对于原有的实现,新版的点击率和转化率都有大幅的提升;(2)基于word2vec的商品向量还有一个可用之处,就是可以用来实现相似商品的推荐;(3)使用word2vec来实现个性化搜索或个性化推荐是有一定局限性的,因为它只能处理用户点击历史这样的时序数据,而无法全面的去考虑用户偏好,这个还是有很大的改进和提升的空间;
11
2020
07

介绍下你们电商搜索的整体技术架构。

介绍下你们电商搜索的整体技术架构。
11
2020
07

如何监控 Elasticsearch 集群状态?

Marvel 让你可以很简单的通过 Kibana 监控 Elasticsearch。你可以实时查看你的集群健康状态和性能,也可以分析过去的集群、索引和节点指标。
11
2020
07

在并发情况下,Elasticsearch 如果保证读写一致?

(1)可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;(2)另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。(3)对于读操作,可以设置 replication 为 sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置 replication 为 asy
11
2020
07

Elasticsearch 对于大数据量(上亿量级)的聚合如何实现?

Elasticsearch 提供的首个近似聚合是 cardinality 度量。它提供一个字段的基数,即该字段的 distinct 或者 unique 值的数目。它是基于 HLL 算法的。HLL 会先对我们的输入作哈希运算,然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。其特点是:可配置的精度,用来控制内存的使用(更精确 = 更多内存);小的数据集精度是非常高的;我们可以通过配置参数,来设置去重需要的固定内存使用量。无论数千还是数十亿的唯一值,内存使用量只与你配置的精确度相关。&n
11
2020
07

对于 GC 方面,在使用 Elasticsearch 时要注意什么?

(1)倒排词典的索引需要常驻内存,无法 GC,需要监控 data node 上 segmentmemory 增长趋势。(2)各类缓存,field cache, filter cache, indexing cache, bulk queue 等等,要设置合理的大小,并且要应该根据最坏的情况来看 heap 是否够用,也就是各类缓存全部占满的时候,还有 heap 空间可以分配给其他任务吗?避免采用 clear cache等“自欺欺人”的方式来释放内存。(3)避免返回大量结果集的搜索与聚合。确实需要大
11
2020
07

Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

(1)64 GB 内存的机器是非常理想的, 但是 32 GB 和 16 GB 机器也是很常见的。少于 8 GB 会适得其反。(2)如果你要在更快的 CPUs 和更多的核心之间选择,选择更多的核心更好。多个内核提供的额外并发远胜过稍微快一点点的时钟频率。(3)如果你负担得起 SSD,它将远远超出任何旋转介质。 基于 SSD 的节点,查询和索引性能都有提升。如果你负担得起,SSD 是一个好的选择。(4)即使数据中心们近在咫尺,也要避免集群跨越多个数据中心。绝对要避免集群跨越大的地理距离。(5)请确保
11
2020
07

在 Elasticsearch 中,是怎么根据一个词找到对应的倒排索引的?

(1)Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。(2)Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。
11
2020
07

详细描述一下 Elasticsearch 搜索的过程。

(1)搜索被执行成一个两阶段过程,我们称之为 Query Then Fetch;(2)在初始查询阶段时,查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。 每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。PS:在搜索的时候是会查询 Filesystem Cache 的,但是有部分数据还在 MemoryBuffer,所以搜索是近实时的。(3)每个分片返回各自优先队列中 所有文档的 ID 和排序值 给协调节点,它合并这些值到自己的优先队列中来产生一个全局排
11
2020
07

详细描述一下 Elasticsearch 更新和删除文档的过程。

(1)删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不能被删除或者改动以展示其变更;(2)磁盘上的每个段都有一个相应的.del 文件。当删除请求发送后,文档并没有真的被删除,而是在.del 文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del 文件中被标记为删除的文档将不会被写入新段。(3)在新的文档被创建时,Elasticsearch 会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del 文件中被标记为删除,新版
11
2020
07

详细描述一下 Elasticsearch 索引文档的过程。

协调节点默认使用文档 ID 参与计算(也支持通过 routing),以便为路由提供合适的分片。shard = hash(document_id) % (num_of_primary_shards)(1)当分片所在的节点接收到来自协调节点的请求后,会将请求写入到 MemoryBuffer,然后定时(默认是每隔 1 秒)写入到 Filesystem Cache,这个从 MomeryBuffer 到 Filesystem Cache 的过程就叫做 refresh;(2)当然在某些情况下,存在 Mome
11
2020
07

客户端在和集群连接时,如何选择特定的节点执行请求的?

TransportClient 利用 transport 模块远程连接一个 elasticsearch 集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的 transport 地址,并以 轮询 的方式与这些地址进行通信。 
11
2020
07

Elasticsearch 中的节点(比如共 20 个),其中的 10 个

选了一个 master,另外 10 个选了另一个 master,怎么办?(1)当集群 master 候选数量不小于 3 个时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题;(3)当候选数量为两个时,只能修改为唯一的一个 master 候选,其他作为 data节点,避免脑裂问题。
11
2020
07

Elasticsearch 是如何实现 Master 选举的?

(1)Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含 Ping(节点之间通过这个 RPC 来发现彼此)和 Unicast(单播模块包含一个主机列表以控制哪些节点需要 ping 通)这两部分;(2)对所有可以成为 master 的节点(node.master: true)根据 nodeId 字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第 0 位)节点,暂且认为它是 master 节点。(3)如果对某个节点的投票数达到一定的值(可以成为
11
2020
07

lucence 内部结构是什么?

面试官:想了解你的知识面的广度和深度。解答:Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。可以基于这个脉络展开一些。 
11
2020
07

Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法

面试官:想了解对 ES 集群的运维能力。解答:(1)关闭缓存 swap;(2)堆内存设置为:Min(节点内存/2, 32GB);(3)设置最大文件句柄数;(4)线程池+队列大小根据业务需要做调整;(5)磁盘存储 raid 方式——存储有条件使用 RAID10,增加单节点性能以及避免单节点存储故障。
11
2020
07

详细描述一下 Elasticsearch 搜索的过程?

面试官:想了解 ES 搜索的底层原理,不再只关注业务层面了。解答:搜索拆解为“query then fetch” 两个阶段。query 阶段的目的:定位到位置,但不取。步骤拆解如下:(1)假设一个索引数据有 5 主+1 副本 共 10 分片,一次请求会命中(主或者副本分片中)的一个。(2)每个分片在本地进行查询,结果返回到本地有序的优先队列中。(3)第 2)步骤的结果发送到协调节点,协调节点产生一个全局的排序列表。fetch 阶段的目的:取数据。路由节点获取所有文档,返回给客户端。
11
2020
07

详细描述一下 Elasticsearch 索引文档的过程

面试官:想了解 ES 的底层原理,不再只关注业务层面了。解答:这里的索引文档应该理解为文档写入 ES,创建索引的过程。文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流程。记住官方文档中的这个图。第一步:客户写集群某节点写入数据,发送请求。(如果没有指定路由/协调节点,请求的节点扮演路由节点的角色。)第二步:节点 1 接受到请求后,使用文档_id 来确定文档属于分片 0。请求会被转到另外的节点,假定节点 3。因此分片 0 的主分片分配到节点 3 上。第三步:节点 3 在
11
2020
07

elasticsearch 是如何实现 master 选举的

面试官:想了解 ES 集群的底层原理,不再只关注业务层面了。解答:前置前提:(1)只有候选主节点(master:true)的节点才能成为主节点。(2)最小主节点数(min_master_nodes)的目的是防止脑裂。核对了一下代码,核心入口为 findMaster,选择主节点成功返回对应 Master,否则返回 null。选举流程大致描述如下:第一步:确认候选主节点数达标,elasticsearch.yml 设置的值discovery.zen.minimum_master_nodes;第二步:比
11
2020
07

elasticsearch 索引数据多了怎么办,如何调优,部署

面试官:想了解大数据量的运维能力。解答:索引数据的规划,应在前期做好规划,正所谓“设计先行,编码在后”,这样才能有效的避免突如其来的数据激增导致集群处理能力不足引发的线上客户检索或者其他业务受到影响。如何调优,正如问题 1 所说,这里细化一下:3.1 动态索引层面基于模板+时间+rollover api 滚动创建索引,举例:设计阶段定义:blog 索引的模板格式为:blog_index_时间戳的形式,每天递增数据。这样做的好处:不至于数据量激增导致单个索引数据量非常大,接近于上线 2 的32 次
11
2020
07

elasticsearch 的倒排索引是什么

面试官:想了解你对基础概念的认知。解答:通俗解释一下就可以。传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引。有了倒排索引,就能实现 o(1)时间复杂度的效率检索文章了,极大的提高了检索效率。学术的解答方式:倒排索引,相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表。加分项:倒排索引的底层实现是基于:FST(Finite State Transduce
11
2020
07

elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。

面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。解答:如实结合自己的实践场景回答即可。比如:ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日递增 20+,索引:10 分片,每日递增 1 亿+数据,每个通道每天索引大小控制:150GB 之内。仅索引层面调优手段:1.1、设计阶段调优(1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引;(2)使用别名进行索引管理;(3)每天凌晨定
11
2020
07

Elasticsearch是一个高度可伸缩的开源全文搜索和分析引擎。它允许您快速和接近实时地存储、搜索和分析大量数据。

这里有一些使用Elasticsearch的用例:(1)你经营一个网上商店,你允许你的顾客搜索你卖的产品。在这种情况下,您可以使用Elasticsearch来存储整个产品目录和库存,并为它们提供搜索和自动完成建议。(2)你希望收集日志或事务数据,并希望分析和挖掘这些数据,以查找趋势、统计、汇总或异常。在这种情况下,你可以使用loghide (Elasticsearch/ loghide /Kibana堆栈的一部分)来收集、聚合和解析数据,然后让loghide将这些数据输入到Elasticsearc
11
2020
07

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。

(1)查询 : Elasticsearch 允许执行和合并多种类型的搜索 — 结构化、非结构化、地理位置、度量指标 — 搜索方式随心而变。(2)分析 : 找到与查询最匹配的十个文档是一回事。但是如果面对的是十亿行日志,又该如何解读呢?Elasticsearch 聚合让您能够从大处着眼,探索数据的趋势和模式。(3)速度 : Elasticsearch 很快。真的,真的很快。(4)可扩展性 : 可以在笔记本电脑上运行。 也可以在承载了 PB 级数据的成百上千台服务器上运行。(5)弹性 : Elast
11
2020
07

如何检查Elasticsearch服务器是否正在运行?

通常,ElasticSearch使用9200-9300的端口范围。因此,要检查它是否在您的服务器上运行,只需键入主页的URL,然后输入端口号。 例如:mysitename.com:9200
11
2020
07

列出Elasticsearch的不同类型的查询?

这些查询分为两种类型,在它们下面有多个查询分类:  基于全文检索:匹配查询、匹配词组查询、多匹配查询、匹配词组前缀查询、常用词查询、查询字符串查询、简单查询字符串查询。  基于词条检索:词条查询、词条集查询、范围查询、前缀查询、通配符查询、regexp查询、模糊查询、存在查询、类型查询、id查询
11
2020
07

如何在Elasticsearch群集中添加或创建索引?

 通过在索引名称之前使用命令PUT,创建索引,如果要添加另一个索引,则在索引名称前使用命令POST。 例如:put网站 创建名为computer的索引
11
2020
07

什么是文档?

  Elasticsearch中的文档与关系数据库中的行类似。唯一的区别是索引中的每个文档都可以具有不同的结构或字段但对于公共字段必须具有相同的数据类型。文档中的每个数据类型不同的字段可以出现多次。这些字段还可以包含其他文档
11
2020
07

Elasticsearch中的群集是什么?

 它是由一个或多个节点或服务器组成的集合或集合,这些节点或服务器用来保存完整的数据,并提供跨所有节点的联合索引和搜索功能。它由一个不同且唯一的名称标识,默认为“ElasticSearch”。 此名称被认为是重要的,因为只有将节点设置为按名称加入集群时,它才能成为集群的一部分。
11
2020
07

Elasticsearch数据储存在哪里?

  ElasticSearch是一个带有多个目录的分布式文档存储。它可以实时存储和检索序列化为JSON文档的复杂数据结构。
11
2020
07

列出安装Elasticsearch的软件要求?

  由于Elasticsearch是使用Java构建的,因此我们需要以下任何软件才能在我们的设备上运行Elasticsearch     Java 8系列的最新版本建议使用Java版本1.8.0_131
11
2020
07

在ElasticSearch中聚合是如何工作的?

   聚合框架提供基于搜索查询的聚合数据。它可以看作是一个工作单元,用于在一组文档上构建分析信息。聚合的类型不同,用途和输出也不同。
11
2020
07

什么是SHARDS?

由于应用程序在不同的机器上使用了多个ElasticSearch实例,因此在扩展方面存在诸如RAM、VCPU等资源限制。索引中的数据可以分为多个部分,由一个单独的ElasticSearch节点或实例管理。每个部分称为一个SHARDS。默认情况下,ElasticSearch索引有5个SHARDS。
11
2020
07

您能列出一些使用Elasticsearch的公司吗?

一些使用Elasticsearch以及Logstash和Kibana的公司是:·  Wikipedia·  Netflix·  Accenture·  Stack Overflow·  Fujitsu·  Tripwire·  Medium·  Swat.io·  Hip chat·  IFTTT
11
2020
07

如何在ES中列出集群的所有索引?

通过使用 GET / _index name/ indices,我们可以获得集群中存在的索引列表
11
2020
07

什么是REPLICAS?

Elasticsearch中的每个分片再次具有两个称为副本的分片副本。它们服务于容错和高可用性的目的
11
2020
07

如何在Elasticsearch中完成相关性和评分?

 Lucene使用布尔模型来查找类似文档,并使用一个称为实用评分函数的公式来计算相关性。该公式从逆文档/术语 - 文档频率和向量空间模型中复制概念,并添加了细条印子字段长度归一化等现代特征。得分(q , d)是查询“q”是文档“d”的相关得分。
11
2020
07

Elasticsearch可以取代数据库吗?

 是的,Elasticsearch可以用作数据库的替代品,因为Elasticsearch非常强大。它提供了多用户,分片和备份,分发和云实时获取,刷新,提交,版本控制和重新索引等功能,使其成为数据库的适当替代品。
11
2020
07

Elasticsearch中如何删除索引?

要在ElasticSearch中删除索引,请使用命令delete/index name。   例如:DELETE /website(删除/网站)
11
2020
07

如何在索引中添加映射?

 基本上,Elasticsearch将根据用户在请求正文中提供的数据自动创建映射。其批量功能可用于在索引中添加多个JSON对象。 例如:POST网站/ _bulk
11
2020
07

如何在ES中按ID检索文档?

要在ElasticSearch中检索文档,我们使用get动词,后跟_index、_type、_id。例如:get/computer/blog/123?=漂亮
11
2020
07

什么是索引?

ElasticSearch中的索引类似于关系数据库中的表,唯一的区别在于将实际值存储在关系数据库中,而ElasticSearch中的索引是可选的。 索引能够在索引中存储实际值或分析值。
11
2020
07

如何启动 Elasticsearch服务器?

在终端上运行以下命令以启动Elasticsearch服务器:   cd elasticsearch    ./bin/elasticsearch    curl'http:// localhost:9200 /?pretty'命令用于检查ElasticSearch服务器是否正在运行
11
2020
07

Elasticsearch的当前稳定版本是什么?

  截至2018年3月,版本6.2.2是Elasticsearch的最新稳定版本。
11
2020
07

在Elasticsearch中搜索的方式有哪些?

我们可以在Elasticsearch中执行以下搜索: 多索引,多类型搜索:所有搜索API都可以应用于所有多个索引,并支持多索引系统我们可以搜索所有索引中的某些标签以及所有索引和所有类型的所有标签。 URI搜索:通过提供请求参数,纯粹使用URI执行搜索请求。 请求正文搜索:搜索请求可以由搜索DSL执行,搜索DSL包括正文中的查询DSL。
11
2020
07

基于词条的查询和全文的查询有什么区别?

基于词条的查询:词条查询或模糊查询等查询是没有分析阶段的低级查询。词条查询术语Foo在倒排索引中搜索确切的词条并计算IDF / TF相关性分数对于每个有词条的文档。全文查询:匹配查询或查询字符串查询等查询是了解字段映射的高级查询。只要查询汇总了完整的项目列表,它就会为每个项执行适当的低级查询,最后结合他们的结果来产生每个文档的相关性分数。
11
2020
07

什么是节点?

 Elasticsearch 的每个实例都是一个节点,多个节点的集合可以协调工作,形成一个  Elasticsearch 集群
11
2020
07

请解析映射?

影射是定义文档如何映射到搜索引擎的过程,包括可搜索的特征,例如那些字段是标记以即刻搜索的。在Elasticsearch中,创建的索引可能包含所有“映射类型”的文档。
11
2020
07

ElasticSearch中的分片是什么

 在大多数环境中,每个节点都在单独的盒子或虚拟机上运行。  索引 - 在Elasticsearch中,索引是文档的集合。  分片 -因为Elasticsearch是一个分布式搜索引擎,所以索引通常被分割成分布在多个节点上的被称为分片的元素。
11
2020
07

在并发情况下,Elasticsearch如果保证读写一致?

可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;  另外对于写操作,一致性级别支持quorum/one/all,默认为quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。  对于读操作,可以设置replication为sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置replication为async时,也可以通过设置搜索
11
2020
07

Elasticsearch对于大数据量(上亿量级)的聚合如何实现?

Elasticsearch 提供的首个近似聚合是cardinality 度量。它提供一个字段的基数,即该字段的distinct或者unique值的数目。它是基于HLL算法的。HLL 会先对我们的输入作哈希运算,然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。其特点是:可配置的精度,用来控制内存的使用(更精确 = 更多内存);小的数据集精度是非常高的;我们可以通过配置参数,来设置去重需要的固定内存使用量。无论数千还是数十亿的唯一值,内存使用量只与你配置的精确度相关 .
11
2020
07

详细描述一下Elasticsearch搜索的过程

 搜索被执行成一个两阶段过程,我们称之为 Query Then Fetch;  在初始查询阶段时,查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。 每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。PS:在搜索的时候是会查询Filesystem Cache的,但是有部分数据还在Memory Buffer,所以搜索是近实时的。  每个分片返回各自优先队列中 所有文档的 ID 和排序值 给协调节点,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列
11
2020
07

详细描述一下Elasticsearch更新和删除文档的过程

 删除和更新也都是写操作,但是Elasticsearch中的文档是不可变的,因此不能被删除或者改动以展示其变更;  磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。  在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新
11
2020
07

详细描述一下Elasticsearch索引文档的过程。

 协调节点默认使用文档ID参与计算(也支持通过routing),以便为路由提供合适的分片。  shard = hash(document_id) % (num_of_primary_shards)  当分片所在的节点接收到来自协调节点的请求后,会将请求写入到Memory Buffer,然后定时(默认是每隔1秒)写入到Filesystem Cache,这个从Momery Buffer到Filesystem   Cache的过程就叫做refresh;  当然在某些情况下,存在Momery Buffe
11
2020
07

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

 当集群master候选数量不小于3个时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题;当候选数量为两个时,只能修改为唯一的一个master候选,其他作为data节点,避免脑裂问题。
11
2020
07

Elasticsearch是如何实现Master选举的?

 Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分;  对所有可以成为master的节点(node.master: true)根据nodeId字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。  如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自
11
2020
07

为什么要使用Elasticsearch?

因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。
07
2020
07

Android Intent 的使用

在一个 Android 应用中,主要是由一些组件组成,( Activity,Service,ContentProvider,etc.) 在这些组件之间的通讯中,由 Intent 协助完成。正如网上一些人解析所说, Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述, Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。 Intent 在这里起着实现调用者与被调用者之间的解耦作用。Intent 传递过程中,
07
2020
07

什么是 ANR 如何避免它 ?

ANR : Application Not Responding ,五秒在 Android 中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时, Android 就会显示 ANR 对话框了:对输入事件 ( 如按键、触摸屏事件 ) 的响应超过 5 秒意向接受器 (intentReceiver) 超过 10 秒钟仍未执行完毕Android 应用程序完全运行在一个独立的线程中 ( 例如 main) 。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR
07
2020
07

4 种 activity 的启动模式

standard: 标准模式 ,一调用 startActivity() 方法就会产生一个新的实例。singleTop : 如果已经有一个实例位于 Activity 栈的顶部时,就不产生新的实例,而只是调用 Activity中的 newInstance() 方法。如果不位于栈顶,会产生一个新的实例。singleTask : 会在一个新的 task 中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。singleInstance : 这个跟 singleTask 基本上是一样,只有一个区
07
2020
07

Android 中的长度单位详解

现在这里介绍一下 dp 和 sp 。 dp 也就是 dip 。这个和 sp 基本类似。如果设置表示长度、高度等属性时可以使用 dp 或 sp 。但如果设置字体,需要使用 sp 。 dp 是与密度无关, sp 除了与密度无关外,还与 scale 无关。如果屏幕密度为 160 ,这时 dp 和 sp 和 px 是一样的。 1dp=1sp=1px ,但如果使用 px 作单位,如果屏幕大小不变(假设还是 3.2 寸),而屏幕密度变成了 320 。那么原来TextView 的宽度设成 160px ,在密度
07
2020
07

设计模式和 IoC( 控制反转 )

Android 框架魅力的源泉在于 IoC ,在开发 Android 的过程中你会时刻感受到 IoC 带来的巨大方便,就拿 Activity 来说,下面的函数是框架调用自动调用的:protected void onCreate(Bundle savedInstanceState) ;不是程序编写者主动去调用,反而是用户写的代码被框架调用,这也就反转了!当然 IoC 本身的内涵远远不止这些,但是从这个例子中也可以窥视出 IoC带来的巨大好处。此类的例子在 Android 随处可见,例如说数据库的管
07
2020
07

广播接收者生命周期

一个广播接收者有一个回调方法: void onReceive(Context curContext , Intent broadcastMsg )。当一个广播消息到达接收者是, Android 调用它的 onReceive() 方法并传递给它包含消息的 Intent对象。广播接收者被认为仅当它执行这个方法时是活跃的。当 onReceive() 返回后,它是不活跃的。有一个活跃的广播接收者的进程是受保护的,不会被杀死。但是系统可以在任何时候杀死仅有不活跃组件的进程,当占用的内存别的进程需要时。这带
07
2020
07

ListView 优化

工作原理 :ListView 针对 List 中每个 item ,要求 adapter “ 给我一个视图 ” (getView) 。一个新的视图被返回并显示如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图? NO! 这不可能!实际上 Android 为你缓存了视图。Android 中有个叫做 Recycler 的构件,下图是他的工作原理:如果你有 10 亿个项目 (item) ,其中只有可见的项目存在内存中,其他的在 Recycler 中。1. ListView 先请求一个 type1
07
2020
07

如何启用 Service ,如何停用 Service

Android 中的服务和 windows 中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:第一步:继承 Service 类public class SMSService extends Service {}第二步:在 AndroidManifest.xml 文件中的 <application> 节点里对服务进行配置 :<service android:name=”.SMSService”
07
2020
07

请介绍下 Android 中常用的五种布局

Android 布局是应用界面开发的重要一环,在 Android 中,共有五种布局方式,分别是:FrameLayout (框架布局), LinearLayout (线性布局),AbsoluteLayout (绝对布局), RelativeLayout (相对布局), TableLayout (表格布局)。1.FrameLayout这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简
07
2020
07

Android 常用控件的信息

单选框 (RadioButton 与 RadioGroup) :RadioGroup 用于对单选框进行分组,相同组内的单选框只有一个单选框被选中。事件: setOnCheckedChangeListener() ,处理单选框被选择事件。把RadioGroup.OnCheckedChangeListener 实例作为参数传入。多选框 (CheckBox):每个多选框都是独立的,可以通过迭代所有的多选框,然后根据其状态是否被选中在获取其值。事件: setOnCheckChangeListener()
07
2020
07

Android 系统的架构

android 的系统架构和其操作系统一样,采用了分层的架构。从架构图看, android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和 linux 核心层。1. 应用程序Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email 客户端, SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语言编写的。2. 应用程序框架开发人员也可以完全访问核心应用程序所使用的 API 框架。该应用程序的架构设计简化了组件
07
2020
07

在 android 中 mvc 的具体体现

MVC 是 Model,View,Controller 的缩写,从上图可以看出 MVC 包含三个部分:.. 模型( Model )对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。.. 视图( View )对象:是应用程序中负责生成用户界面的部分。也是在整个MVC 架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。.. 控制器( Control )对象:是根据用户的输入,控制用户界面数据显示及更新Model 对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交
07
2020
07

如何将打开 res aw 目录中的数据库文件 ?

解答:在 Android 中不能直接打开 res aw 目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或 SD 卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource 方法获得 res aw 目录中资源的 InputStream 对象,然后将该InputStream 对象中的数据写入其他的目录中相应文件中。在 Android SDK 中可以使用SQLiteDatabase.openOrCreateDatabas
07
2020
07

如何将 SQLite 数据库 (dictionary.db 文件 ) 与 apk 文件一起发布 ?

解答:可以将 dictionary.db 文件复制到 Eclipse Android 工程中的 res aw 目录中。所有在 res aw 目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将 dictionary.db 文件复制到 res aw 目录中
07
2020
07

让 Activity 变成一个窗口: Activity 属性设定

讲点轻松的吧 , 可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很 简单你只需要设置 一下 Activity 的主题就可以了在 AndroidManifest.xml 中定义 Activity 的 地方一句话:Xml 代码1. android :theme=”@android:style/Theme.Dialog”这就使你的应用程序变成对话框的形式弹出来了,或者Xml 代码1. android:theme=”@android:style/Theme.Translucent”就变成
07
2020
07

sim 卡的 EF 文件有何作用

sim 卡的文件系统有自己规范,主要是为了和手机通讯, sim 本 身可以有自己的操作系统,EF 就是作存储并和手机通讯用的
07
2020
07

Android dvm 的进程和 Linux 的进程 , 应用程序的进程是否为同一个概念

DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。 
07
2020
07

android 中线程与线程,进程与进程之间如何通信

1 、一个 Android 程序开始运行时,会单独启动一个 Process 。默认情况下,所有这个程序中的 Activity 或者 Service 都会跑在这个 Process 。默认情况下,一个 Android 程序也只有一个 Process ,但一个 Process 下却可以有许多个 Thread。2 、一个 Android 程序开始运行时,就有一个主线程 Main Thread 被创建。该线程主要负责 UI 界面的显示、更新和控件交互,所以又叫 UI Thread 。一个 Android
07
2020
07

什么是嵌入式实时操作系统 , Android 操作系统属于实时操作系统吗 ?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于linux 内核的,因此属于软实时。
07
2020
07

handler 机制的原理

andriod 提供了 Handler 和 Looper 来满足线程间的通信。 Handler 先进先出原则。 Looper 类用来管理特定线程内对象之间的消息交换 (Message Exchange) 。1)Looper: 一个线程可以产生一个 Looper 对象,由它来管理此线程里的 Message Queue( 消息队列 ) 。2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 Message Queue 里; 或者接收 Looper
07
2020
07

一条最长的短信息约占多少 byte?

中文70( 包括标点) ,英文160 ,160 个字节。
07
2020
07

android 中的动画有哪几类,它们的特点和区别是什么 ?

两种,一种是 Tween 动画、还有一种是 Frame 动画。 Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化 ; 另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
07
2020
07

横竖屏切换时候 activity 的生命周期

1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏时会执行两次 .2. 设置 Activity 的 android:configChanges=”orientation” 时 , 切屏还是会重新调用各个生命周期 , 切横、竖屏时只会执行一次 .3. 设置 Activity 的 android:configChanges=”orientation|keyboardHidden” 时 , 切屏不会重新
07
2020
07

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B这个时候A会执行Java代码public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong(“id”, 1234567890);}B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreate()方
07
2020
07

vue如何自定义一个过滤器?

html代码:<div id="app">     <input type="text" v-model="msg" />     {{msg| capitalize }}</div>JS代码:var vm=new Vue({    el:"#app",    data:{ 
07
2020
07

vue-cli如何新增自定义指令?

1.创建局部指令var app = new Vue({    el: '#app',    data: {        },    // 创建指令(可以多个)    directives: {        // 指令名称        dir1: {    &
07
2020
07

vue路由的钩子函数

首页可以控制导航跳转,beforeEach,afterEach等,一般用于页面title的修改。一些需要登录才能调整页面的重定向功能。beforeEach主要有3个参数to,from,next:to:route即将进入的目标路由对象,from:route当前导航正要离开的路由next:function一定要调用该方法resolve这个钩子。执行效果依赖next方法的调用参数。可以控制网页的跳转。
07
2020
07

Vue与Angular以及React的区别?

(版本在不断更新,以下的区别有可能不是很正确。我工作中只用到vue,对angular和react不怎么熟)1.与AngularJS的区别相同点:都支持指令:内置指令和自定义指令;都支持过滤器:内置过滤器和自定义过滤器;都支持双向数据绑定;都不支持低端浏览器。不同点:AngularJS的学习成本高,比如增加了Dependency Injection特性,而Vue.js本身提供的API都比较简单、直观;在性能上,AngularJS依赖对数据做脏检查,所以Watcher越多越慢;Vue.js使用基于依
07
2020
07

Vue的路由实现:hash模式 和 history模式

hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取;特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 http://www.xxx.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。history模式:history采用HTML5的新特性;且提供了两个新方法:pus
07
2020
07

Vue实现数据双向绑定的原理:Object.defineProperty()

vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访
07
2020
07

什么是MVVM?

MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Mod
07
2020
07

mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

mvc和mvvm其实区别并不大。都是一种设计思想。主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。区别:vue数据驱动,通过数据来显示视图层而不是节点操作。场景:数据操作比较多的场景,更加便捷
07
2020
07

组件之间的传值?

父组件与子组件传值父组件通过标签上面定义传值子组件通过props方法接受数据子组件向父组件传递数据子组件通过$emit方法传递参数
07
2020
07

路由之间跳转

声明式(标签跳转) 编程式( js跳转)
07
2020
07

v-show和v-if指令的共同点和不同点

v-show指令是通过修改元素的display的CSS属性让其显示或者隐藏;v-if指令是直接销毁和重建DOM达到让元素显示和隐藏的效果;使用v-show会更加节省性能上的开销;当只需要一次显示或隐藏时,使用v-if更加合理。
07
2020
07

keep-alive /keep-alive的作用是什么?

包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染。
07
2020
07

Vue中引入组件的步骤?

1)采用ES6的import … from …语法或CommonJS的require()方法引入组件2)对组件进行注册,代码如下// 注册Vue.component(‘my-component’, { template:’A custom component!'})3)使用组件
07
2020
07

指令v-el的作用是什么?

提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标.可以是 CSS 选择器,也可以是一个 HTMLElement 实例
07
2020
07

在Vue中使用插件的步骤

采用ES6的import … from …语法或CommonJSd的require()方法引入插件使用全局方法Vue.use( plugin )使用插件,可以传入一个选项对象Vue.use(MyPlugin, { someOption: true })
07
2020
07

active-class是哪个组件的属性?

vue-router模块的router-link组件。
07
2020
07

怎么定义vue-router的动态路由以及如何获取传过来的动态参数?

在router目录下的index.js文件中,对path属性加上/:id。使用router对象的params.id。
07
2020
07

vue-router有哪几种导航钩子?

三种,一种是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。第二种:组件内的钩子;第三种:单独路由独享组件
07
2020
07

说出至少4种vue当中的指令和它的用法?

v-if:判断是否隐藏;v-for:数据循环;v-bind:class:绑定一个属性;v-model:实现双向绑定Vue如何创建自定义指令?
07
2020
07

scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?

答:css的预编译。使用步骤:第一步:先装css-loader、node-loader、sass-loader等加载器模块第二步:在build目录找到webpack.base.config.js,在那个extends属性中加一个拓展.scss第三步:在同一个文件,配置一个module属性第四步:然后在组件的style标签加上lang属性 ,例如:lang=”scss”特性:可以用变量,例如($变量名称=值);可以用混合器,例如()可以嵌套
07
2020
07

为什么使用key?

当有相同标签名的元素切换时,需要通过 key 特性设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。
07
2020
07

为什么避免 v-if 和 v-for 用在一起

当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,通过v-if 移动到容器元素,不会再重复遍历列表中的每个值。取而代之的是,我们只检查它一次,且不会在 v-if 为否的时候运算 v-for。
07
2020
07

VNode是什么?虚拟 DOM是什么?

Vue在 页面上渲染的节点,及其子节点称为“虚拟节点 (Virtual Node)”,简写为“VNode”。“虚拟 DOM”是由 Vue 组件树建立起来的整个 VNode 树的称呼。
07
2020
07

vue中如何解决页面不重新渲染问题

(1).修改对象属性后页面未重新渲染可以使用 this.$set(对象名称, '属性名', '属性值') (2).使用this.$forceUpdate()方法可重新渲染页面
07
2020
07

watch如何实现深度监听

watch: { obj: {  handler: function(val) {  },  deep: true // 深度监听 }}
07
2020
07

watch能监听到数组的pop行为吗

对于有返回值的数据,watch就能监听到,比如数组的pop,push, unshift,map等行为。
07
2020
07

介绍下什么是keep-alive

keep-alive是用于做组件缓存的,只会执行一次,不会被销毁。被keep-alive包裹的组件,没有create和beforeDestroyed等方法,但是有activated和deactivated方法。
07
2020
07

vue中的事件修饰符主要有哪些?分别是什么作用

.stop: 阻止事件冒泡.native: 绑定原生事件.once: 事件只执行一次.self:将事件绑定在自身身上,相当于阻止事件冒泡.prevent: 阻止默认事件.caption: 用于事件捕获
07
2020
07

vue中父组件能监听到子组件的生命周期吗

父组件能够监听到子组件的生命周期,通过@hook:进行监听代码如下:// 这里是父组件<template> <child @hook:mounted="getChildMounted" /></template><script>method: { getChildMounted () {  // 这里可以获取到子组件mounted的信息 }}</script>
07
2020
07

vue父组件和子组件生命周期的顺序

1.渲染过程顺序:父组件beforeCreate() -> 父组件created() -> 父组件beforeMount() -> 子组件beforeCreate() ->子组件created() -> 子组件beforeMount() -> 子组件mounted() -> 父组件mounted()2.更新过程顺序:父组件更新过程:父组件beforeUpdate() -> 父组件updated()子组件更新过程:父组件beforeUpdate()
07
2020
07

watch和computed的区别

watch作用通常是由一个值影响多个值的改变并且能监听到这个值变化时,会去执行一个回调函数,此时我们可以在这个回调函数中做一些逻辑处理computed是根据依赖的值衍生出一个新的值,并且依赖的值可以有多个,只有当被依赖的值发生改变时,才会重新去执行计算
07
2020
07

vue中父组件如何获取子组件的属性和方法

vue中通过在子组件上定义ref属性来获取子组件的属性和方法,代码如下:// 这里是父组件<templete> <child ref="child"/></templete><script>method: { getChild () {  this.$refs.child.属性名(方法名) }}</script>
07
2020
07

vue同级组件间怎么传值

1.如果是兄弟组件,可通过父元素作为中间组件进行传值 2.通过创建一个bus,进行传值// 创建一个文件,定义bus中间件,并导出const bus = new Vue()// 在一个组件中发送事件bus.$emit('事件名称', 传递的参数)// 在另一个组件中监听事件bus.$on('事件名称', 得到传过来的参数)
07
2020
07

beforeDestroy里面一般进行什么操作

beforedestoryed是组件销毁之前执行的一个生命周期,在这个生命周期里,我们可以进行回调函数或定时器的清除,不用的dom元素的清除等
07
2020
07

v-if和v-for一起使用的弊端以及解决办法

由于v-for的优先级比v-if高,所以导致每循环一次就会去v-if一次,而v-if是通过创建和销毁dom元素来控制元素的显示与隐藏,所以就会不停的去创建和销毁元素,造成页面卡顿,性能下降。解决办法:在v-for的外层或内层包裹一个元素来使用v-if
06
2020
07

vue-router有两种传参方式

(1)通过在router.js文件中配置path的地方动态传递参数 eg: path: '/detail/:id' 然后在组件内通过this.$route.params.id即可获取(2).在router-link标签中传递参数<router-link :to={params: { x: 1 }} />也通过this.$route.params获取注意:这里通过router-link传递参数的方式是隐式传参
06
2020
07

vuex是什么?怎么使用?哪种功能场景使用它?

答:vue框架中状态管理。在main.js引入store,注入。新建了一个目录store.js,….. export 。场景有:单页应用中,组件之间的状态。音乐播放、登录状态、加入购物车
06
2020
07

vuex有哪几种属性?

答:有五种,分别是 State、 Getter、Mutation 、Action、 Modulestate => 基本数据(数据源存放地)getters => 从基本数据派生出来的数据mutations => 提交更改数据的方法,同步!actions => 像一个装饰器,包裹mutations,使之可以异步。modules => 模块化Vuex
06
2020
07

Vue.js中ajax请求代码应该写在组件的methods中还是vuex的actions中?

答:如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用。
06
2020
07

vue-router实现路由懒加载( 动态加载路由 )

答:三种方式第一种:vue异步组件技术 ==== 异步加载,vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件。第二种:路由懒加载(使用import)。第三种:webpack提供的require.ensure(),vue-router配置路由,使用webpack的require.ensure技术,也可以实现按需加载。这种情况下,多个路由指定相同的chunkName,会合并打包成一个js文件。
06
2020
07

vue-router的两种模式

答:hash模式:即地址栏 URL 中的 # 符号;history模式:window.history对象打印出来可以看到里边提供的方法和记录长度。利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)。
06
2020
07

$route 和 $router 的区别

答:$router是VueRouter的实例,在script标签中想要导航到不同的URL,使用$router.push方法。返回上一个历史history用$router.to(-1)$route为当前router跳转对象。里面可以获取当前路由的name,path,query,parmas等。
06
2020
07

vue-router 是什么?它有哪些组件

答:vue用来写路由一个插件。router-link、router-view
06
2020
07

active-class 是哪个组件的属性?

答:vue-router模块的router-link组件。children数组来定义子路由
06
2020
07

怎么定义 vue-router 的动态路由? 怎么获取传过来的值?

答:在router目录下的index.js文件中,对path属性加上/:id。 使用router对象的params.id。
06
2020
07

vue-router 有哪几种导航钩子?

答:三种,第一种:是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。第二种:组件内的钩子第三种:单独路由独享组件
06
2020
07

mvvm 框架是什么?

答:vue是实现了双向数据绑定的mvvm框架,当视图改变更新模型层,当模型层改变更新视图层。在vue中,使用了双向绑定技术,就是View的变化能实时让Model发生变化,而Model的变化也能实时更新到View。
06
2020
07

请详细说下你对vue生命周期的理解?

答:总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。创建前/后: 在beforeCreated阶段,vue实例的挂载元素$el和**数据对象**data都为undefined,还未初始化。在created阶段,vue实例的数据对象data有了,$el还没有。载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。
06
2020
07

vue获取数据在哪个周期函数

答:一般 created/beforeMount/mounted 皆可.比如如果你要操作 DOM , 那肯定 mounted 时候才能操作.
06
2020
07

created和mounted的区别

答:created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。
06
2020
07

简述每个周期具体适合哪些场景

答:beforeCreate:在new一个vue实例后,只有一些默认的生命周期钩子和默认事件,其他的东西都还没创建。在beforeCreate生命周期执行的时候,data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法create:data 和 methods都已经被初始化好了,如果要调用 methods 中的方法,或者操作 data 中的数据,最早可以在这个阶段中操作beforeMount:执行到这个钩子的时候,在内存中已经编译好了模板了,但是
06
2020
07

什么是 vue 生命周期?有什么作用?

答:每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这给了用户在不同阶段添加自己的代码的机会。(ps:生命周期钩子就是生命周期函数)例如,如果要通过某些插件操作DOM节点,如想在页面渲染完后弹出广告窗, 那我们最早可在mounted 中进行。相关文章:vue修改打包后静态资源路径的修改vue常用的UI组件库 axios的特点有哪些RouterL
05
2020
07

vue修改打包后静态资源路径的修改

答:cli2版本:将 config/index.js 里的 assetsPublicPath 的值改为 './' 。build: {...assetsPublicPath: './',... }cli3版本:在根目录下新建vue.config.js 文件,然后加上以下内容:(如果已经有此文件就直接修改)module.exports = {publicPath: '', // 相对于 HTML 页面(目录相同) }
01
2020
07

vue常用的UI组件库

答:Mint UI,element,VUX


01
2020
07

axios的特点有哪些

答:从浏览器中创建XMLHttpRequests;node.js创建http请求;支持Promise API;拦截请求和响应;转换请求数据和响应数据;取消请求;自动换成json。axios中的发送字段的参数是data跟params两个,两者的区别在于params是跟请求地址一起发送的,data的作为一个请求体进行发送params一般适用于get请求,data一般适用于post put 请求。
01
2020
07

RouterLink在IE和Firefox中不起作用(路由不跳转)的问题

答: 方法一:只用a标签,不适用button标签;方法二:使用button标签和Router.navigate方法
01
2020
07

vue更新数组时触发视图更新的方法

答:push();pop();shift();unshift();splice(); sort();reverse()
01
2020
07

vue初始化页面闪动问题

答:使用vue开发时,在vue初始化之前,由于div是不归vue管的,所以我们写的代码在还没有解析的情况下会容易出现花屏现象,看到类似于{{message}}的字样,虽然一般情况下这个时间很短暂,但是我们还是有必要让解决这个问题的。首先:在css里加上[v-cloak] {display: none;}。如果没有彻底解决问题,则在根元素加上style="display: none;" :style="{display: 'block'}"
01
2020
07

params和query的区别

答:用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.name和this.$route.params.name。url地址显示:query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示注意点:query刷新不会丢失query里面的数据params刷新 会 丢失 params里面的数据。
01
2020
07

请说下封装 vue 组件的过程?

答:1. 建立组件的模板,先把架子搭起来,写写样式,考虑好组件的基本逻辑。(os:思考1小时,码码10分钟,程序猿的准则。)  2. 准备好组件的数据输入。即分析好逻辑,定好 props 里面的数据、类型。  3. 准备好组件的数据输出。即根据组件逻辑,做好要暴露出来的方法。  4. 封装完毕了,直接调用即可