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. 封装完毕了,直接调用即可
24
2020
06

Vue2中注册在router-link上事件无效解决方法

答: 使用@click.native。原因:router-link会阻止click事件,.native指直接监听一个原生事件。
24
2020
06

Vue里面router-link在电脑上有用,在安卓上没反应怎么解决?

答:Vue路由在Android机上有问题,babel问题,安装babel polypill插件解决。
24
2020
06

你们vue项目是打包了一个js文件,一个css文件,还是有多个文件?

答:根据vue-cli脚手架规范,一个js文件,一个CSS文件。
24
2020
06

vue slot

答:简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示、不显示、在哪个地方显示、如何显示,就是slot分发负责的活。
21
2020
06

Vue-router跳转和location.href有什么区别

答:使用location.href='/url'来跳转,简单方便,但是刷新了页面;使用history.pushState('/url'),无刷新页面,静态跳转;引进router,然后使用router.push('/url')来跳转,使用了diff算法,实现了按需加载,减少了dom的消耗。其实使用router跳转和使用history.pushState()没什么差别的,因为vue-router就是用了history.pushState(),尤其是在h
19
2020
06

SPA首屏加载慢如何解决

答:安装动态懒加载所需插件;使用CDN资源。
19
2020
06

delete和Vue.delete删除数组的区别

答:delete只是被删除的元素变成了 empty/undefined 其他的元素的键值还是不变。Vue.delete 直接删除了数组 改变了数组的键值。
19
2020
06

引进组件的步骤

答: 在template中引入组件;在script的第一行用import引入路径;用component中写上组件名称。
19
2020
06

vue的两个核心点

答:数据驱动、组件系统数据驱动:ViewModel,保证数据和视图的一致性。组件系统:应用类UI可以看作全部是由组件树构成的。
19
2020
06

vue常用的修饰符

答:.stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡;.prevent:等同于JavaScript中的event.preventDefault(),防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播);.capture:与事件冒泡的方向相反,事件捕获由外到内;.self:只会触发自己范围内的事件,不包含子元素;.once:只会触发一次。
17
2020
06

v-if和v-for的优先级

答:当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中。所以,不推荐v-if和v-for同时使用。如果v-if和v-for一起用的话,vue中的的会自动提示v-if应该放到外层去。
17
2020
06

单页面应用和多页面应用区别及优缺点

答:单页面应用(SPA),通俗一点说就是指只有一个主页面的应用,浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入,单页面的页面跳转,仅刷新局部资源。多应用于pc端。多页面(MPA),就是指一个应用中有多个页面,页面跳转时是整页刷新单页面的优点:用户体验好,快,内容的改变不需要重新加载整个页面,基于这一点spa对服务器压力较小;前后端分离;页面效果会比较炫酷(比如切换页面内
17
2020
06

Vue中双向数据绑定是如何实现的?

答:vue 双向数据绑定是通过 数据劫持 结合 发布订阅模式的方式来实现的, 也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变;核心:关于VUE双向数据绑定,其核心是 Object.defineProperty()方法。
17
2020
06

渐进式框架的理解

答:主张最少;可以根据不同的需求选择不同的层级;
17
2020
06

vue组件中data为什么必须是一个函数?

答:因为JavaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象。  组建中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,它们只负责各自维护的数据,不会造成混乱。而单纯的写成对象形式,就是所有的组件实例共用了一个data,这样改一个全都改了。
17
2020
06

$nextTick的使用

答:当你修改了data的值然后马上获取这个dom元素的值,是不能获取到更新后的值,你需要使用$nextTick这个回调,让修改后的data值渲染更新到dom元素之后在获取,才能成功。
17
2020
06

Dubbo服务之间的调用是阻塞的吗?

默认是同步等待结果阻塞的,支持异步调用。Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。异步调用流程图如下。
16
2020
06

v-on可以监听多个方法吗?

答:可以,栗子:<input type="text" v-on="{ input:onInput,focus:onFocus,blur:onBlur, }">。
16
2020
06

分别简述computed和watch的使用场景

答:computed:    当一个属性受多个属性影响的时候就需要用到computed    最典型的栗子: 购物车商品结算的时候watch:    当一条数据影响多条数据的时候就需要用watch    栗子:搜索数据
16
2020
06

请说出vue.cli项目中src目录每个文件夹和文件的用法?

答:assets文件夹是放静态资源;components是放组件;router是定义路由相关的配置; app.vue是一个应用主组件;main.js是入口文件。
16
2020
06

v-modal的使用。

答:v-model用于表单数据的双向绑定,其实它就是一个语法糖,这个背后就做了两个操作:v-bind绑定一个value属性;v-on指令给当前元素绑定input事件。
16
2020
06

axios及安装?

答:请求后台资源的模块。npm install axios --save装好,js中使用import进来,然后.get或.post。返回在.then函数中如果成功,失败则是在.catch函数中。
16
2020
06

为什么使用key?

答:需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确的识别此节点。作用主要是为了高效的更新虚拟DOM。
16
2020
06

说出几种vue当中的指令和它的用法?

答:v-model双向数据绑定;v-for循环;v-if v-show 显示与隐藏;v-on事件;v-once: 只绑定一次。
16
2020
06

如何获取dom?

答:ref="domName" 用法:this.$refs.domName
16
2020
06

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

答:keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
16
2020
06

如何让CSS只在当前组件中起作用?

答:在组件中的style前面加上scoped
16
2020
06

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

答: 共同点:都能控制元素的显示和隐藏;不同点:实现本质方法不同,v-show本质就是通过控制css中的display设置为none,控制隐藏,只会编译一次;v-if是动态的向DOM树内添加或者删除DOM元素,若初始值为false,就不会编译了。而且v-if不停的销毁和创建比较消耗性能。总结:如果要频繁切换某节点,使用v-show(切换开销比较小,初始开销较大)。如果不需要频繁切换某节点使用v-if(初始渲染开销较小,切换开销比较大)。
16
2020
06

子组件像父组件传递事件?

答:$emit方法
16
2020
06

vue父组件向子组件传递数据?

答:通过props
16
2020
06

vue优点?

答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习;双向数据绑定:保留了angular的特点,在数据操作方面更为简单;组件化:保留了react的优点,实现了html的封装和重用,在构建单页面应用方面有着独特的优势;视图,数据,结构分离:使数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作;虚拟DOM:dom操作是非常耗费性能的, 不再使用原生的dom操作节点,极大解放dom操作,但具体
15
2020
06

描述一下TEidt和TListView的类派生顺序,并说明它们的来源区别。

TObject-TPersistent-TComponent-TControl-TWinControl-TCustomEdit-TEditTObject-TPersistent-TComponent-TControl-TWinControl-TCustomListControl-TCustomMultiSelectListControl-TCustomListView-TListView
08
2020
06

请解释Angular 2应用程序的生命周期hooks是什么?

Angular 2组件/指令具有生命周期事件,是由@angular/core管理的。@angular/core会创建组件,渲染它,创建并呈现它的后代。当@angular/core的数据绑定属性更改时,处理就会更改,在从DOM中删除其模板之前,就会销毁掉它。Angular提供了一组生命周期hooks(特殊事件),可以被分接到生命周期中,并在需要时执行操作。构造函数会在所有生命周期事件之前执行。每个接口都有一个前缀为ng的hook方法。例如,ngOnint界面的OnInit方法,这个方法必须在组件中
02
2020
06

. $apply()和$digest()的区别

安全性:$apply()可以接收一个参数作为function(),这个function会被包装到一个try…catch块中,所以一旦有异常发生,该异常会被$exceptionHandler service处理。$apply会使ng进入$digest cycle ,并从$rootScope开始遍历(深度优先)检查数据变更。$digest仅会检查该scope和它的子scope,当你确定当前操作仅影响它们时,用$digest可以稍微提升性能。
02
2020
06

angular的缺点有哪些?

1.强约束导致学习成本较高,对前端不友好。但遵守AngularJS的约定时,生产力会很高,对Java程序员友好。2.不利于SEO因为所有内容都是动态获取并渲染生成的,搜索引擎没法爬取。一种解决办法是,对于正常用户的访问,服务器响应AngularJS应用的内容;对于搜索引擎的访问,则响应专门针对SEO的HTML页面。3..性能问题作为MVVM框架,因为实现了数据的双向绑定,对于大数组、复杂对象会存在性能问题。可以用来优化Angular应用的性能 的办法:减少监控项(比如对不会变化的数据采用单向绑定
02
2020
06

分属不同团队进行开发的angular应用,如果要做整合,可能会遇到哪些问题,如何解决?

可能会遇到不同模块之间的冲突。比如一个团队所有的开发在moduleA下进行,另一团队开发的代码在moduleB下angular.module('myApp.moduleA', []).factory('serviceA', function(){...})angular.module('myApp.moduleB', []).factory('serviceA', function(){...})angular.module(
02
2020
06

angular应用常用哪些路由库,各自的区别是什么?

Angular1.x中常用ngRoute和ui.router,还有一种为Angular2设计的new router(面向组件)。后面那个没在实际项目中用过,就不讲了。无论是ngRoute还是ui.router,作为框架额外的附加功能,都必须以 模块依赖 的形式被引入。区别ngRoute模块是Angular自带的路由模块,而ui.router模块是基于ngRoute模块开发的第三方模块。ui.router是基于state(状态)的,ngRoute是基于url的,ui.router模块具有更强大的功
02
2020
06

一个angular应用应当如何良好地分层?

目录结构的划分1、对于小型项目,可以按照文件类型组织,比如:cssJs  {controllersmodelsservicesfilters}templates2、但是对于规模较大的项目,最好按业务模块划分,比如:cssModulesaccountcontrollersmodelsservicesfilterstemplatesdiskcontrollersmodelsservicesfilterstemplatesmodules下最好再有一个common目录来存放公共的东西。3.逻辑
02
2020
06

两个平级界面块a和b,如果a中触发一个事件,有哪些方式能让b知道?详述原理

这个问题换一种说法就是,如何在平级界面模块间进行通信。有两种方法,一种是共用服务,一种是基于事件。(1)共用服务在Angular中,通过factory可以生成一个单例对象,在需要通信的模块a和b中注入这个对象即可。(2)基于事件这个又分两种方式第一种是借助父controller。在子controller中向父controller触发($emit)一个事件,然后在父controller中监听($on)事件,再广播($broadcast)给子controller,这样通过事件携带的参数,实现了数据经
02
2020
06

factory、service和provider是什么关系?

1.factory把service的方法和数据放在一个对象里,并返回这个对象app.factory('FooService', function(){return {target: 'factory',sayHello: function(){return 'hello ' + this.target;}}});2.service通过构造函数方式创建service,返回一个实例化对象app.service('FooService',
02
2020
06

{{now | 'yyyy-MM-dd'}}这种表达式里面,竖线和后面的参数通过什么方式可以自定义?

filter,格式化数据,接收一个输入,按某规则处理,返回处理结果。内置filter1、ng内置的filter有九种:1.date(日期)2.currency(货币)3.limitTo(限制数组或字符串长度)4.orderBy(排序)5.lowercase(小写)6.uppercase(大写)7.number(格式化数字,加上千位分隔符,并接收参数限定小数点位数)8.filter(处理一个数组,过滤出含有某个子串的元素)9.json(格式化json对象)2、filter有两种使用方法,1)是直接
02
2020
06

有哪些措施可以改善Angular性能

1.官方提倡的,关闭debug,$compileProvidermyApp.config(function ($compileProvider) {$compileProvider.debugInfoEnabled(false);});2.使用一次绑定表达式即{{::yourModel}}3.减少watcher数量4.在无限滚动加载中避免使用ng-repeat5.使用性能测试的小工具去挖掘你的angular性能问题,我们可以使用简单的console.time()也可以借助开发者工具以及Batar
02
2020
06

Angular Directive中restrict中分别可以怎样设置?scope中@,=,&有什么区别?

restrict中可以分别设置:A匹配属性E匹配标签C匹配classM 匹配注释当然你可以设置多个值比如AEC,进行多个匹配。在scope中,@,=,&在进行值绑定时分别表示@获取一个设置的字符串,它可以自己设置的也可以使用{{yourModel}}进行绑定的;= 双向绑定,绑定scope上的一些属性;& 用于执行父级scope上的一些表达式,常见我们设置一些需要执行的函数< 进行单向绑定。angular.module('docsIsolationExample&#
02
2020
06

如何取消$timeout,以及停止一个$watch()?

停止$timeout我们可以用cancel:var customTimeout = $timeout(function () {// your code}, 1000);$timeout.cancel(customTimeout);停掉一个$watch:// .$watch()会返回一个停止注册的函数function that we store to a variablevar deregisterWatchFn = $rootScope.$watch(‘someGloballyAvailabl
02
2020
06

表达式{{yourModel}}是如何工作的?

它依赖于$interpolation服务,在初始化页面html后,它会找到这些表达式,并且进行标记,于是每遇见一个{{}},则会设置一个$watch。而$interpolation会返回一个带有上下文参数的函数,最后该函数执行,则算是表达式$parse到那个作用域上。
02
2020
06

ng-show/ng-hide与ng-if的区别?

第一点区别是,ng-if在后面表达式为true的时候才创建这个dom节点,ng-show是初始时就创建了,用display:block和display:none来控制显示和不显示。第二点区别是,ng-if会(隐式地)产生新作用域,ng-switch、ng-include等会动态创建一块界面的也是如此。这样会导致,在ng-if中用基本变量绑定ng-model,并在外层div中把此model绑定给另一个显示区域,内层改变时,外层不会同步改变,因为此时已经是两个变量了。{{name}}ng-show不
24
2020
05

Dubbo有哪几种配置方式?

1)Spring 配置方式2)Java API 配置方式
24
2020
05

Dubbo 核心的配置有哪些?

我曾经面试就遇到过面试官让你写这些配置配置之间的关系见下图。
24
2020
05

在 Provider 上可以配置的 Consumer 端的属性有哪些?

1)timeout:方法调用超时2)retries:失败重试次数,默认重试 2 次3)loadbalance:负载均衡算法,默认随机4)actives 消费者端,最大并发调用限制
24
2020
05

Dubbo推荐使用什么序列化框架,你知道的还有哪些?

推荐使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
24
2020
05

Dubbo默认使用的是什么通信框架,还有别的选择吗?

24
2020
05

Dubbo有哪几种负载均衡策略,默认是哪种?

Dubbo有哪几种负载均衡策略,默认是哪种?
24
2020
05

注册了多个同一样的服务,如果测试指定的某一个服务呢?

可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。
24
2020
05

当一个服务接口有多种实现时怎么做?

当一个接口有多种实现时,可以用 group 属性来分组,服务提供方和消费方都指定同一个 group 即可。
24
2020
05

服务上线怎么兼容旧版本?

可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。
24
2020
05

Dubbo可以对结果进行缓存吗?

可以,Dubbo 提供了声明式缓存,用于加速热门数据的访问速度,以减少用户加缓存的工作量。
24
2020
05

Dubbo支持分布式事务吗?

目前暂时不支持,后续可能采用基于 JTA/XA 规范实现,如以图所示。
24
2020
05

Dubbo telnet 命令能做什么?

dubbo 通过 telnet 命令来进行服务治理,具体使用看这篇文章《dubbo服务调试管理实用命令》。telnet localhost 8090
24
2020
05

Dubbo支持服务降级吗?

Dubbo 2.2.0 以上版本支持。
24
2020
05

Dubbo如何优雅停机?

Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。
24
2020
05

服务提供者能实现失效踢出是什么原理?

服务失效踢出基于 Zookeeper 的临时节点原理。
24
2020
05

如何解决服务调用链过长的问题?

Dubbo 可以使用 Pinpoint 和 Apache Skywalking(Incubator) 实现分布式服务追踪,当然还有其他很多方案。
24
2020
05

说说 Dubbo 服务暴露的过程。

Dubbo 会在 Spring 实例化完 bean 之后,在刷新容器最后一步发布 ContextRefreshEvent 事件的时候,通知实现了 ApplicationListener 的 ServiceBean 类进行回调 onApplicationEvent 事件方法,Dubbo 会在这个方法中调用 ServiceBean 父类 ServiceConfig 的 export 方法,而该方法真正实现了服务的(异步或者非异步)发布。
24
2020
05

Dubbo的管理控制台能做什么?

管理控制台主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。
24
2020
05

Dubbo必须依赖的包有哪些?

Dubbo 必须依赖 JDK,其他为可选。
24
2020
05

服务读写推荐的容错策略是怎样的?

读操作建议使用 Failover 失败自动切换,默认重试两次其他服务器。写操作建议使用 Failfast 快速失败,发一次调用失败就立即报错。
24
2020
05

你还了解别的分布式框架吗?

别的还有 Spring cloud、Facebook 的 Thrift、Twitter 的 Finagle 等。
24
2020
05

Dubbo 停止维护了吗?

2014 年开始停止维护过几年,17 年开始重新维护,并进入了 Apache 项目。
24
2020
05

Dubbo 和 Dubbox 有什么区别?

Dubbox 是继 Dubbo 停止维护后,当当网基于 Dubbo 做的一个扩展项目,如加了服务可 Restful 调用,更新了开源组件等。
24
2020
05

Dubbo 能集成 Spring Boot 吗?

可以的,项目地址如下。https://github.com/apache/incubator-dubbo-spring-boot-project
24
2020
05

在使用过程中都遇到了些什么问题?

Dubbo 的设计目的是为了满足高并发小数据量的 rpc 调用,在大数据量下的性能表现并不好,建议使用 rmi 或 http 协议。
24
2020
05

你读过 Dubbo 的源码吗?

要了解 Dubbo 就必须看其源码,了解其原理,花点时间看下吧,网上也有很多教程,后续有时间我也会在公众号上分享 Dubbo 的源码。
22
2020
05

什么是事件冒泡?

当事件发生在DOM元素上时,该事件并不完全发生在那个元素上。在冒泡阶段,事件冒泡,或者事件发生在它的父代,祖父母,祖父母的父代,直到到达window为止。假设有如下的 HTML 结构:<div class="grandparent">  <div class="parent">    <div class="child">1</div>  </
22
2020
05

什么是事件传播?

当事件发生在DOM元素上时,该事件并不完全发生在那个元素上。在“冒泡阶段”中,事件冒泡或向上传播至父级,祖父母,祖父母或父级,直到到达window为止;而在“捕获阶段”中,事件从window开始向下触发元素 事件或event.target。事件传播有三个阶段:捕获阶段–事件从 window 开始,然后向下到每个元素,直到到达目标元素。目标阶段–事件已达到目标元素。冒泡阶段–事件从目标元素冒泡,然后上升到每个元素,直到到达 window。
22
2020
05

DOM 是什么?

DOM 代表文档对象模型,是 HTML 和 XML 文档的接口(API)。当浏览器第一次读取(解析)HTML文档时,它会创建一个大对象,一个基于 HTM L文档的非常大的对象,这就是DOM。它是一个从 HTML 文档中建模的树状结构。DOM 用于交互和修改DOM结构或特定元素或节点。假设我们有这样的 HTML 结构:<!DOCTYPE html><html lang="en"><head>   <meta char
22
2020
05

使用 + 或一元加运算符是将字符串转换为数字的最快方法吗?

根据MDN文档,+是将字符串转换为数字的最快方法,因为如果值已经是数字,它不会执行任何操作。
22
2020
05

|| 运算符能做什么

||也叫或逻辑或,在其操作数中找到第一个真值表达式并返回它。这也使用了短路来防止不必要的工作。在支持 ES6 默认函数参数之前,它用于初始化函数中的默认参数值。console.log(null || 1 || undefined); // 1function logName(name) {  var n = name || "Mark";  console.log(n);}logName(); // "Mark"
22
2020
05

&& 运算符能做什么

&& 也可以叫逻辑与,在其操作数中找到第一个虚值表达式并返回它,如果没有找到任何虚值表达式,则返回最后一个真值表达式。它采用短路来防止不必要的工作。console.log(false && 1 && []); // falseconsole.log(" " && true && 5); // 5使用if语句const router: Router = Router();router.get(
22
2020
05

undefined 和 null 有什么区别?

在理解undefined和null之间的差异之前,我们先来看看它们的相似类。它们属于 JavaScript 的 7 种基本类型。 let primitiveTypes = ['string','number','null','undefined','boolean','symbol', 'bigint'];它们是属于虚值,可以使用Boolean(value)或!!value将
22
2020
05

有哪些方法可以处理 JS 中的异步代码?

回调Promiseasync/await还有一些库:async.js, bluebird, q, co
22
2020
05

函数表达式和函数声明之间有什么区别?

看下面的例子:hoistedFunc();notHoistedFunc();function hoistedFunc(){  console.log("注意:我会被提升");}var notHoistedFunc = function(){  console.log("注意:我没有被提升");}notHoistedFunc调用抛出异常:Uncaught TypeError: notHoistedFunc is not a functio
22
2020
05

调用函数,可以使用哪些方法?

在 JS 中有4种方法可以调用函数。作为函数调用——如果一个函数没有作为方法、构造函数、apply、call 调用时,此时 this 指向的是 window 对象(非严格模式)  //Global Scope  function add(a,b){    console.log(this);    return a + b;  }  add(1,5); // 打印 "window" 对象和 6&n
22
2020
05

什么是缓存及它有什么作用?

缓存是建立一个函数的过程,这个函数能够记住之前计算的结果或值。使用缓存函数是为了避免在最后一次使用相同参数的计算中已经执行的函数的计算。这节省了时间,但也有不利的一面,即我们将消耗更多的内存来保存以前的结果。
22
2020
05

手动实现缓存方法

function memoize(fn) {  const cache = {};  return function (param) {    if (cache[param]) {      console.log('cached');      return cache[param];    } else {      let
22
2020
05

为什么typeof null 返回 object?如何检查一个值是否为 null?

typeof null == 'object'总是返回true,因为这是自 JS 诞生以来null的实现。曾经有人提出将typeof null == 'object'修改为typeof null == 'null',但是被拒绝了,因为这将导致更多的bug。我们可以使用严格相等运算符===来检查值是否为null。function isNull(value){  return value === null;}
22
2020
05

new 关键字有什么作用?

new关键字与构造函数一起使用以创建对象在JavaScript中。下面看看例子:function Employee(name, position, yearHired) {  this.name = name;  this.position = position;  this.yearHired = yearHired;};const emp = new Employee("Marko Polo", "Software Develope
22
2020
05

你能解释一下 ES5 和 ES6 之间的区别吗?

ECMAScript 5(ES5):ECMAScript 的第 5 版,于 2009 年标准化。这个标准已在所有现代浏览器中完全实现。ECMAScript 6(ES6)或 ECMAScript 2015(ES2015):第 6 版 ECMAScript,于 2015 年标准化。这个标准已在大多数现代浏览器中部分实现。以下是 ES5 和 ES6 之间的一些主要区别:箭头函数和字符串插值:const greetings = (name) => { return `hello ${na
22
2020
05

如何检查一个数字是否为整数?

检查一个数字是小数还是整数,可以使用一种非常简单的方法,就是将它对 1 进行取模,看看是否有余数。function isInt(num) { return num % 1 === 0;}console.log(isInt(4)); // trueconsole.log(isInt(12.2)); // falseconsole.log(isInt(0.3)); // false
22
2020
05

JavaScript 中的 let 关键字有什么用?

除了可以在函数级别声明变量之外,ES6 还允许你使用 let 关键字在代码块({..})中声明变量。
22
2020
05

解释事件冒泡以及如何阻止它?

事件冒泡是指嵌套最深的元素触发一个事件,然后这个事件顺着嵌套顺序在父元素上触发。防止事件冒泡的一种方法是使用 event.cancelBubble 或 event.stopPropagation()(低于 IE 9)。
22
2020
05

解释 JavaScript 中的值和类型。

JavaScript提供两种数据类型: 基本数据类型和引用数据类型基本数据类型有:StringNumberBooleanNullUndefinedSymbol引用数据类型有:ObjectArrayFunction
22
2020
05

编写一个可以执行如下操作的函数。

var addSix = createBase(6);addSix(10); // 返回 16addSix(21); // 返回 27可以创建一个闭包来存放传递给函数 createBase 的值。被返回的内部函数是在外部函数中创建的,内部函数就成了一个闭包,它可以访问外部函数中的变量,在本例中是变量 baseNumber。function createBase(baseNumber) { return function(N) { // 我们在这里访问 baseNumber,即
22
2020
05

解释 JavaScript 中的 null 和 undefined。

JavaScript 中有两种底层类型:null 和 undefined。它们代表了不同的含义:尚未初始化:undefined;空值:null。null和undefined是两个不同的对象, 有图为证:
22
2020
05

“use strict”的作用是什么?

use strict 出现在 JavaScript 代码的顶部或函数的顶部,可以帮助你写出更安全的 JavaScript 代码。如果你错误地创建了全局变量,它会通过抛出错误的方式来警告你。例如,以下程序将抛出错误:function doSomething(val) { "use strict";  x = val + 10;}它会抛出一个错误,因为 x 没有被定义,并使用了全局作用域中的某个值对其进行赋值,而 use strict 不允许这样做。
22
2020
05

解释什么是回调函数,并提供一个简单的例子。

回调函数是可以作为参数传递给另一个函数的函数,并在某些操作完成后执行。下面是一个简单的回调函数示例,这个函数在某些操作完成后打印消息到控制台。function modifyArray(arr, callback) { // 对 arr 做一些操作 arr.push(100); // 执行传进来的 callback 函数 callback();}var arr = [1, 2, 3, 4, 5];modifyArray(arr, function() {&n
22
2020
05

解释 JavaScript 中的相等性。

JavaScript 中有严格比较和类型转换比较:严格比较(例如 ===)在不允许强制转型的情况下检查两个值是否相等;抽象比较(例如 ==)在允许强制转型的情况下检查两个值是否相等。var a = "42";var b = 42;a == b; // truea === b; // false一些简单的规则:如果被比较的任何一个值可能是 true 或 false,要用 ===,而不是 ==;如果被比较的任何一个值是这些特定值(0、“”或 []),要用 ===,而不是 ==;在
22
2020
05

JavaScript 中的作用域(scope)是指什么?

在 JavaScript 中,每个函数都有自己的作用域。作用域基本上是变量以及如何通过名称访问这些变量的规则的集合。只有函数中的代码才能访问函数作用域内的变量。同一个作用域中的变量名必须是唯一的。一个作用域可以嵌套在另一个作用域内。如果一个作用域嵌套在另一个作用域内,最内部作用域内的代码可以访问另一个作用域的变量。
22
2020
05

JavaScript 中的强制转型是指什么?

在 JavaScript 中,两种不同的内置类型间的转换被称为强制转型。强制转型在 JavaScript 中有两种形式:显式和隐式。这是一个显式强制转型的例子:var a = "42";var b = Number( a );a; // "42"b; // 42 -- 是个数字!这是一个隐式强制转型的例子:var a = "42";var b = a * 1; // "42" 隐式转型成 42 a; //
21
2020
05

解释for-in循环?

for-in循环用于循环对象的属性。for-in循环的语法是:在每次循环中,来自对象的一个属性与变量名相关联,循环继续,直到对象的所有属性都被耗尽。
21
2020
05

描述JavaScript中的匿名函数?

被声明为没有任何命名标识符的函数被称为匿名函数。一般来说,匿名函数在声明后无法访问。匿名函数声明:
21
2020
05

call()和.apply()之间有什么区别?

函数.call()和.apply()在使用上非常相似,只是有一点区别。当程序员知道函数参数的编号时,使用.call(),因为它们必须在调用语句中被提及为参数。另一方面,当不知道数字时使用.apply(),函数.apply()期望参数为数组。.call()和.apply()之间的基本区别在于将参数传递给函数。它们的用法可以通过给定的例子进行说明。
21
2020
05

定义事件冒泡?

JavaScript允许DOM元素嵌套在一起。在这种情况下,如果单击子级的处理程序,父级的处理程序也将执行同样的工作。
21
2020
05

什么样的布尔运算符可以在JavaScript中使用?

“And”运算符(&&),'Or'运算符(||)和'Not'运算符(!)可以在JavaScript中使用。*运算符没有括号。
21
2020
05

如何分配对象属性?

将属性分配给对象的方式与赋值给变量值相同。例如,表单对象的操作值以下列方式分配为“‘submit”:Document.form.action =“submit”
21
2020
05

在JavaScript中读取和写入文件的方法是什么?

可以通过使用JavaScript扩展(从JavaScript编辑器运行),打开文件的示例来完成:fh = fopen(getScriptPath(), 0);
21
2020
05

在JavaScript中如何使用DOM?

DOM代表文档对象模型,并且负责文档中各种对象的相互交互。DOM是开发网页所必需的,其中包括诸如段落,链接等对象。可以操作这些对象以包括添加或删除等操作,DOM还需要向网页添加额外的功能。除此之外,API的使用比其他更有优势。
21
2020
05

JavaScript中如何使用事件处理程序?

事件是由用户生成活动(例如单击链接或填写表单)导致的操作。需要一个事件处理程序来管理所有这些事件的正确执行。事件处理程序是对象的额外属性。此属性包括事件的名称以及事件发生时采取的操作。
21
2020
05

解释延迟脚本在JavaScript中的作用?

默认情况下,在页面加载期间,HTML代码的解析将暂停,直到脚本停止执行。这意味着,如果服务器速度较慢或者脚本特别沉重,则会导致网页延迟。在使用Deferred时,脚本会延迟执行直到HTML解析器运行。这减少了网页加载时间,并且它们的显示速度更快。
21
2020
05

JavaScript中的各种功能组件是什么?

JavaScript中的不同功能组件是:First-class函数:JavaScript中的函数被用作第一类对象。这通常意味着这些函数可以作为参数传递给其他函数,作为其他函数的值返回,分配给变量,也可以存储在数据结构中。嵌套函数:在其他函数中定义的函数称为嵌套函数。
21
2020
05

decodeURI()和encodeURI()是什么?

EncodeURl()用于将URL转换为十六进制编码。而DecodeURI()用于将编码的URL转换回正常。
21
2020
05

如何在不支持JavaScript的旧浏览器中隐藏JavaScript代码?

在<script>标签之后的代码中添加“<! - ”,不带引号。在<script>标签之前添加“// - >”代码中没有引号。旧浏览器现在将JavaScript代码视为一个长的HTML注释。而支持JavaScript的浏览器则将“<! - ”和“// - >”作为一行注释。
21
2020
05

什么时候触发垃圾回收?

垃圾回收器周期性运行,如果分配的内存非常多,那么回收工作也会很艰巨,确定垃圾回收时间间隔就变成了一个值得思考的问题。IE6的垃圾回收是根据内存分配量运行的,当环境中的变量,对象,字符串达到一定数量时触发垃圾回收。垃圾回收器一直处于工作状态,严重影响浏览器性能。IE7中,垃圾回收器会根据内存分配量与程序占用内存的比例进行动态调整,开始回收工作。
21
2020
05

Java 的 的 XML 数据绑定是什么

答:Java 的 XML 绑定指从 XML 文件中创建类和对象,使用 Java 编程语言修改 XML 文档。XML绑定的 Java API,JAXB 提供了绑定 XML 文档和 Java 对象的便利方式。另一个可选的 XML 绑定方法是使用开源库,比如 XML Beans。Java 中 XML 绑定的一个最大的优势就是利用 Java编程能力创建和修改 XML 文档。以上的 XML 面试问答题收集自很多编程人员,但它们对于使用 XML 技术的每个人都是有用的。由于 XML 具有平台独立的特性,XP
21
2020
05

XML CDATA 是什么

答:这道题很简单也很重要,但很多编程人员对它的了解并不深。CDATA 是指字符数据,它有特殊的指令被 XML 解析器解析。XML 解析器解析 XML 文档中所有的文本,比如<name>Thisis name of person</name>,标签的值也会被解析,因为标签值也可能包含 XML 标签,比如<name><firstname>First Name</firstname></name>。CDATA 部分不会被 XML
21
2020
05

DOM 和 和 SAX 解析器有什么区别

答:这又是一道常见面试题,不仅出现在 XML 面试题中,在 Java 面试中也会问到。DOM 和SAX 解析器的主要区别在于它们解析 XML 文档的方式。使用 DOM 解析时,XML 文档以树形结构的形式加载到内存中,而 SAX 是事件驱动的解析器。这个问题更详细的回答查看 DOM和 SAX 解析器之间的区别。
21
2020
05

XML 命名空间是什么?它为什么很重要?

答:XML 命名空间与 Java 的 package 类似,用来避免不同来源名称相同的标签发生冲突。XML 命名空间在 XML 文档顶部使用 xmlns 属性定义,语法为 xmlns:prefix=’URI’。prefix 与XML 文档中实际标签一起使用。下面例子为 XML 命名空间的使用。<root xmlns:inst="http://instruments.com/inst"<inst:phone><inst:number>8373632
21
2020
05

什么是格式良好的 XML

答:这个问题经常在电话面试中出现。一个格式良好的 XML 意味着该 XML 文档语法上是正确的,比如它有一个根元素,所有的开放标签合适地闭合,属性值必须加引号等等。如果一个 XML 不是格式良好的,那么它可能不能被各种 XML 解析器正确地处理和解析。
21
2020
05

什么是 XML 元素和属性

答:最好举个例子来解释。下面是简单的 XML 片断。<Orders><Order id="123"><Symbol>6758.T</Symbol><Price>2300</Price><Order><Orders>例子中 id 是元素的一个属性,其他元素都没有属性。
21
2020
05

XSLT 是什么?

答:XSLT 也是常用的 XML 技术,用于将一个 XML 文件转换为另一种 XML,HTML 或者其他的格式。XSLT 为转换 XML 文件详细定义了自己的语法,函数和操作符。通常由 XSLT 引擎完成转换,XSLT 引擎读取 XSLT 语法编写的 XML 样式表或者 XSL 文件的指令。XSLT 大量使用递归来执行转换。一个常见 XSLT 使用就是将 XML 文件中的数据作为 HTML 页面显示。XSLT 也可以很方便地把一种 XML 文件转换为另一种 XML 文档
21
2020
05

XPath 是什么?

答:XPath 是用于从 XML 文档检索元素的 XML 技术。XML 文档是结构化的,因此 XPath 可以从 XML 文件定位和检索元素、属性或值。从数据检索方面来说,XPath与 SQL 很相似,但是它有自己的语法和规则。了解更多查看怎样使用 XPath 从 XML 文档中检索数据
21
2020
05

DTD 与 与 XML Schema 有什么区别?

答:DTD 与 XML Schema 有以下区别:DTD 不使用 XML 编写而 XML Schema 本身就是 xml 文件,这意味着XML解析器等已有的XML工具可以用来处理XML Schema。而且XML Schema 是设计于 DTD 之后的,它提供了更多的类型来映射 xml 文件不同的数据类型。DTD 即文档类型描述(Document Type definition)是定义 XML 文件结构的传统方式。
21
2020
05

单例模式的好处?如何实现单例模式?

好处:①封装了唯一性,可严格控制客户怎样访问以及何时访问; ②内存中只有一个对象,可节约系统资源,提高系统性能;如何实现:①将构造函数私有化 ②使用一个公开静态类 ③使用一个静态属性进行判断当前窗口是否被创建 public partial class DetailedWndow : Window {  //将构造函数私有化  private DetailedWndow(int qq)    {      &
21
2020
05

类和结构的区别?

类:属于引用类型,可有字段赋值,可继承和被继承,可有属性,有构造函数和析构函数 ;结构:属于值类型,没有字段赋值,不能继承和被继承,没有属性,没有构造函数但可以添加,没有析构函数
21
2020
05

请描述Socket进行同步通讯编程的详细步骤?

服务端:①创建一个Socket属性,Socket();②绑定IP地址、端口等信息到Socket上,bind();③开启监听,listen();④接收客户端的连接,accept();⑤收发数据,send()和receive();⑥关闭网络连接;⑦关闭监听客户端:①创建一个Socket属性,Socket();②绑定IP地址、端口号等信息到Socket上,bind();③设置要连接的对方IP地址和端口号等属性;④连接服务器,connect();⑤收发数据,send()和receive();⑥关闭网络连
21
2020
05

…NET中的错误处理机制是什么?

采用 try-catch-finally结构,发生错误时,层层上抛,直到找到匹配的catch为止。
21
2020
05

请详细描述C#中的访问修饰符都有哪些?

private:私有成员,类内部可访问;protected:保护成员,类内部和继承类可访问;public:公开成员,没有访问限制;internal:同一程序集可访问;protected internal/internal protected:同一程序集和子类可访问
21
2020
05

名词解释SQL/XAML/XML/HTML/OOP/CTS/CLR/CLS

SQL:结构化查询语言(structured Query Language)XAML:可扩展应用程序标记语言(eXtensible Application Markup Language)XML:可扩展标记语言(eXtensible Markup Language)HTML:超文本标记语言(Hyper Text Markup Language)OOP:面向对象编程(Object Oriented Programming)CTS:通用类型系统(Common Type System)CLR:公共语言
21
2020
05

重写和重载的区别?

重写:当一个子类继承一个父类,而子类中的方法与父类中的方法名称、参数个数、参数类型一致时,就说明这个子类重写了父类的方法;重载:方法名称相同,参数类型不同。调用时,编译器会根据实际传入参数的形式,选择与其匹配的行。
21
2020
05

详细描述值类型和引用类型的异同?

值类型:存放在堆栈中,存储空间小,调用速度快,直接存储其值,从System.ValueType中派生,内存自动释放,简单类型,枚举,结构;引用类型:存放在堆中,存储空间大,调用速度慢,存储对值的引用,从System.Object中派生,由GC自动释放,接口类型,数组类型,委托类型;
21
2020
05

数组和集合的区别?

数组声明元素类型,集合不声明;数组定长,占用内存小,速度快,集合不定长,占用内存大,速度慢;数组存放类型只能是一种,集合不止一种
19
2020
05

你觉得用 Dubbo 好还是 Spring Cloud 好?

扩展性的问题,没有好坏,只有适合不适合,不过我好像更倾向于使用 Dubbo, Spring Cloud 版本升级太快,组件更新替换太频繁,配置太繁琐,还有很多我觉得是没有 Dubbo 顺手的地方……
19
2020
05

T-SQL语言包含哪三种常用语言?详细描述

数据定义语言(DDL):Data Definition Language,用来定义和管理数据库及其对象,例如:create、alter、drop等;数据操纵语言(DML):Data Manipulation Language,实现对数据库表,各对象的操作,例如:insert、update等;数据控制语言(DCL):Data Control Language,实现对数据库进行安全管理和权限管理等控制,例如:grant、revoke、deny等
19
2020
05

抽象类和接口的区别?

①抽象类可以实现成员,接口中的方法只能声明不能实现;②抽象类可以有字段,接口中没有字段,但有属性;③抽象类的成员可以使用公开或其他修饰符,而接口成员是隐式公开的,不需修饰;④抽象类不支持多重继承,而一个类可以实现多个接口
19
2020
05

详细描述三层架构开发模式以及三层架构的好处?

界面层:设计界面,与用户交互;业务逻辑层(BLL):维护界面层和数据访问层之间的安全性,对传送的数据进行判断分析,将正确值进行传送;数据访问层(DAL):主要是存放对数据类的访问,即对数据库的增删改查的操作;好处:目的是“高内聚,低耦合“的思想,分工明确,条理清晰,易于调试 ,而且具有可扩展性
19
2020
05

SQL中的左联接和右联接查询区别?

左联接:如果左表的某一行在右表中没有匹配行,则右联接的结果集行中,右表的所有选择列表均为空(上下排列);右联接:将返回表中的所有行,如果右表的某一行在左表中没有匹配行,则左表返回空值(左右排列)
19
2020
05

什么是SQL注入?应如何防止?

利用SQL关键字对网站进行攻击;防止:①通过存储过程执行所有查询; ②限制表单或查询字符串输入的长度
19
2020
05

SQL Server的聚合函数都有哪些?

Min():最小值 Max():最大值 Sum():总和 Avg():平均值 Count():总数distinct():去重 Having():重复记录
19
2020
05

叙述索引、视图、触发器、事务、存储过程?

索引:索引像书的目录,它提供了数据的逻辑,合理划分索引能够大大提高数据库性能;视图:视图是一种虚拟表,可对虚拟表进行增改查操作;触发器:触发器是一种特殊类型的存储过程,主要通过事件触发而被执行;事务:事务是指一个工作单元,它包含了一组数据操作命令,这组命令要么执行,要么不执行;存储过程:是指一组编译的SQL语句
19
2020
05

SQL Server数据库中的基本约束及其作用?

主键约束:确定表中的标识列,必须是非空唯一,一个表只有一个主键;唯一约束:确定这个字段的数据必须是唯一的,如果添加内容,内容不能重复;外键约束:确定表与表之间的联系;检查约束:确定这个字段中的数据特性;非空约束:确定这个字段的数据不能为空;默认约束:确定这个字段数据的默认值
19
2020
05

SQL Server是什么类型数据库,保证数据库的完整性都有什么?

常见的数据类型:网状模型、层次模型、关系模型SQL Server是一种关系型数据库;保证数据库完整性:实体完整性、区域完整性、参照完整性
19
2020
05

事务的四大特性?

原子性: 事务是一个整体的工作单元,事务对数据库所做的操作要么全部执行,要么全部取消,如果某条语句执行失败,那么所有语句全部回滚;一致性:完成事务时,所有数据必须一致;隔离性:由事务所做的修改必须与其他事务修改隔离;持久性:提交事务后,对数据库所做的修改就会永久性的保存下来。
19
2020
05

ADO.NET中读写数据库需用到哪些对象?作用是什么?

DataConnection 连接数据库DataCommand 执行语句命令DataSet 数据存储器DataAdapter 适配器,用于填充数据DataReader 数据读取器,用于向前只读的数据流
15
2020
05

什么是Cookie 隔离?(或者:请求资源的时候不要带cookie怎么做)

通过使用多个非主要域名来请求静态文件,如果静态文件都放在主域名下,那静态文件请求的时候带有的cookie的数据提交给server是非常浪费的,还不如隔离开。因为cookie有域的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会带有cookie数据,这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。同时这种方式不会将cookie传入server,也减少了server对cookie的处理分析环节,提高了server的http请求的解析速度。
15
2020
05

有效的javascript变量定义规则

第一个字符必须是一个字母、下划线(_)或一个美元符号($);其他字符可以是字母、下划线、美元符号或数字。
15
2020
05

Ajax请求的页面历史记录状态问题?

(1)通过location.hash记录状态,让浏览器记录Ajax请求时页面状态的变化。(2)通过HTML5的history.pushstate,来实现浏览器地址栏的无刷新改变。
15
2020
05

可视区的大小:

(1)innerXXX(不兼容ie)window.innerHeight 可视区高度,包含滚动条宽度window.innerWidth 可视区宽度,包含滚动条宽度(2)document.documentElement.clientXXX(兼容ie)document.documentElement.clientWidth可视区宽度,不包含滚动条宽度document.documentElement.clientHeight可视区高度,不包含滚动条宽度
15
2020
05

”==”和“===”的不同

答案:前者会自动转换类型,再判断是否相等后者不会自动类型转换,直接去比较
15
2020
05

form标签上定义请求类型的是哪个属性?定义请求地址的是哪个属性?

答:form表单定义请求类型的是  method 属性  , 定义请求地址的是  action属性
15
2020
05

请至少写出5个H5的新标签

答: header  nav  footer canvas datalist  article  mark 
15
2020
05

很多网站不常用table iframe这两个元素,知道原因吗?

因为浏览器页面渲染的时候是从上至下的,而table 和 iframe 这两种元素会改变这样渲染规则,他们是要等待自己元素内的内容加载完才整体渲染。用户体验会很不友好。
15
2020
05

请写出table标签下面会包含哪些标签元素

答: tr th  td  thead  tbody  tfoot 等
15
2020
05

请写出至少5个HTML行内元素标签

答:span  a  i  label  img  input  button  textarea select 等
15
2020
05

请写出至少5个HTML块元素标签

答: div  p  ul  li  table  h1 h2 h3 ... h6  form 等 
15
2020
05

写出5条Firefox和IE的脚本兼容问题?

绑定监听:IE是attatchEvent()  、 firefox是addEventListener();计算样式:IE是computedStyle、 firefox是getComputedSyle();滚动事件:IE是MouseWheel、 firefox是onmousewheel表单元素:IE是 document.forms(”formname”) , firefox是document.forms["formname"]事件对象: IE是window.event
15
2020
05

在网页设计与制作时,为了使制作出来的网页下载速度快、布局合理、浏览方便、和谐悦目,应注意哪些问题?

1.网页文件大小2.页面布局3.页面导航4.图像大小5.颜色搭配6.背景图像
15
2020
05

一个网页制作完成后,在发布之前,我们会对页面进行测试,测试内容主要包括哪几个方面?

兼容性、js特效的bug、流畅度、加载速度的测试。
15
2020
05

请列举IE6的一些Bug的解决办法。

双倍margin:浮动的方向设置的和marign方便不相同即可。有链接的图片的边框:img{border:none}即可。3px bug :给容器设置display:inline-block即可。overflow:hidden失效,用zoom:1;来解决。
15
2020
05

以下链接到电子邮件的正确格式是:

(B) A.<a href=”mailto://123@abcd.com”>邮箱</a>B.<a href=”mailto:123@abcd.com”>邮箱</a>C.<a href=”#mailto:123@abcd.com”>邮箱</a>D.<a href=”mail to://123@abcd.com”>邮箱</a><a href="mailto:123@email.c
15
2020
05

CSS的伪类有哪些?有什么作用?在各个浏览器下都兼容吗?

:hover、:visited、:link、:active。link没有点击的visited:点击过的hover悬停的active是按下那一瞬间。都兼容,但是要按照“爱恨准则”link、visited、hover、active放置。
15
2020
05

谈谈对CSS Sprites技术优缺点的理解。

CSS精灵技术,优点就是减少HTTP的请求数量,加快网页渲染速度。便于一整套更换,比如圣诞节了,此时可以改变CSS中的各种按钮、logo变成圣诞风格,一下子全变了。缺点就是不能随意改变之前已经在精灵上面的图片的位置,做repeat-x、repeat-y精灵难以实现。
15
2020
05

下面哪一个属性可以在新窗口打开一个链接

(B) A. _parent    B. _blank     C. _self      D. _top
15
2020
05

写一段CSS代码,让Chrome支持小于12px的文字。

font-size:12px; -webkit-transform:scale(0.8);
15
2020
05

在HTML页面中,position的默认值是什么?

static。
15
2020
05

定位的值有哪几种?区别是什么?

absolute:绝对定位。使用left,right,top,bottom等属性相对于其最接近的一个最有定位设置的父对象进行绝对定位。如果不存在这样的父对象,则依据body对象。而其层叠通过z-index属性定义。当对象定位在浏览器窗口以外,浏览器因此显示滚动条。 relative:相对定位。将依据left,right,top,bottom等属性在正常文档流中偏移位置。当对象定位在浏览器窗口以外,浏览器因此显示滚动条。 static:元素框正常生成。块级元素生成一个矩形框,作
15
2020
05

如何解决IE6下select优先级高于div而导致的无法遮盖问题?

再写一个div,用此div盖住select。当select应该出现的时候,此时让div盖住它。
15
2020
05

请解释一下CSS的优先级,并说明优先级如何计算?

当多个选择器定义了同一个属性为不同值,根据优先级来确定以谁为准。id最大,类第二,标签名第三。数个数即可。比如:#box ul li.spec  权重就是(1,1,2)#box ul li权重就是(1,0,2)如果是继承,权重是0。如果都是继承,有“就近原则”。
15
2020
05

请用div+css简单写出一段“返回顶部”的悬浮效果。

<a name="top"></a>........<div class="top">    <a href="#top"></a></div> 样式:.top{position:fixed;right:20px;bottom:20px;width:100px;height:100px;}
15
2020
05

介绍你所知道的CSS hack技巧。

hack就是浏览器留的后门,方便对这一个版本的浏览器单独定义样式,_ 和 - 针对IE6,*width、+width用于IE7及以下。color:red\0; 是IE8、9、10的hack。color:red\9\0:是IE9、10的hask还有HTML中:<!--[if lte IE 7]> 代码 <![endif]-->
15
2020
05

标签的定义与用法,你常用的DOCTYPE是什么?

用在html标签之前,定义是HTML什么版本和XHTML什么版本。我常用<!DOCTYPE html>是html5的声明头。Strict版本不能使用b、u、itransitional版本可以使用b、u、i,所以HTML4中我经常使用这个。
15
2020
05

介绍盒子模型,说说标准盒子模型和IE盒子模型有什么区别,以及触发不同模型的条件?

标准盒子模型padding、margin外扩IE盒子模型是padding、marign内减。如同写上了box-sizing:border-box; width=content+padding+border要加上标准DTD,可以让IE使用标准盒子模型。去掉DTD此时浏览器叫做Quirk(怪异模式)。 
15
2020
05

当p的元素设置为bold时,以下哪条CSS语句的说法是正确的

(D)                                    A.<p style=”text-size:bold;”> B.<p style=”font-size:bold;”>C.p{text-size:bold;}D.p{font-weight:bold
15
2020
05

定义一个div,在IE8下高度为100px,在IE7下为120px,在IE6下为140px。

height:120px;-height:140px;height:100px\0;还有HTML的hack:<!--[if lt IE 7]><!--您的代码--><![endif]-->
15
2020
05

列举CSS中position的参数和作用?

四种定位:absolute、relative、fixed、static。展开说三种定位的参考点是什么。absolute:绝对定位。使用left,right,top,bottom等属性相对于其最接近的一个最有定位设置的父对象进行绝对定位。如果不存在这样的父对象,则依据body对象。而其层叠通过z-index属性定义。当对象定位在浏览器窗口以外,浏览器因此显示滚动条。 relative:相对定位。将依据left,right,top,bottom等属性在正常文档流中偏移位置。当对象定位在浏览
15
2020
05

Form中的input可以设置readonly和disable,请问这两项属性有什么区别?

readonly表示只读,  不能更改元素内容。仅仅能作用在text/password/textarea上面。disabled表示不可用,能作用在所有控件上面,比如select、radio、checkbox。
15
2020
05

img src=”name” align=”left”的意思是?

(A)A.图像对于周围的文本左对齐B.图像对于周围的文本右对齐C.图像对于周围的文本底部对齐D.图像对于周围的文本顶部对齐
15
2020
05

&nbsp;&nbsp;前端工程师html&nbsp;&nbsp; 以上代码中不合理的部分有哪些?

首先如果要空格,应该使用css中的text-indent:2em; 并且如果要换行,应该使用语义标签p。非要用br,也要写<br />,而不是标签对儿。
15
2020
05

font-size:62.5%,解释一下如此设计字体大小的原因?

因为默认情况下html标签的默认字号是16px,此时如果取默认,那么1em就是16px,此时fotn-size:62.5%; 此时就能将HTML这个根元素的字号变为10px。此时页面上所有元素的尺寸就方便计算了。但是62.5%逐步退出了历史舞台,因为Chrome30版本不支持12px以下的字号了。
15
2020
05

下面哪一个是&的符号码

(B) A.&quot       B.&amp     C.&comp       D.&nbsp
15
2020
05

下面哪一个标签可以产生一个回车换行

(b) A.<hr>     B.<br>     C.<tr>     D.<tl>
15
2020
05

rem为什么可以缩放,以什么为基准?

rem以html的字号为基准,比如2rem,而html的字号是16px,此时2rem就是32px。写一段JS让html根元素的字号随着浏览器宽度的变化而等比例变化,此时造成页面等比例缩放的现象。
15
2020
05

清除浮动和闭合浮动的不同点?

设置高度的元素叫做闭合浮动。清除浮动回答清除浮动的5种方法即可。
15
2020
05

标签上的alt与title属性区别是什么?

alt是alternate的简写,当图片不可以显示的时候的替代文本title是a、img、label等等标签的悬浮提示文本。
15
2020
05

给文字添加阴影用哪个属性?

text-shadow:1px 1px 1px red;
15
2020
05

如何区别CSS中的display:none和visibility:hidden?

display:none; 释放了自己的位置,后面的元素会上来占据现有位置,并且如果内部有img元素,此时img元素不会加载;visibility:hidden如同opacity:0;只是不可见了,位置还是保留的。
15
2020
05

你如何理解HTML的语义化?能否接触或了解重构?

根据语义来选择合适的标签,而不是表现形式。HTML只负责语义,不是说要加粗了,就放一个h,只是可以让开发者能写出优雅的代码,并且利于SEO。网页重构指的是将Table布局的网页变为标准DIV+CSS代码,让结构和表现分离,方便维护
15
2020
05

一个页面(HTML)由哪几部分构成?分别是什么?作用是什么?

由head和body构成。head里面放置一些配置信息,比如配置title、keyword、description、charset等等信息,不会显示在浏览器中。body是内容,会显示在浏览器的屏幕中。
15
2020
05

在HTML代码中如何做SEO?

1.h标签合理使用,strong标签语义比较强,合理使用。2.title、<meta name="description" />、<meta name="keywords" />要合理设置3.a标签要写title,img要写alt4.div要有合理类名,比如.content、.header、.address,便于搜索引擎爬虫检索5.HTML层次清晰,id不要重复,便于搜索引擎爬虫检索
15
2020
05

以下有若干个CSS选择器,请给出他们的优先级顺序。 div h1、 #div h1、 div h1 #_h、 div h1.c_h

div h1权重(0,0,2)#div h1权重(1,0,1)div h1 #_h权重(1,0,2)  这个最大div h1.c_h  权重(0,1,2) 
15
2020
05

请解释浏览器是如何根据CSS选择器选择对应元素的?

#表示id,浏览器会寻找拥有id的元素。.表示类名class属性,空格表示后代,> 表示子元素, + 表示下一个兄弟 , ~ 后面所有兄弟。
15
2020
05

CSS层叠是什么?

CSS全名叫做层叠式样式表,cascading style sheet,cascading就是层叠的意思。层叠具体有两层含义:1) 比如一个标签它可以通过多种手段给他添加属性。<h1 id="logo" class="spec"></h1>#logo{}.spec{}h1{}body{}此时这个标签就被多个选择器添加属性,如果属性有冲突,CSS有精确的权重计算方法来确定“听谁的”。2) 一个选择器可以同时作用在多个标签身上,比如同一
15
2020
05

简述一下什么是内容与表现分离。

HTML就是负责语义,其他什么都不需要管。HTML不要用b、u、i来设置加粗、下划线、倾斜,而是写font-weight:bold;  text-decoration:underline; font-style:italic; 用CSS来表示。再比如,logo可以用h1,用背景替换文字来呈递图片。text-indent:-999em;CSS负责样式,不要写行内样式。
15
2020
05

在书写高效CSS时,需要考虑哪些问题?

基本原则是:去掉不必要的样式、合并相同的样式、尽可能缩小样式的大小、多用公共类、让css变得不臃肿。我在工作中,经常使用gulp中有一个插件叫做gulp-csso,可以智能合并相同的样式,比如div p{font-size:10px;color:green;}  p{color:green;} 它会智能变为:div p{font-size:10px;}  p{color:green;}。
15
2020
05

CSS引入的方法有哪些?都有什么区别?

外链式(也叫作外联式)<link href="1.css" type="text/css" rel="stylesheet" />内嵌式(也叫作内联式)<style type="text/css"></style>导入式<style>@import url(1.css)</style>行内式<div style="width:200px;ba
15
2020
05

行内元素和块级元素的区别,行内元素有哪些,块级元素有哪些?

行内元素不能设置宽度、高度,但是能并排显示,浏览器视行内元素是“文本流元素”。span、a、em、b、u、i。块级元素能设置宽度、高度,但是不能并排显示。div、h1、ul、p、li、section、header。
15
2020
05

简单说明绝对定位和浮动的区别和应用。

绝对定位脱离标准文档流,它的参考点是文档的左上角或者右上角。如果有任何父元素有定位属性,此时就依据“子绝父相”规则来设置自己的定位参考元素。在做网页时候非常的灵活方便。制作覆盖效果的时候,会大量使用绝对定位。浮动脱离标准文档流,通常用于制作并排显示的元素,通常用于大的布局,或者无序列表比如图片的并排。可以使用clear:both属性让标准流中的其他元素在此之后依次排列。
15
2020
05

描述一下浮动会造成什么影响,如何居中一个浮动元素?

【脱标】浮动的元素脱离标准文档流,【贴边】左浮动就会贴左边,又浮动贴右边,贴上一个兄弟元素的边,【字围】字会环绕这个浮动元素,【收缩】不区分行内元素和块级元素了,原来的行内元素现在可以设置宽度、高度,原来的块级元素如果不写width现在会自动缩减为内容宽度。浮动的元素要想居中,必须相对定位。相对定位利用margin-left:50%; left:-宽度一半。原理就是margin-left:50%;此时元素的左边线就会到屏幕中线,拉回自己的width一半即可。所以要用相对定位拉动。或者transf
15
2020
05

如何清除一个标签的子标签的浮动?

清除浮动的几种方法:1.父元素有高度,此时就没有浮动的影响了2.父元素如果不愿意设置固定死的高度,而是自动适配,就写overflow:hidden;_zoom:1;3.后面的元素父盒子加上clear:both;盒子还是没有高度,margin失效;4.两个盒子之前加上一个<div class="cl"></div>   .cl{clear:both},隔墙法,盒子还是没有高度。5.盒子加上::after{content:""
07
2020
05

谈一下领域驱动设计

主要关注核心领域逻辑。基于领域的模型检测复杂设计。这涉及与公司层面领域方面的专家定期合作,以解决与领域相关的问题并改进应用程序的模型。在回答这个微服务面试问题时,您还需要提及DDD的核心基础知识。他们是:DDD主要关注领域逻辑和领域本身。复杂的设计完全基于领域的模型。为了改进模型的设计并解决任何新出现的问题,DDD不断与公司领域方面的专家合作。
07
2020
05

PACT如何运作?

PACT是一个开源工具。它有助于测试消费者和服务提供商之间的互动。消费者服务开发人员首先编写一个测试,该测试定义了与服务提供者的交互模式。测试包括提供者的状态,请求正文和预期的响应。基于此,PACT创建了一个针对其执行测试的存根。输出存储在JSON文件中。
07
2020
05

为什么人们会犹豫使用微服务?

我见过许多开发者在这个问题上摸索。毕竟,在面试微服务架构师角色时,他们会被问到这个问题,所以承认它的缺点可能有点棘手。以下是一些很好的答案:它们需要大量协作 - 微服务需要大量的合作。不同的微服务模块,可能分散在不同的团队,团队之间需要始终保持良好的同步。他们需要建立繁重的架构 - 系统是分布式的,架构涉及很多。他们需要过多的计划来处理操作开销 - 如果您计划使用微服务架构,则需要为操作开销做好准备。需要熟练的专业人员,他们可以支持异构分布的微服务。
07
2020
05

为什么在微服务中需要Reports报告和Dashboards仪表板?

报告和仪表板主要用于监视和维护微服务。有多种工具可以帮助实现此目的。报告 和仪表板可用于:找出哪些微服务公开了哪些资源。找出组件发生变化时受影响的服务。提供一个简单的点,只要需要文档,就可以访问它。部署的组件的版本。
07
2020
05

为什么要选择微服务架构?

这是一个非常常见的微服务面试问题,你应该准备好了!微服务架构提供了许多优点。这里有几个:微服务可以轻松适应其他框架或技术。单个进程的失败不会影响整个系统。为大企业和小型团队提供支持。可以在相对较短的时间内独立部署。
07
2020
05

如何设置服务发现?

有多种方法可以设置服务发现。我将选择我认为效率最高的那个,Netflix的Eureka。这是一个简单的程序,不会对应用程序造成太大影响。此外,它支持多种类型的Web应用程序。Eureka配置包括两个步骤 - 客户端配置和服务器配置。使用属性文件可以轻松完成客户端配置。在clas spath中,Eureka搜索一个eureka-client.properties文件。它还搜索由特定于环境的属性文件中的环境引起的覆盖。对于服务器配置,您必须首先配置客户端。完成后,服务器启动一个客户端,该客户端用于查
07
2020
05

什么是Semantic监控?

它结合了对整个应用程序的监控以及自动化测试。语义监控的主要好处是找出对您的业务更有利可图的因素。从业务角度来看,语义监控以及服务层监控可以监控微服务。一旦检测到问题,它们就可以实现更快的隔离和 错误分类,从而减少修复所需的主要时间。它对服务层和事务层进行分类,以确定受可用性或性能不佳影响的事务。
07
2020
05

微服务的端到端测试意味着什么?

端到端测试 验证工作流中的所有流程,以检查一切是否按预期工作。它还确保系统以统一的方式工作,从而满足业务需求。
07
2020
05

Spring Boot支持哪些嵌入式容器?

无论何时创建Java应用程序,都可以通过两种方法进行部署:使用外部的应用程序容器。将容器嵌入jar文件中。Spring Boot包含Jetty,Tomcat和Undertow服务器,所有服务器都是嵌入式的。Jetty - 用于大量项目,Eclipse Jetty可以嵌入到框架,应用程序服务器,工具和集群中。Tomcat - Apache Tomcat是一个开源JavaServer Pages实现,可以很好地与嵌入式系统配合使用。Undertow - 一个灵活而突出的Web服务器,它使用小型单一处
07
2020
05

如何在Spring Boot应用程序中实现Spring安全性?

实施需要最少的配置。您需要做的就是spring-boot-starter-security在pom.xml文件中添加starter。您还需要创建一个Spring配置类,它将覆盖所需的方法,同时扩展 WebSecurityConfigurerAdapter 应用程序中的安全性。这是一些示例代码:<pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, "Courier New",
07
2020
05

Actuator在Spring Boot中的作用

它是最重要的功能之一,可帮助您访问在生产环境中运行的应用程序的当前状态。有多个指标可用于检查当前状态。它们还为RESTful Web服务提供端点,可以简单地用于检查不同的度量标准。
07
2020
05

什么是Spring Boot?

Spring boot是微服务面试问题的主要话题。随着新功能的加入,Spring变得越来越复杂。无论何时启动新项目,都必须添加新的构建路径或Maven依赖项。简而言之,你需要从头开始做每件事。Spring Boot是一种帮助您避免所有代码配置的解决方案。
07
2020
05

如何覆盖Spring Boot项目的默认属性?

这可以通过在application.properties文件中指定属性来完成。例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来完成。对于后缀 - spring.mvc.view.suffix: .jsp对于前缀 - spring.mvc.view.prefix: /WEB-INF/
06
2020
05

Bean 工厂和 Application contexts 有什么区别?

Application contexts提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜像),它们可以向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。
06
2020
05

什么是Spring框架?

Spring是一种轻量级框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。Spring官网(https://s
06
2020
05

列举一些重要的Spring模块?

下图对应的是Spring 4.x的版本,目前最新的5.x版本中Web模块的Portlet组件已经被废弃掉,同时增加了用于异步响应式处理的WebFlux组件。Spring Core:基础,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。Spring Aspects:该模块为与AspectJ的集成提供支持。Spring AOP:提供面向方面的编程实现。Spring JDBC:Java数据库连接。Spring JMS:Java消息服务。Spring ORM:用于支持Hiber
06
2020
05

谈谈自己对于Spring IOC和AOP的理解

IOCIOC(Inversion Of Controll,控制反转)是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂
06
2020
05

Spring中的单例bean的线程安全问题了解吗?

大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。有两种常见的解决方案:1.在bean对象中尽量避免定义可变的成员变量(不太现实)。2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中(推荐的一种方式)。
06
2020
05

Spring中的bean的作用域有哪些?

1.singleton:唯一bean实例,Spring中的bean默认都是单例的。2.prototype:每次请求都会创建一个新的bean实例。3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经
06
2020
05

Spring AOP和AspectJ AOP有什么区别?

Spring AOP是属于运行时增强,而AspectJ是编译时增强。Spring AOP基于代理(Proxying),而AspectJ基于字节码操作(Bytecode Manipulation)。Spring AOP已经集成了AspectJ,AspectJ应该算得上是Java生态系统中最完整的AOP框架了。AspectJ相比于Spring AOP功能更加强大,但是Spring AOP相对来说更简单。如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择AspectJ,它比Sp
06
2020
05

Spring中的bean生命周期?

1.Bean容器找到配置文件中Spring Bean的定义。2.Bean容器利用Java Reflection API创建一个Bean的实例。3.如果涉及到一些属性值,利用set()方法设置一些属性值。4.如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。6.如果Bean实现了BeanF
06
2020
05

说说自己对于Spring MVC的了解?

谈到这个问题,我们不得不提提之前Model1和Model2这两个没有Spring MVC的时代。Model1时代:很多学Java比较晚的后端程序员可能并没有接触过Model1模式下的JavaWeb应用开发。在Model1模式下,整个Web应用几乎全部用JSP页面组成,只用少量的JavaBean来处理数据库连接,访问等操作。这个模式下JSP即是控制层又是表现层。显而易见,这种模式存在很多问题。比如将控制逻辑和表现逻辑混杂在一起,导致代码重用率极低;又比如前端和后端相互依赖,难以进行测试并且开发效率
06
2020
05

Spring MVC的工作原理了解嘛?

流程说明: 1.客户端(浏览器)发送请求,直接请求到DispatcherServlet。 2.DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。 3.解析到对应的Handler(也就是我们平常说的Controller控制器)。 4.HandlerAdapter会根据Handler来调用真正的处理器来处理请求和执行相对应的业务逻辑。 5.处理器处理完业务后,会返回一个ModelAndV
06
2020
05

Spring框架中用到了哪些设计模式

1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。2.代理设计模式:Spring AOP功能的实现。3.单例设计模式:Spring中的bean默认都是单例的。4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。
06
2020
05

@Component和@Bean的区别是什么

1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到
06
2020
05

将一个类声明为Spring的bean的注解有哪些?

我们一般使用@Autowired注解去自动装配bean。而想要把一个类标识为可以用@Autowired注解自动装配的bean,可以采用以下的注解实现:1.@Component注解。通用的注解,可标注任意类为Spring组件。如果一个Bean不知道属于哪一个层,可以使用@Component注解标注。2.@Repository注解。对应持久层,即Dao层,主要用于数据库相关操作。3.@Service注解。对应服务层,即Service层,主要涉及一些复杂的逻辑,需要用到Dao层(注入)。4.@Cont
06
2020
05

Spring事务管理的方式有几种?

1.编程式事务:在代码中硬编码(不推荐使用)。2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。
06
2020
05

Spring事务中的隔离级别有哪几种?

在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻
06
2020
05

Spring事务中有哪几种事务传播行为?

在TransactionDefinition接口中定义了八个表示事务传播行为的常量。支持当前事务的情况:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。不支持当前事务的情况:P
06
2020
05

介绍一下 WebApplicationContext

WebApplicationContext 是 ApplicationContext 的扩展。它具有 Web 应用程序所需的一些额外功能。它与普通的 ApplicationContext 在解析主题和决定与哪个 servlet 关联的能力方面有所不同。
06
2020
05

描述一下 DispatcherServlet 的工作流程

DispatcherServlet 的工作流程可以用一幅图来说明:向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以HandlerExecutionC
06
2020
05

Spring MVC 框架有什么用?

Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。 MVC 模式有助于分离应用程序的不同方面,如输入逻辑,业务逻辑和 UI 逻辑,同时在所有这些元素之间提供松散耦合。
06
2020
05

什么是编织(Weaving)?

为了创建一个 advice 对象而链接一个 aspect 和其它应用类型或对象,称为编织(Weaving)。在 Spring AOP 中,编织在运行时执行。请参考下图:
06
2020
05

如何理解 Spring 中的代理?

将 Advice 应用于目标对象后创建的对象称为代理。在客户端对象的情况下,目标对象和代理对象是相同的。Advice + Target Object = Proxy
06
2020
05

Spring AOP and AspectJ AOP 有什么区别?

Spring AOP 基于动态代理方式实现;AspectJ 基于静态代理方式实现。Spring AOP 仅支持方法级别的 PointCut;提供了完全的 AOP 支持,它还支持属性级别的 PointCut。
06
2020
05

AOP 有哪些实现方式?

实现 AOP 的技术,主要分为两大类:静态代理 - 指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;编译时编织(特殊编译器实现)类加载时编织(特殊的类加载器实现)。动态代理 - 在运行时在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。JDK 动态代理CGLIB
06
2020
05

指出在 spring aop 中 concern 和 cross-cutting concern 的不同之处。

concern 是我们想要在应用程序的特定模块中定义的行为。它可以定义为我们想要实现的功能。cross-cutting concern 是一个适用于整个应用的行为,这会影响整个应用程序。例如,日志记录,安全性和数据传输是应用程序几乎每个模块都需要关注的问题,因此它们是跨领域的问题。
06
2020
05

有哪些类型的通知(Advice)?

Before - 这些类型的 Advice 在 joinpoint 方法之前执行,并使用 @Before 注解标记进行配置。After Returning - 这些类型的 Advice 在连接点方法正常执行后执行,并使用@AfterReturning 注解标记进行配置。After Throwing - 这些类型的 Advice 仅在 joinpoint 方法通过抛出异常退出并使用 @AfterThrowing 注解标记配置时执行。After (finally) - 这些类型的 Advice 在连
06
2020
05

什么是通知(Advice)?

特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice。Spring AOP 使用一个 Advice 作为拦截器,在 JoinPoint “周围”维护一系列的拦截器。
06
2020
05

什么是切点(JoinPoint)

程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理.在 Spring AOP 中, join point 总是方法的执行点。
06
2020
05

什么是 Aspect?

aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑编织到切面所指定的连接点中.AOP 的工作重心在于如何将增强编织目标对象的连接点上, 这里包含两个工作:如何通过 pointcut 和 advice 定位到特定的 joinpoint 上如何在 advice 中编写切面代码.可以简单地认为, 使用 @Aspect 注解的类就是切面.
06
2020
05

什么是 AOP?

AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角.在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面)
06
2020
05

spring 支持哪些 ORM 框架

HibernateiBatisJPAJDOOJB
06
2020
05

列举 spring 支持的事务管理类型

Spring 支持两种类型的事务管理:程序化事务管理:在此过程中,在编程的帮助下管理事务。它为您提供极大的灵活性,但维护起来非常困难。声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于 XML 的配置来管理事务。
06
2020
05

使用 Spring 访问 Hibernate 的方法有哪些?

我们可以通过两种方式使用 Spring 访问 Hibernate:使用 Hibernate 模板和回调进行控制反转扩展 HibernateDAOSupport 并应用 AOP 拦截器节点
06
2020
05

spring DAO 有什么用?

Spring DAO 使得 JDBC,Hibernate 或 JDO 这样的数据访问技术更容易以一种统一的方式工作。这使得用户容易在持久性技术之间切换。它还允许您在编写代码时,无需考虑捕获每种技术不同的异常。
06
2020
05

@RequestMapping 注解有什么用?

@RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别:类级别:映射请求的 URL方法级别:映射 URL 以及 HTTP 请求方法
06
2020
05

@Qualifier 注解有什么用?

当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。例如,这里我们分别有两个类,Employee 和 EmpAccount。在 EmpAccount 中,使用@Qualifier 指定了必须装配 id 为 emp1 的 bean。Employee.javapublic class Employee {    private String n
06
2020
05

@Autowired 注解有什么用?

@Autowired 可以更准确地控制应该在何处以及如何进行自动装配。此注解用于在 setter 方法,构造函数,具有任意名称或多个参数的属性或方法上自动装配 bean。默认情况下,它是类型驱动的注入。public class Employee {    private String name;    @Autowired    public void setName(String name) {     
06
2020
05

@Required 注解有什么用?

@Required 应用于 bean 属性 setter 方法。此注解仅指示必须在配置时使用 bean 定义中的显式属性值或使用自动装配填充受影响的 bean 属性。如果尚未填充受影响的 bean 属性,则容器将抛出 BeanInitializationException。示例:public class Employee {    private String name;    @Required    public void setN
06
2020
05

@Component, @Controller, @Repository, @Service 有何区别?

@Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。@Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。@Service:此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component,因为它以更好的方式指定了意图
06
2020
05

如何在 spring 中启动注解装配?

默认情况下,Spring 容器中未打开注解装配。因此,要使用基于注解装配,我们必须通过配置<context:annotation-config /> 元素在 Spring 配置文件中启用它。
06
2020
05

什么是基于注解的容器配置

不使用 XML 来描述 bean 装配,开发人员通过在相关的类,方法或字段声明上使用注解将配置移动到组件类本身。它可以作为 XML 设置的替代方案。例如:Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现。@Bean 注解扮演与 元素相同的角色。@Configuration 类允许通过简单地调用同一个类中的其他 @Bean 方法来定义 bean 间依赖关系。例如:@Configurationpublic class StudentConfig {&n
06
2020
05

自动装配有什么局限?

覆盖的可能性 - 您始终可以使用 <constructor-arg> 和 <property> 设置指定依赖项,这将覆盖自动装配。基本元数据类型 - 简单属性(如原数据类型,字符串和类)无法自动装配。令人困惑的性质 - 总是喜欢使用明确的装配,因为自动装配不太精确。
06
2020
05

自动装配有哪些方式?

Spring 容器能够自动装配 bean。也就是说,可以通过检查 BeanFactory 的内容让 Spring 自动解析 bean 的协作者。自动装配的不同模式:no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML 文件中由相同名称定义的 bean。byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。构造函数 -
06
2020
05

什么是 spring 装配

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。 Spring 容器需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定在一起,同时装配 bean。
06
2020
05

什么是 spring 的内部 bean?

只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。为了定义 bean,Spring 的基于 XML 的配置元数据在 <property> 或 <constructor-arg> 中提供了 <bean> 元素的使用。内部 bean 总是匿名的,它们总是作为原型。例如,假设我们有一个 Student 类,其中引用了 Person 类。这里我们将只创建一个 Person 类实例并在 Student 中使用它。Student.j
06
2020
05

spring bean 容器的生命周期是什么样的?

spring bean 容器的生命周期流程如下:Spring 容器根据配置中的 bean 定义中实例化 bean。Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。如果 bean 实现 BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用 setBeanName()。如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。如果存在与 bean 关联的任何 BeanPostProces
06
2020
05

spring 支持集中 bean scope?

Spring bean 支持 5 种 scope:Singleton - 每个 Spring IoC 容器仅有一个单实例。Prototype - 每次请求都会产生一个新的实例。Request - 每一次 HTTP 请求都会产生一个新的实例,并且该 bean 仅在当前 HTTP 请求内有效。Session - 每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效。Global-session - 类似于标准的 HTTP Session 作用
06
2020
05

spring 提供了哪些配置方式?

基于 xml 配置bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。例如:<bean id="studentbean" class="org.edureka.firstSpring.StudentBean"> <property name="name" value="Edureka&quo
06
2020
05

什么是 spring bean?

它们是构成用户应用程序主干的对象。Bean 由 Spring IoC 容器管理。它们由 Spring IoC 容器实例化,配置,装配和管理。Bean 是基于用户提供给容器的配置元数据创建。
06
2020
05

Spring IoC 的实现机制。

Spring 中的 IoC 的实现原理就是工厂模式加反射机制。示例:interface Fruit {     public abstract void eat();}class Apple implements Fruit {    public void eat(){        System.out.println("Apple");    }}class O
06
2020
05

列举 IoC 的一些好处。

IoC 的一些好处是:它将最小化应用程序中的代码量。它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例或 JNDI 查找机制。它以最小的影响和最少的侵入机制促进松耦合。它支持即时的实例化和延迟加载服务。
06
2020
05

区分 BeanFactory 和 ApplicationContext。

BeanFactory:它使用懒加载它使用语法显式提供资源对象不支持国际化不支持基于依赖的注解ApplicationContext:它使用即时加载它自己创建和管理资源对象支持国际化支持基于依赖的注解
06
2020
05

spring 中有多少种 IOC 容器?

BeanFactory - BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端要求时实例化 bean。ApplicationContext - ApplicationContext 接口扩展了 BeanFactory 接口。它在 BeanFactory 基础上提供了一些额外的功能。
06
2020
05

区分构造函数注入和 setter 注入。

构造函数注入:没有部分注入不会覆盖 setter 属性任意修改都会创建一个新实例适用于设置很多属性setter 注入:有部分注入会覆盖 setter 属性任意修改不会创建一个新实例适用于设置少量属性
06
2020
05

可以通过多少种方式完成依赖注入?

通常,依赖注入可以通过三种方式完成,即:构造函数注入setter 注入接口注入在 Spring Framework 中,仅使用构造函数和 setter 注入。
06
2020
05

什么是依赖注入?

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。
06
2020
05

什么是 Spring IOC 容器?

Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过 XML,Java 注解或 Java 代码提供。
06
2020
05

使用 Spring 有哪些方式?

使用 Spring 有以下方式:作为一个成熟的 Spring Web 应用程序。作为第三方 Web 框架,使用 Spring Frameworks 中间层。用于远程使用。作为企业级 Java Bean,它可以包装现有的 POJO(Plain Old Java Objects)。
06
2020
05

Spring 应用程序有哪些不同组件?

Spring 应用一般有以下组件:接口 - 定义功能。Bean 类 - 它包含属性,setter 和 getter 方法,函数等。Spring 面向切面编程(AOP) - 提供面向切面编程的功能。Bean 配置文件 - 包含类的信息以及如何配置它们。用户程序 - 它使用接口。
06
2020
05

什么是 Spring 配置文件?

Spring 配置文件是 XML 文件。该文件主要包含类信息。它描述了这些类是如何配置以及相互引入的。但是,XML 配置文件冗长且更加干净。如果没有正确规划和编写,那么在大项目中管理变得非常困难。
06
2020
05

Spring Framework 中有多少个模块,它们分别是什么?

Spring 核心容器 – 该层基本上是 Spring Framework 的核心。它包含以下模块:Spring CoreSpring BeanSpEL (Spring Expression Language)Spring Context数据访问/集成 – 该层提供与数据库交互的支持。它包含以下模块:JDBC (Java DataBase Connectivity)ORM (Object Relational Mapping)OXM (Object XML Mappers)JMS (Java M
06
2020
05

Spring Framework 有哪些不同的功能?

轻量级 - Spring 在代码量和透明度方面都很轻便。IOC - 控制反转AOP - 面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚。容器 - Spring 负责创建和管理对象(Bean)的生命周期和配置。MVC - 对 web 应用提供了高度可配置性,其他框架的集成也十分方便。事务管理 - 提供了用于事务管理的通用抽象层。Spring 的事务支持也可用于容器较少的环境。JDBC 异常 - Spring 的 JDBC 抽象层提供了一个异常层次结构,简化了错误处理策略。
06
2020
05

列举 Spring Framework 的优点。

由于 Spring Frameworks 的分层架构,用户可以自由选择自己需要的组件。Spring Framework 支持 POJO(Plain Old Java Object) 编程,从而具备持续集成和可测试性。由于依赖注入和控制反转,JDBC 得以简化。它是开源免费的。