20
2020
04

Redis如何做大量数据插入?

Redis2.6开始redis-cli支持一种新的被称之为pipe mode的新模式用于执行大量数据插入工作。
20
2020
04

Redis回收使用的是什么算法?

LRU算法
20
2020
04

Redis回收进程如何工作的?

一个客户端运行了新的命令,添加了新的数据。Redi检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。
20
2020
04

Redis如何做内存优化?

尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面.
20
2020
04

Redis key的过期时间和永久有效分别怎么设置?

EXPIRE和PERSIST命令。
20
2020
04

Redis事务相关的命令有哪几个?

MULTI、EXEC、DISCARD、WATCH
20
2020
04

怎么理解Redis事务?

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
20
2020
04

Redis中的管道有什么用?

一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。这就是管道(pipelining),是一种几十年来广泛使用的技术。例如许多POP3协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。
20
2020
04

怎么测试Redis的连通性?

ping
20
2020
04

Redis集群如何选择数据库?

Redis集群目前无法做数据库选择,默认在0数据库。
20
2020
04

Redis集群最大节点个数是多少?

16384个。
20
2020
04

Redis集群之间是如何复制的?

异步复制
20
2020
04

Redis集群会有写操作丢失吗?为什么?

Redis并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。 
20
2020
04

Redis集群的主从复制模型是怎样的?

为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.
20
2020
04

说说Redis哈希槽的概念?

Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。
20
2020
04

Redis如何设置密码及验证密码?

 设置密码:config set requirepass 123456 授权密码:auth 123456
20
2020
04

Jedis与Redisson对比有什么优缺点?

Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
20
2020
04

Redis和Redisson有什么关系?

Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong,
20
2020
04

Redis支持的Java客户端都有哪些?官方推荐用哪个?

Redisson、Jedis、lettuce等等,官方推荐使用Redisson。
20
2020
04

Redis有哪些适合的场景?

(1)、会话缓存(Session Cache)最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。(2)、全页缓存(FPC)
20
2020
04

MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
20
2020
04

Redis集群方案什么情况下会导致整个集群不可用?

有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。
20
2020
04

Redis集群方案应该怎么做?都有哪些方案?

1.twemproxy,大概概念是,它类似于一个代理方式,使用方法和普通redis无任何区别,设置好它下属的多个redis实例后,使用时在本需要连接redis的地方改为连接twemproxy,它会以一个代理的身份接收请求并使用一致性hash算法,将请求转接到具体redis,将结果再返回twemproxy。使用方式简便(相对redis只需修改连接端口),对旧项目扩展的首选。 问题:twemproxy自身单端口实例的压力,使用一致性hash后,对redis节点数量改变时候的计算值的改变,数据无法自动
20
2020
04

为什么Redis需要把所有数据放到内存中?

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。 如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
20
2020
04

一个字符串类型的值能存储最大容量是多少?

512M
20
2020
04

Redis官方为什么不提供Windows版本?

因为目前Linux版本已经相当稳定,而且用户量很大,无需开发windows版本,反而会带来兼容性等问题。
20
2020
04

Redis有哪几种数据淘汰策略?

noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外) allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。allkeys-random: 回收随机的键使得新添加的数据有空间存放。volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合
20
2020
04

Redis的全称是什么?

Remote Dictionary Server。
20
2020
04

Redis主要消耗什么物理资源?

   redis是一种基于内存高性能的数据库--- 主要依赖于内存内存。
20
2020
04

Redis支持哪几种数据类型?

String、List、Set、Sorted Set、hashes 
20
2020
04

Redis相比memcached有哪些优势?

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型(2) redis的速度比memcached快很多(3) redis可以持久化其数据
20
2020
04

什么是Redis?

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功
17
2020
04

如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?

处理兼容问题有两种方式:1.IE8/IE7/IE6支持通过document.方法产生的标签,利用这一特性让这些浏览器支持HTML5新标签。 2.使用是html5shim框架另外,DOCTYPE声明的方式是区分HTML和HTML5标志的一个重要因素,此外,还可以根据新增的结构、功能元素来加以区分。
17
2020
04

HTML5有哪些新特性?移除了哪些元素?如何处理新标签的浏览器兼容性问题?如何区分HTML和HTML5?

HTML5已形成了最终的标准,概括来讲,它主要是关于图像,位置,存储,多任务等功能的增加。新增的元素有绘画 canvas ,用于媒介回放的 video 和 audio 元素,本地离线存储 localStorage长期存储数据,浏览器关闭后数据不丢失,而sessionStorage的数据在浏览器关闭后自动删除,此外,还新增了以下的几大类元素。内容元素,article(定义外部的内容。)、footer、header、nav、section(内容)。 表单控件,calendar(日历)、da
17
2020
04

HTML5为什么只需要写就可以了?

doctype是documenttype(文档类型)的简写,在页面中,用来指定页面所使用的xhtml(或者html)的版本。要想制作符合标准的页面,一个必不可少的关键组成部分就 是doctype声明。只有确定了一个正确的doctype,xhtml里的标识和css才能正常生效。 html 告诉浏览器这个文件是html格式网页文件 两个合起来就是 html5标准网页声明,原先的是一串很长的字符串,现在是这个简洁形式,支持html5标准的主流浏览器都认识这个声明。
17
2020
04

什么是语义化的HTML?

语义化的HTML就是写出的HTML代码,符合内容的结构化(内容语义化),选择合适的标签(代码语义化),能够便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。优点:    1.语义化有利于SEO(网站推广),有利于搜索引擎爬虫更好的理解我们的网页,从而获取更多的有效信息,提升网页的权重。    2.在没有CSS的时候能够清晰的看出网页的结构,增强可读性。    3.便于团队开发和维护,语义化的HTML可以让开发者更容易
17
2020
04

什么是CSS Hack,作用是什么?

CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以达到应用不同的CSS样式的目的。作用:CSS hack用来解决有些css属性在不同浏览器中显示的效果不一样的问题。
17
2020
04

对W3C标准有哪些认识和理解?

标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维 护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性
17
2020
04

常用浏览器的内核有哪些?

Trident内核。又称其为IE内核。Trident(又称为MSHTML),是微软开发的一种排版引擎。Gecko内核。以C++编写的网页排版引擎。WebKit内核。它的特点在于源码结构清晰、渲染速度极快。缺点是对网页代码的兼容性不高,导致一些编写不标准的网页无法正常显示。Presto内核。加入动态功能,例如网页或其部分可随着DOM及Script语法的事件而重新排版。
16
2020
04

什么是线程

线程是微软公司提出的轻量级线程的概念,一个线程拥有自己的栈和寄存器状态。一个线程可以包含多个线程,和线程由操作系统调度所不同的是,线程内线程的调度完全由程序员自己控制,操作系统的内核完全不会知道线程的存在。在.NET 架构中,线程的概念不一定和操作系统的线程对应,有些情况下.NET 中的线程对应一个线程。  
16
2020
04

如何以较小的内存代价保存 Type、Field 和 Method 信息

System.RuntimeTypeHandle、System.RuntimeMethodHandle 和 System.RuntimeFieldHandle 三个类型,分别包含了一个指向类型、方法和字段描述的指针,用保存指针的方式来代替保存整个类型、方法和字段的信息描述对象,可以有效地减少内存的消耗。而在实际需要用到这些信息时,又可以通过这三个句柄类型对象,分别得到System.Type、System.Reflection.MethodInfo 和System.Reflection.Field
16
2020
04

如何利用反射来实现工厂模式

使用反射可以实现灵活性较高的工厂模式,其关键在于动态地查找产品所包含的所有零件,而不需要通过代码来逐一分析使用者的需求。反射工厂模式具有灵活性高,运行效率相对较低的特点。
16
2020
04

请解释反射的基本原理和其实现的基石

反射是一种动态分析程序集、模块、类型、字段等目标对象的机制,它的实现依托于元数据。元数据是存储在PE 文件中的数据块,它详细记录了程序集或模块内部的结构、引用的类型和程序集和清单。  
16
2020
04

请解释事件的基本使用方法

事件是一种使对象或类能够提供通知的成员。客户端可以通过提供事件处理程序为相应的事件添加可执行代码。事件是一种特殊的委托。
16
2020
04

什么是链式委托

链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。
16
2020
04

委托回调静态方法和实例方法有何区别

当委托绑定静态方法时,内部的对象成员变量:_target 将会被设置成null,而当委托绑定实例方法时,_target将会设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法。
16
2020
04

请解释委托的基本原理

委托是一类继承自System.Delegate 的类型,每个委托对象至少包含了一个指向某个方法的指针,该方法可以是实例方法,也可以是静态方法。委托实现了回调方法的机制,能够帮助程序员设计更加简洁优美的面向对象程序。
16
2020
04

在 System.Object 中定义的三个比较方法有何异同

静态方法 ReferenceEquals 实现了引用比较。静态 Equals 方法实现了比较高效地调用实例 Equals 方法的功能。实例Equals 方法是一个虚方法,默认的实现是引用比较,类型可以根据需要重写实例 Equals方法。值类型的基类ValueType 重写了Equals方法,实现了内容的比较。
16
2020
04

.NET提供了哪几个定时器类型

.NET 的内建类型中有三个定时器类型,分别是:  System.Windows.Forms.Timer类型  System.Threading.Timer类型  System.Timers.Timer类型
16
2020
04

如何使用 IFormattable 接口实现格式化输出

IFormattable接口帮助类型实现了多样式的格式化输出。IFormattable 的ToString方法接受一个代表格式的字符串参数,通过对这个参数的分析来进行格式化输出。另外,IFormattable.ToString方法接受一个IFormatProvider类型的参数,以允许类型的使用者提供格式化的方法。
16
2020
04

如何自定义序列化和反序列化的过程

通过实现 ISerializable 接口中的 GetObjectData 方法可以实现自定义的序列化,而通过添加带有SerializationInfo 和StreamingContext的参数的构造方法可以自定义反序列化的过程。
16
2020
04

Serializable 特性有何作用

通过为类型添加Serialization特性,可以使对象申明为可被序列化,也即是可被诸如BinaryFormmater等类型的对象序列化和反序列化。
16
2020
04

解释泛型的基本原理

泛型类似C++中的模板,允许程序员定义更通用的类型和算法,并且在具体使用时再生成具体的封闭类型。所有带泛型参数的类型都是一个开放式类型,它不能被实例化,但具备所有封闭类型的其他特性,本质上,它和封闭类型没有区别。
16
2020
04

Int[]是引用类型还是值类型

数组类型是一族类型,它们都继承自 System.Array,而System.Array又继承自System.Object。所有的数组类型都是引用类型。  
16
2020
04

在 C#中如何声明一个类不能被继承

C#中通过关键字:sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误。
16
2020
04

简述 C#中重写、重载和隐藏的概念

重写是指用 override 关键字重新实现基类中的虚方法,在运行的过程中,无论通过哪个类型的引用,真正对象类型的方法将被调用。隐藏是指用 new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该调用哪个类型的方法。重载是指多个方法共享同一个名字并且拥有相同的返回值,但是却可以拥有不同的参数列表。
16
2020
04

.NET中GC 的运行机制

垃圾回收是指收集释放托管堆上不再被使用的对象内存。其过程基本包括:通过算法找到不再被使用的对象、移动对象使所有仍被使用的对象紧靠托管堆的一边和调整各个状态变量。 垃圾回收的运行成本较高,对性能的影响较大。程序员在编写.NET 代码时,应该避免不必要的内存分配,尽量减少或避免使用 GC.Collect来执行垃圾回收。
16
2020
04

简述.NET中堆栈和堆的特点和差异

.NET 的程序在进程内存中分配出堆栈、托管堆和非托管堆。所有的值类型对象和引用类型对象的引用都分配在堆栈上,堆栈根据对象的生存周期来依次分配和释放,堆栈根据一个指向栈尾的指针来分配内存,效率较高。 .NET 所有引用类型对象分配在托管堆上,托管堆连续分配内存,并且受.NET 的垃圾收集机制管理,受托管堆的内存分配和释放涉及复杂的内存管理,效率相对于堆栈来说低地多。 需要分配堆内存的非托管类型将被分配在非托管堆上,非托管堆不受.NET 垃圾收集机制管理,内存块完全由程序员手动申请和释放
16
2020
04

C#中string 和String 有什么区别

String 和 string 是同一个类型的两个名字,相同情况还有 Object 和 object。除了名称之外,两者没有任何区别。 
16
2020
04

值类型和引用类型的区别

所有继承自System.ValueType 的类型是值类型,而其他类型都是引用类型。值类型的赋值会产生一个新的数据副本,所以每个值类型都拥有一个数据副本,而引用类型的赋值则是赋值引用。值类型的对象分配在堆栈上,而引用类型的对象分配在堆上。当比较两个值类型时,进行的是内容比较,而比较两个引用类型时,进行的是引用比较。 
16
2020
04

怎么把程序集放入 GAC 中

GAC是一个具有特定目录结构的文件夹,所有强签名的程序集都可以被放入GAC中。可以通过.NET Framework自带的assembly viewer来简单地拖动添加一个程序集到 GAC 中,也可以利用诸如 gacutil.exe等工具使用命令行来添加。总之,任何方法归根结底,都是根据 GAC 的规范和程序集本身的特性,在GAC目录下建立相应的子目录结构。
16
2020
04

JIT是如何工作的

JIT 引擎在编译中间代码之前,会寻找方法的本机机器代码缓存并且判断其是否可用,如果可用则直接加载,如果不可用,JIT 引擎会查找类型中的方法存根,找到该中间代码并且进行编译。
16
2020
04

什么是 CTS、CLS 和CLR

公共语言运行库(CLR)是一个CLI 的一个实现,包含了.NET 运行引擎和符合 CLI 的类库。 通用类型系统(CTS)包含在微软公司提交的 CLI 规范,定义了一个可以在 CLR 上运行的类型规范。 公共语言规范是 CTS的一个子集,定义了所有面向.NET 的程序所需要符合的最小规范集。 
16
2020
04

ip

111.198.169.114|113.45.38.45
16
2020
04

行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。(1)行内元素有:a b span img input select strong(强调的语气) (2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p(3)常见的空元素:    <br&
16
2020
04

HTML5 为什么只需要写 !DOCTYPE HTML?

HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行); 而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
16
2020
04

Doctype作用?标准模式与兼容模式各有什么区别?

1.声明位于HTML文档中的第一行,处于 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。2.标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
16
2020
04

为什么将Jenkins与Selenium一起使用?

在Jenkins中运行Selenium测试允许您在每次软件更改时运行测试,并在测试通过时将软件部署到新环境中。 Jenkins可以安排您的测试在特定时间运行。
16
2020
04

在Jenkins中持续集成是什么?

持续集成是一个将所有开发工作尽早集成的过程。 生成的工件会自动创建和测试。 此过程允许尽早发现错误。 Jenkins是一种流行的开源工具,可以执行持续集成和构建自动化。
16
2020
04

Hudson 和 Jenkins 有什么区别?

Jenkins是新的Hudson。 因为整个开发社区都移至Jenkins,所以它实际上更像是重命名,而不是分叉。 (甲骨文正坐在角落里抱着他们的“Hudson”,但现在这只是个无灵魂的项目。) 简而言之,Jenkins CI是领先的开源持续集成服务器。
16
2020
04

Maven是什么?Jenkins是什么?

Maven是一个构建工具,简而言之是ant的继承者。它有助于构建和版本控制。 但是,Jenkins是持续集成系统,其中maven用于构建。 Jenkins可用于自动化部署过程。
16
2020
04

为什么使用Jenkins?

Jenkins是一种使用Java编程语言编写的开源持续集成软件工具,用于实时测试和报告较大代码库中的孤立更改。 Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷,并自动进行构建测试。
16
2020
04

Jenkins是什么?

Jenkins是一个开源自动化服务器。 Jenkins是用Java开发的持续集成工具。 Jenkins通过持续集成并促进持续交付的技术方面,帮助实现软件开发过程中非人为部分的自动化。 Jenkins是一个开源软件;Jenkins是一个自动化服务器;Jenkins可以帮助自动化软件开发过程;Jenkins可以通过持续集成实现流程自动化,并促进持续交付的技术方面;Jenkins开发的Jenkins是名为Hudson的项目的分支;Jenkins许可证:MIT;;Jenkins用Java编写;详细答案&
15
2020
04

容器与主机之间的数据拷贝命令是?

docker cp 命令用于容器与主机之间的数据拷贝主机到容器:docker cp /www 96f7f14e99ab:/www/容器到主机:docker cp 96f7f14e99ab:/www /tmp/
15
2020
04

进入容器的方法有哪些?

1、使用 docker attach 命令2、使用 exec 命令,例如docker exec -i -t 784fd3b294d7 /bin/bash
15
2020
04

启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令是?

docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
15
2020
04

如何列出可运行的容器?

docker ps
15
2020
04

jenkins怎么备份恢复

只需要拷贝主home下面的 .jenkins打个包,下次要恢复就用这个覆盖,所有的东西就都一模一样了。其实就是配置的东西都在这里面,插件的话有个Plugin的文件夹下面就是所有的插件的东西。
15
2020
04

jenkins你都用了哪些插件?

比如:ssh remote hosts  这个可以在远程服务器上面执行脚本。Role Strategy Plugin 用来精细化管理权限。SCM: 除CVS和Subversion外需要实现与源代码控制系统支持的插件。 3 L1 O# q2 R& _+ U3 BTriggers: 事件监听并触发构建的插件。例如,URL改变触发器将监控一个URL;当地址内容发生改变,这个触发器就将执行一次作业。Build tools: 实现额外构建工具的插件,如MSBuild和Rake。如果您想在
15
2020
04

什么是Ingress网络,它是如何工作的?

Ingress网络是一组规则,充当Kubernetes集群的入口点。这允许入站连接,可以将其配置为通过可访问的URL,负载平衡流量或通过提供基于名称的虚拟主机从外部提供服务。因此,Ingress是一个API对象,通常通过HTTP管理集群中服务的外部访问,是暴露服务的最有效方式。现在,让我以一个例子向您解释Ingress网络的工作。有2个节点具有带有Linux桥接器的pod和根网络命名空间。除此之外,还有一个名为flannel0(网络插件)的新虚拟以太网设备被添加到根网络中。现在,假设我们希望数据
15
2020
04

你对Kubernetes的负载均衡器有什么了解?

负载均衡器是暴露服务的最常见和标准方式之一。根据工作环境使用两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器,而外部负载均衡器将流量从外部负载引导至后端容器。
15
2020
04

Kubernetes有哪些不同类型的服务?

以下是使用的不同类型的服务:
15
2020
04

什么是ETCD?

Etcd是用Go编程语言编写的,是一个分布式键值存储,用于协调分布式工作。因此,Etcd存储Kubernetes集群的配置数据,表示在任何给定时间点的集群状态。
15
2020
04

你能简要介绍一下Kubernetes控制管理器吗?

多个控制器进程在主节点上运行,但是一起编译为单个进程运行,即Kubernetes控制器管理器。因此,Controller Manager是一个嵌入控制器并执行命名空间创建和垃圾收集的守护程序。它拥有责任并与API服务器通信以管理端点。因此,主节点上运行的不同类型的控制器管理器是:
15
2020
04

kube-apiserver和kube-scheduler的作用是什么?

kube -apiserver遵循横向扩展架构,是主节点控制面板的前端。这将公开Kubernetes主节点组件的所有API,并负责在Kubernetes节点和Kubernetes主组件之间建立通信。kube-scheduler负责工作节点上工作负载的分配和管理。因此,它根据资源需求选择最合适的节点来运行未调度的pod,并跟踪资源利用率。它确保不在已满的节点上调度工作负载。
15
2020
04

您能否介绍一下Kubernetes中主节点的工作情况?

Kubernetes master控制容器存在的节点和节点内部。现在,这些单独的容器包含在容器内部和每个容器内部,您可以根据配置和要求拥有不同数量的容器。因此,如果必须部署pod,则可以使用用户界面或命令行界面部署它们。然后,在节点上调度这些pod,并根据资源需求,将pod分配给这些节点。kube-apiserver确保在Kubernetes节点和主组件之间建立通信。
15
2020
04

你对Kube-proxy有什么了解?

Kube-proxy可以在每个节点上运行,并且可以跨后端网络服务进行简单的TCP / UDP数据包转发。基本上,它是一个网络代理,它反映了每个节点上Kubernetes API中配置的服务。因此,Docker可链接的兼容环境变量提供由代理打开的群集IP和端口。
15
2020
04

Kubernetes Architecture的不同组件有哪些?

Kubernetes Architecture主要有两个组件 - 主节点和工作节点。如下图所示,master和worker节点中包含许多内置组件。主节点具有kube-controller-manager,kube-apiserver,kube-scheduler等。而工作节点具有在每个节点上运行的kubelet和kube-proxy。
15
2020
04

你对Kubernetes的一个节点有什么了解?

15
2020
04

什么是Kubelet?

这是一个代理服务,它在每个节点上运行,并使从服务器与主服务器通信。因此,Kubelet处理PodSpec中提供给它的容器的描述,并确保PodSpec中描述的容器运行正常。
15
2020
04

什么是Kubectl?

Kubectl是一个平台,您可以使用该平台将命令传递给集群。因此,它基本上为CLI提供了针对Kubernetes集群运行命令的方法,以及创建和管理Kubernetes组件的各种方法。
15
2020
04

什么是Minikube?

Minikube是一种工具,可以在本地轻松运行Kubernetes。这将在虚拟机中运行单节点Kubernetes群集。
15
2020
04

什么是Heapster?

Heapster是由每个节点上运行的Kubelet提供的集群范围的数据聚合器。此容器管理工具在Kubernetes集群上本机支持,并作为pod运行,就像集群中的任何其他pod一样。因此,它基本上发现集群中的所有节点,并通过机上Kubernetes代理查询集群中Kubernetes节点的使用信息。
15
2020
04

什么是Google容器引擎?

Google Container Engine(GKE)是Docker容器和集群的开源管理平台。这个基于Kubernetes的引擎仅支持在Google的公共云服务中运行的群集。
15
2020
04

您对Kubernetes的集群了解多少?

Kubernetes背后的基础是我们可以实施所需的状态管理,我的意思是我们可以提供特定配置的集群服务,并且集群服务将在基础架构中运行并运行该配置。因此,正如您在上图中所看到的,部署文件将具有提供给集群服务所需的所有配置。现在,部署文件将被提供给API,然后由集群服务决定如何在环境中安排这些pod,并确保正确运行的pod数量。因此,位于服务前面的API,工作节点和节点运行的Kubelet进程,共同构成了Kubernetes集群。
15
2020
04

Kubernetes如何简化容器化部署?

由于典型应用程序将具有跨多个主机运行的容器集群,因此所有这些容器都需要相互通信。因此,要做到这一点,你需要一些能够负载平衡,扩展和监控容器的东西。由于Kubernetes与云无关并且可以在任何公共/私有提供商上运行,因此必须是您简化容器化部署的选择。
15
2020
04

Kubernetes有什么特点?

Kubernetes的功能如下:
15
2020
04

Container Orchestration需要什么?

考虑到你有5-6个微服务用于执行各种任务的单个应用程序,所有这些微服务都放在容器中。现在,为了确保这些容器彼此通信,我们需要容器编排。正如您在上图中所看到的,在没有使用容器编排的情况下,还存在许多挑战。因此,为了克服这些挑战,容器编排就到位了。
15
2020
04

什么是Container Orchestration?

考虑一个应用程序有5-6个微服务的场景。现在,这些微服务被放在单独的容器中,但如果没有容器编排就无法进行通信。因此,由于编排意味着所有乐器在音乐中和谐共处,所以类似的容器编排意味着各个容器中的所有服务协同工作以满足单个服务器的需求。
15
2020
04

在主机和容器上部署应用程序有什么区别?

请参考上图。左侧架构表示在主机上部署应用程序。因此,这种架构将具有操作系统,然后操作系统将具有内核,该内核将在应用程序所需的操作系统上安装各种库。因此,在这种框架中,您可以拥有n个应用程序,并且所有应用程序将共享该操作系统中存在的库,而在容器中部署应用程序时,体系结构则略有不同。这种架构将有一个内核,这是唯一一个在所有应用程序之间唯一共同的东西。因此,如果有一个需要Java的特定应用程序,那么我们将获得访问Java的特定应用程序,如果有另一个需要Python的应用程序,则只有该特定应用程序才能访
15
2020
04

什么是Kubernetes?

Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。作为Google的创意之作,它提供了出色的社区,并与所有云提供商合作。因此,我们可以说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。
15
2020
04

Kubernetes与Docker Swarm的区别如何?

15
2020
04

当你项目中同时使用Kotlin和Java,你是如何保证空指针问题的?

首先,Kotlin本身就不存在空指针问题,而如果你在Kotlin中去调用Java某个类的方法的时候,这个方法最好使用注解的方式来避免返回空指针。
15
2020
04

Kotlin跟Java比,kotlin具有哪些优势?

Kotlin语言简练,而且Kotlin里面可以没有空指针问题,在Android中使用Java就会存在很多令人头大的空指针问题。
15
2020
04

Kotlin的环境搭建

1.Android Studio安装Kotlin插件。2.编写ActivityKotlin进行测试。3.Kotlin会自动配置。
15
2020
04

Kotlin是什么?

1.Kotlin是一种基于JVM的编程语言。2.实际上它是对Java的一种扩展。3.Kotlin支持函数式编程。4.Kotlin类和Java类的互相调用。
14
2020
04

内置 filter

ng 内置的 filter 有九种:date(日期)currency(货币)limitTo(限制数组或字符串长度)orderBy(排序)lowercase(小写)uppercase(大写)number(格式化数字,加上千位分隔符,并接收参数限定小数点位数)filter(处理一个数组,过滤出含有某个子串的元素)json(格式化 json 对象)filter 有两种使用方法,一种是直接在页面里:<p>{{now | date : 'yyyy-MM-dd'}}</p&
14
2020
04

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

filter,格式化数据,接收一个输入,按某规则处理,返回处理结果。
14
2020
04

ng-click 中写的表达式,能使用 JS 原生对象上的方法吗?

不止是 ng-click 中的表达式,只要是在页面中,都不能直接调用原生的 JS 方法,因为这些并不存在于与页面对应的 Controller 的 $scope 中。举个栗子:<p>{{parseInt(55.66)}}<p>会发现,什么也没有显示。但如果在 $scope 中添加了这个函数:$scope.parseInt = function(x){  return parseInt(x);}这样自然是没什么问题了。对于这种需求,使用一个 filter 或许是不错
14
2020
04

ng-if 跟 ng-show/hide 的区别有哪些?

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

在写controlloer逻辑的时候 你需要注意什么?

简化代码(这个是所有开发人员都要具备的)坚决不能操作dom节点 这个时候可能会问 为什么不能啊你的回答是:DOM操作只能出现在指令(directive)中。最不应该出现的位置就是服务(service)中。Angular倡导以测试驱动开发,在service或者controller中出现了DOM操作,那么也就意味着的测试是无法通过的。当然,这只是一点,重要的是使用Angular的其中一个好处是啥,那就是双向数据绑定,这样就能专注于处理业务逻辑,无需关系一堆堆的DOM操作。如果在Angular的代码中
14
2020
04

ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?

会提示 Duplicates in a repeater are not allowed. 加 track by $index 可解决。当然,也可以 trace by 任何一个普通的值,只要能唯一性标识数组中的每一项即可(建立 dom 和数据之间的关联)。
14
2020
04

ng-if 跟 ng-show/hide的区别有哪些?

ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,ng-show 是初始时就创建了,用 display:block 和 display:none 来控制显示和不显示。ng-if 会(隐式地)产生新作用域,ng-switch 、 ng-include 等会动态创建一块界面的也是如此。
14
2020
04

factory 和 service,provider是什么关系?

factory 把 service 的方法和数据放在一个对象里,并返回这个对象;service 通过构造函数方式创建 service,返回一个实例化对象;provider 创建一个可通过 config 配置的 service。从底层实现上来看,service 调用了 factory,返回其实例;factory 调用了 provider,将其定义的内容放在 $get 中返回。factory 和 service 功能类似,只不过 factory 是普通 function,可以返回任何东西(retur
14
2020
04

angular 核心?

AngularJS是为了克服HTML在构建应用上的不足而设计的。 AngularJS有着诸多特性,最为核心的是:MVC模块化自动化双向数据绑定语义化标签、依赖注入等等
14
2020
04

angularjs 是 mvc 还是 mvvm 框架?

首先阐述下你对mvc和mvvm的理解首先为什么我们会需要MVC?因为随着代码规模越来越大,切分职责是大势所趋,还有为了后期维护方便,修改一块功能不影响其他功能。还有为了复用,因为很多逻辑是一样的。而MVC只是手段,终极目标是模块化和复用。mvvm的优点:低耦合:View可以独立于Model变化和修改,同一个ViewModel可以被多个View复用;并且可以做到View和Model的变化互不影响可重用性:可以把一些视图的逻辑放在ViewModel,让多个View复用独立开发:开发人员可以专注与业务
14
2020
04

Web Storage提供了两种在客户端存储数据的方法,即localStorage和sessionStorage。

localStorage是一种没有时间限制的数据存储方式,可以将数据保存在客户端硬盘或其他存储器,存储时间可以是一天、两天、几周或几年,关闭浏览器里面的数据不会消失,当再次打开浏览器依然可以访问这些数据。localStorage用于持久化的本地存储,除非自动删除数据,否则数据永远不会过期。sessionStorage指的是针对一个session的数据存储,即将数据保存在session中。web中session指的是用户在浏览某个网站时,从进入网站到关闭浏览器所经过的这段时间,可以称为用户与浏览器
14
2020
04

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗   考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能   考虑到减轻服务器性能方面,应当使用COOKIE。4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。5、所以个人建议:&nbs
14
2020
04

http协议get和post的区别

1. get是从服务器上获取数据,post是向服务器传送数据。2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。4. g
14
2020
04

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上
14
2020
04

http全称

超文本协议传输
14
2020
04

常用的HTTP方法有哪些?

 GET:用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器。  POST:用于传输信息给服务器,主要功能与Get方法类似,但一般推荐POST方式。  PUT:传输文件,报文主体包含文件内容,保存到对应URL位置。  HEAD:获取报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URL是否有效。  DELET:删除文件,与PUT方法相反,删除对应URL位置的文件。  OPTIONS:查询相应UR
14
2020
04

创建ajax的过程:

(1)创建异步对象(2)创建一个心得http请求,并指定该http请求的方法URL及验证信息(3)设置响应http请求状态变化的函数(4)发送http请求(5)获取异步调用并返回的数据(6)使用Javascript和Dom实现局部刷新 
14
2020
04

ajax的缺点

1)ajax不支持浏览器back按钮2)安全问题ajax暴露了与服务器交互的细节3)对搜索引擎的支持比较弱4)破坏了程序的异常机制七:同步和异步的区别同步:就是按照顺序执行异步:可以任意执行
14
2020
04

get和post的区别?何时使用post?

get一般用来进行查询操作,URL地址有长度限制,请求的参数都暴露在URL地址当中,如果传递中文参数,需要自己进行编码操作,安全性较低。post:请求方式主要用来提交数据,没有数据长度的限制,提交的数据内容存在于http请求体中,数据不会暴露在URL中在以下情况下,使用post请求:1)无法使用缓存文件(更新服务器上的文件或数据库)2)向服务器发送大量数据(post没有数据量限制)3)发送包含未知字符的用户输入时,post比get更稳定也更可靠
14
2020
04

解释jsonp的原理,以及为什么不是真正的ajax

jsonp不是一种数据格式,而json是一种数据格式,jsonp是用来解决跨域获取数据的一种解决方案,具体是通过动态创建script变迁,然后通过标签的src属性获取js文件的js脚本,该脚本的内容是一个函数调用,参数就是服务器返回的数据,为了处理这些返回的数据,需要事先在页面定义好回调函数,本质上使用的并不是ajax技术。
14
2020
04

如何解决跨域问题

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。
14
2020
04

如何创建一个ajax?

1)定义请求对象            var xhr = new XMLHttpRequest()2)准备发送网络请求            第一个参数dataType: post get            第二个参数是后台请求地址           
14
2020
04

ajax是什么?

ajax全称是asynchronous JavaScript and xml,主要用来实现客户端的异步通信效果,实现页面的局部刷新ajax就是进行http请求
14
2020
04

对象的原型链组成?

原型链:   function A() {};   const a = new A();   a.__proto__===A.prototype?console.log('true'):console.log('false');//true   console.log(A.prototype); // {constructor:f}   A.prototype.ge
14
2020
04

什么是__proto__?

_proto_是浏览器内部的属性,并非js标准属性。(一般我们不会直接操作它)每个对象都有_proto_,且指向构造函数的prototype。(非常重要,但是null和undefined没有_proto_)第二点注意,下面两个例子都返回true。1. function F() {}; const f = new F(); f.__proto__ === F.prototype?console.log('true'):console.log('
14
2020
04

将方法设置在prototype上和设置在构造函数的this上有什么区别?

 function A() {};    A.prototype.get = () => {        console.log('我是A');    } function B() {        this.get = () => {            conso
14
2020
04

什么是prototype?

prototype就是原型对象,它是函数所独有的,它包含了一个函数(类)所有的实例共享的属性和方法。function A() {};A.prototype.get=()=>{    console.log('我是get方法');}var a1 = new A();a1.get(); // 我是get方法var a2= new A();a2.get(); // 我是get方法a1和a2都是A的实例,所以他们都有A的原型对象上的get方法属性。
14
2020
04

如何判断this的指向

默认情况(谁的方法就指向谁)显示绑定箭头函数严格模式第一种情况(谁的方法就指向谁)1、    var a = 2;    var obj = {      a:1,      getVal(){          console.log(this.a);       }    } 
14
2020
04

this是什么?

this指代表当前环境的上下文。
14
2020
04

内置类型之间如何进行类型转换?

首先,我们先看几个例子。第一个例子:const a = 1;const b = '1';if(a==b){ console.log('true') //true}第二个例子:const x = 1+'1';console.log(x); // 11const y = 1*'1'; console.log(y); // 1第三个例子:const array = [];if (array) { consol
14
2020
04

如何判断是哪个类型?

Object.prototype.toString.call(),返回为[object Type]。现在我们来验证一下。Object.prototype.toString.call(NaN);// "[object Number]"Object.prototype.toString.call('1');// "[object String]"Object.prototype.toString.call([1,2]);// "[ob
14
2020
04

NaN是独立的一种类型吗?

不是。NaN是number类型。
14
2020
04

JS中有哪些内置类型?

7种。分别是boolean、number、string、object、undefined、null、symbol。
14
2020
04

什么是JavaScript?

JavaScript是客户端和服务器端脚本语言,可以插入到HTML页面中,并且是目前较热门的Web开发语言。同时,JavaScript也是面向对象编程语言。
13
2020
04

用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)

答案:wc 命令 - c 统计字节数 - l 统计行数 - w 统计字数。
13
2020
04

删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?

答案:rm rm -r rmdir
13
2020
04

复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?

答案:cp cp -r ????
13
2020
04

移动文件用哪个命令?改名用哪个命令?

答案:mv mv
13
2020
04

终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?

答案:终端 /dev/tty黑洞文件 /dev/null
13
2020
04

查看文件内容有哪些命令可以使用?

答案:vi 文件名 #编辑方式查看,可修改cat 文件名 #显示全部文件内容more 文件名 #分页显示文件内容less 文件名 #与 more 相似,更好的是可以往前翻页tail 文件名 #仅查看尾部,还可以指定行数head 文件名 #仅查看头部,还可以指定行数
13
2020
04

绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?

答案:绝对路径: 如/etc/init.d当前目录和上层目录: ./ ../主目录: ~/切换目录: cd
12
2020
04

AR,ISR和OSR的含义与关系

AR:所有副本ISR:leader副本和与leader副本保持一定同步的follower副本。OSR:同步滞后的副本集合。AR = ISR + OSR
12
2020
04

acks参数含义

acks=0:不需要等待任何返回。acks=1:需要等待leader副本写入成功,不等待follower副本。acks=-1:需要等待leader副本与所有follower副本写入成功。
12
2020
04

分区的副本机制

分区的副本机制,是一主多从的关系,各副本之间的内容是一致的。leader副本用来读写,follower副本用来备份。一旦leader副本下线,会通过选举机制选举新的leader副本。(按照ISR列表中选取)不同的副本在不同的broker中。
12
2020
04

消费者组与分区关系

每个分区只能被消费者组中的一个消费者消费,一个消费者可以消费多个分区。
12
2020
04

消息与主题,分区间的关系

每一个消息都归属于某一个主题,kafka中以主题为单位进行归类。每一个主题会有若干个分区,每个分区只属于一个主题,每个分区包含的消息不同而且是有序的。
12
2020
04

消费语义

1. 至多消费一次:消息可能丢失,但绝不重传。2. 至少消费一次:消息可能重传,但绝不丢失。3. 仅被消费一次:消息只被传递一次。
12
2020
04

消息投递模式

1. push模式  优点:及时性好  缺点:受限于消费能力,可能造成积压。2. pull模式  优点:消费者可按需获取。  缺点:及时性差,可能会延迟。
12
2020
04

消息队列的主要作用

解耦,将生产者与消费者解耦。数据冗余,消息队列中还会有一份数据备份。缓冲,生产者消费者速度不匹配时,做缓冲。
12
2020
04

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

值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。所有的值类型均隐式派生自 System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将null 赋给值类型。每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。值类型主要由两类组成:结构、枚举;结构
12
2020
04

重写和重载的区别是什么?Ref参数与out参数的区别是什么

重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。重载:一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。1)ref参数(引用传参):当方法结束前必须对ref进行赋值。传进方法中的参数,如果在方法中发生了改变,那么这个参数变量将                       &
12
2020
04

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

SQL结构化查询语言(Structured Query Language)。是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。XAML全称Extensible Application MarkUp Language。可扩展应用程序标记语言。是设计师和程序员沟通的枢纽。XML即可扩展标记语言。标记是指计算机所能理解的信息符号。HTML超文本标记语言(HyperText Markup Language)是一种用于创建网页的标准标记语言。O
12
2020
04

请详细描述C#中的访问修饰符

public(公开的):应用于所有类和类成员,可访问范围:任何代码都可以访问private(私有的):应用于所有类和类成员,可访问范围:当前类自身protected(受保护的):应用于类和内嵌类的所有成员, 可访问范围:当前类自身,所有的子类可以访问,同一程序集其他类不可以访问,其他程序集中可以通过继承也可以访问Internal:应用于类和内嵌类的所有成员, 可访问范围:当前类自身,同一程序集的其他类可以通过实例化访问,同一程序集中的子类也可以访问,其他程序集中不管是不是子类都无法访问prote
12
2020
04

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

答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
12
2020
04

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

服务器端:第一步:创建一个用于监听连接的Socket对像;第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;第三步:用socket对像的Bind()方法绑定EndPoint;第四步:用socket对像的Listen()方法开始监听;第五步:接收到客户端的连接,用socket对像的Accept()方法创建一个新的用于和客户端进行通信的socket对像;第六步:通信结束后一定记得关闭socket;客户端:第一步:建立一个Socket对像;第二步:用指定的端口号和服务器的ip建立一个E
12
2020
04

请简单描述类和结构的区别

①、值类型与引用类型结构Struct是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型。类Class是引用类型:引用类型在堆上分配地址。结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用。②、继承性结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的seal
12
2020
04

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

答:好处:封装了唯一性,可严格控制客户怎样访问及何时访问                   内存中只有一个对象,可节约系统资源,提高系统性能       实现:构造函数私有化,使用一个公开静态方法,使用一个静态属性进行判断当前窗口是否被创建,重写方法
12
2020
04

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

1、数据操纵语言(DML):SQL允许用户或应用程序通过添加新数据、删除旧数据和修改以前存储的数据对数据库进行更新,用来操纵数据库数据命令包括:select、insert、update、delete2、数据定义语言(DDL):SQL让用户定义存储数据的结构和组织,以及数据项之间的关系。用来建立数据库、数据库对象和定义列命令包括:create、alter、drop3、数据控制语言(DCL):可以使用SQL来限制用户检索、添加和修改数据的能力,保护存储的数据不被未授权的用户所访问,用来控制数据库组件
12
2020
04

抽象类和接口的区别是什么

相同点:    (1) 都可以被继承    (2) 都不能被实例化    (3) 都可以包含方法声明    (4) 派生类必须实现未实现的方法    区 别:抽象类中可以有实现成员(非抽象方法),而接口中的方法只有声明没有实现;抽象类中可以有字段,接口中不能有字段,但可以有属性;抽象类的成员可以使用公有或其他修饰符,接口中成员是隐式公有的,不需要修饰;抽象类是概念的抽象,接口注重行为,抽象类不支持
12
2020
04

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

答:数据访问层,业务层,表示层。数据访问层(DAL)主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作 业务逻辑层(BLL)对传送数据进行逻辑判断分折,并进行传送正确的值。  表示层(UI)为了与用户交互的界面。优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
12
2020
04

SQL中的左联接和右联接查询有什么区别

左:如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,来自右表的所有选择列表列均为空值。右:将返回右表的所有行。如果右表的某一行在左表中没有匹配行,则将为左表返回空值。
12
2020
04

什么是SQL注入,应该如何防止

答:sql注入是利用现有应用程序,将恶意的sql命令注入到后台数据库执行的一种恶意的操作,使用参数化的SQL就可以避免SQL注入
12
2020
04

列举出SQL Server中的聚合函数(至少5个)

答:SUM()、MIN()、MAX()、AVG()、COUNT(),DISTINCT(),HAVING()
12
2020
04

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

答: 索引是为了加速对表中的数据行的检索而创建的一种分散存储结构,相当于书的目录;视图是从一张或多张表中导出的一张虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增删改查操作;存储过程是一组为了完成特定功能的SQL语句集合;事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行触发器是一种特殊类型的存储过程,出发器主要通过事件触发而被执行的,
12
2020
04

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

(1).主键约束(Primary Key): 确定表中的标识列,(主键字段不能为空,必须唯一) 标识:确定一个对象的唯一表现(2)外键约束(Foreign key) 确定表与表之间的联系方式,一般情况下通过从表的标识列进行确定 主表:给哪张表添加约束哪张表就是主表,辅助表为从表(3)唯一约束(unique) 确定这个字段中的数据必须是唯一(4)非空约束(not null) 确定这个字段中的数据必须不能为空(5)检查约束(CHECK) 设置这个字段中的数据的特性(6)默认约束(DF) 确定这个字段
12
2020
04

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

答:SQL Server关系型数据库,实体完整性,区域完整性,参照完整性
12
2020
04

localstorage设置过期时间?

答:function set(key,value){var curTime = new Date().getTime();localStorage.setItem(key,JSON.stringify({data:value,time:curTime}));} function get(key,exp){var data = localStorage.getItem(key);var dataObj = JSON.parse(data);if (new Date().getTime()
12
2020
04

几种常用的数据存储的方式,优缺点

答:浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互。一、cookie和sessioncookie和session都是用来跟踪浏览器用户身份的会话方式。区别:1、保持状态:cookie保存在浏览器端,session保存在服务器端2、使用方式:(1)cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。如果在浏览器中设置了cookie的过期时
12
2020
04

es6中常用到的方法和特性

答:A、定义函数es6写法:var human = {    breathe(name) {   //不需要function也能定义breathe函数。        console.log(name + ' is breathing...');    }};human.breathe('jarson');   //输出 ‘jarson is breathing..
12
2020
04

写一个面向对象的例子

答:  function Cat(name,color){this.name = name;this.color = color;}Cat.prototype.type = "猫科动物";Cat.prototype.eat = function(){alert("吃老鼠")};var cat1 = new Cat("大毛","黄色");var cat2 = new Cat("二毛","黑
12
2020
04

写一个数组去重的方法?

答:a、利用对象属性Array.prototype.distinct = function (){ var arr = this,  i,  obj = {},  result = [],  len = arr.length; for(i = 0; i< arr.length; i++){  if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了   obj[arr[i]] = 1;
12
2020
04

常用的数组操作的方法有哪些?

答:forEach()、sort()、reverse()、push()、unshift()、splice()、pop()、shift()、concat()、indexOf();join() 
12
2020
04

常用的数据类型有哪些?哪些是值类型哪些是引用类型?

答:a、基本数据类型和引用数据类型ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型。  基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。  当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。b、常见的基本数据类型:Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。示例:var a = 10;var b = a;b = 20;con
12
2020
04

文本超出部分省略号怎么写?

答:width:固定;height:100px;overflow:hidden;white-space:no-wrap;text-overflow:ellipsis;
12
2020
04

用什么方法区分移动端还是pc端或者是微信app还是自己的官方app?

答:window.navigator.userAgent来匹配对应字段;
12
2020
04

有哪些常用的浏览器对象方法?

答:window对象History 对象Location Navigator
12
2020
04

用到了关于h5的哪些新特性?

答:· 新增选择器 document.querySelector、document.querySelectorAll· 拖拽释放(Drag and drop) API· 媒体播放的 video 和 audio· 本地存储 localStorage 和 sessionStorage· 离线应用 manifest· 桌面通知 Notifications· 语意化标签 article、footer、header、nav、section· 增强表单控件 calendar、date、time、email、
12
2020
04

如何实现布局左边固定宽度右边自适应?

答:a.left{width:200px;float:left;background:red;}.right{overflow:hidden;background:blue;}B、.container{display:flex;/*设为伸缩容器*/ }.left{width:200px;border: 2px solid blue;background:red;}.right{border: 2px solid yellow;flex:1;/*这里设置为占比1,填充满剩余空间*/&nb
12
2020
04

请你谈谈 SSH 整合

答: SSH :Struts (表示层) +Spring (业务层) +Hibernate (持久层)Struts :Struts 是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在 MVC 框架中, Struts 属于 VC 层次,负责界面表现,负责 MVC 关系的分发。( Vie w :沿用 JSP , HTTP , Form , Tag , Resourse ; Controller : ActionServlet , struts-config.xml , A ction )H
12
2020
04

public, private, protected , default 访问权限(可见性)

答:public :全局可见protected :继承体系结构之间可见default (或不写):同包可见private :本类可见。
12
2020
04

请说出几个常用的异常类

答: NullpointException (空指针异常)ClassNotFoundException (类找不到异常)ClassCastException (类型转换异常)IllegalArgumentException (非法参数异常)ArithmeticException (算术异常)NumberFormatException (数据格式异常)IndexOutOfBoundsException (数组下标越界异常)IllegalStateException (非法语句异常)
12
2020
04

请问类与对象有什么区别?

类类就是某一种事物的一般性的集合体,是相同或相似的各个事物共同特性的一种抽象。对象在面向对象概念中,对象( Object )是类的实例( instance )。对象与类的关系就像变量与数据类型的关系一样。
12
2020
04

类的核心特性有哪些?

类具有封装性、继承性和多态性。封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类 中的私有变量和类中方法的实现细节。继承性:类的继承性提供从已存在的类创建新类的机制,继承( inher itance )使一个新类自动拥有被继承类(父类)的全部成员。多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。
12
2020
04

请问软件开发中的设计模式你会使用哪些?

答:我熟悉的设计模式有单例模式, DAO 模式,模板方法,工厂模式,委托代理模式, M VC模式等。Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。Singleton 模式一般形式 :定义一个类,它的构造函数为 private 的,它有一个 static 的 private 的该类变量,在 类初始化时实例话,通过一个 public 的 getInstance 方法获取对它的引用 , 继而调用其中的方法 。
12
2020
04

请问 abstract class 和 interface 有什么区别?

答:1) 接口没有任何的实现 , 而抽象类它可以有部分的实现也可以没有 ;2) 如果需要复用或者共享部分代码 , 应该用抽象类而不是接口 ;3) 继承无法解决类型的转换问题 , 接口就是为了解决这一问题而产生的 (Java 的单继第 4 页 共 10 页承是接口产生的根本原因 ) 接口是一种抽象的第三方规范 , 跟对象没什么直接关系。
12
2020
04

谈谈 HashMap 和 Hashtable 的区别。

答: HashMap 是轻量级的(线程不安全的,效率高的)集合, Hashtable 是重量级的(线程安全的,效率低的)集合。都属于 Map 接口的类,实现了将惟一键映射到特定的值上。HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。Hashtable 类似于 HashMap ,但是不允许 null 键和 null 值。它也比 HashMap 慢 ,因为它是同步的。
12
2020
04

谈谈 Overload 和 Override 的区别。

答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被 “ 屏蔽 ”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类 型 ,则称为
12
2020
04

什么是 OOP ? OOP 相对于面向过程编程有哪些优点?

OOP , Object-Oriented Programming ,面向对象编程不同于面向过程编程:( 1 ) OOP 关注对象和角色,也就是事物的本质1 ) OOP 把客观世界中的对象抽象成对应的类;2 )通过类构造实例;3 )通过依赖、继承、实现等形式建立对象间的通信关系( 2 ) OOP 易于扩展,增加或改变业务的功能,无需大幅改动改变源代码( 3 ) OOP 易于建模, OOP 就是软件架构师在计算机高级语言中对客观世界的抽象和再现,人们可以很好地理解和建立起计算机中的抽象模型六、谈谈
12
2020
04

什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?

答: (1) Presentation layer (表示层)(1) 表示逻辑(生成界面代码)(2) 接收请求(3) 处理业务层抛出的异常(4) 负责规则验证(数据格式,数据非空等)(5) 流程控制第 3 页 共 10 页(2) Service layer (服务层 / 业务层)(1) 封装业务逻辑处理,并且对外暴露接口(2) 负责事务,安全等服务(3) Persistence layer (持久层)(1) 封装数据访问的逻辑,暴露接口(2) 提供方便的数据访问的方案(查询语言, API ,映射
12
2020
04

什么是中间件?

中间件就是程序中可织入的,可重用的,与业务逻辑无关的各种组件。中间件( middleware )是基础软件的一大类,属于可复用软件的范畴。顾名思义,中 间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上, 应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户 灵活、高效地开发和集成复杂的应用软件。在众多关于中间件的定义中,比较普遍被接受的是 IDC 表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享
12
2020
04

什么是 WebService ?

答:WebService 是一个 SOA (面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过 Internet 进行基于 Http 协议的网络应用间的 交互。WebService 实现不同语言间的调用,是依托于一个标准, webservice 是需要遵守 WSD L( web 服务定义语言) /SOAP (简单请求协议)规范的。WebService=WSDL+SOAP+UDDI ( webservice 的注册)Soap 是由 Soap 的 part
11
2020
04

go语言中指针运算有哪些?

可以通过“&”取指针的地址可以通过“*”取指针指向的数据
11
2020
04

说说go语言的main函数

main函数不能带参数main函数不能定义返回值main函数所在的包必须为main包main函数中可以使用flag包来获取和解析命令行参数
11
2020
04

说说go语言的同步锁?

(1) 当一个goroutine获得了Mutex后,其他goroutine就只能乖乖的等待,除非该goroutine释放这个Mutex(2) RWMutex在读锁占用的情况下,会阻止写,但不阻止读(3) RWMutex在写锁占用情况下,会阻止任何其他goroutine(无论读和写)进来,整个锁相当于由该goroutine独占
11
2020
04

说说go语言的channel特性?

A. 给一个 nil channel 发送数据,造成永远阻塞B. 从一个 nil channel 接收数据,造成永远阻塞C. 给一个已经关闭的 channel 发送数据,引起 panicD. 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值E. 无缓冲的channel是同步的,而有缓冲的channel是非同步的
11
2020
04

go语言触发异常的场景有哪些?

A. 空指针解析B. 下标越界C. 除数为0D. 调用panic函数
11
2020
04

说说go语言的beego框架?

A. beego是一个golang实现的轻量级HTTP框架B. beego可以通过注释路由、正则路由等多种方式完成url路由注入C. 可以使用bee new工具生成空工程,然后使用bee run命令自动热编译
11
2020
04

说说go语言的goconvey框架?

A. goconvey是一个支持golang的单元测试框架B. goconvey能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面C. goconvey提供了丰富的断言简化测试用例的编写 
11
2020
04

go语言中,GoStub的作用是什么?

A. GoStub可以对全局变量打桩B. GoStub可以对函数打桩C. GoStub不可以对类的成员方法打桩D. GoStub可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为 
11
2020
04

说说go语言的select机制?

A. select机制用来处理异步IO问题B. select机制最大的一条限制就是每个case语句里必须是一个IO操作C. golang在语言级别支持select关键字
11
2020
04

说说进程、线程、协程之间的区别?

进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元;同一个进程中可以包括多个线程;进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束;线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程;进程的创建调用fork或者vfork,而线程的创建调用pthread_create;线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源; 进程是资源分配的单位 线程是操作系统调度的单位 进程切换需要
11
2020
04

go语言中的引用类型包含哪些?

数组切片、字典(map)、通道(channel)、接口(interface)
11
2020
04

go语言中没有隐藏的this指针,这句话是什么意思?

方法施加的对象显式传递,没有被隐藏起来golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达方法施加的对象不需要非得是指针,也不用非得叫this
11
2020
04

说说go语言中的switch语句?

单个case中,可以出现多个结果选项只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
11
2020
04

说说go语言中的for循环?

for循环支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环for循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量  
11
2020
04

说说go语言中的协程?

协程和线程都可以实现程序的并发执行;通过channel来进行协程间的通信;只需要在函数调用前添加go关键字即可实现go的协程,创建并发任务;关键字go并非执行并发任务,而是创建一个并发任务单元;
11
2020
04

解释以下命令的作用?

go env:   #用于查看go的环境变量go run:   #用于编译并运行go源码文件go build:  #用于编译源码文件、代码包、依赖包go get:   #用于动态获取远程代码包go install:  #用于编译go文件,并将编译结构安装到bin、pkg目录go clean:  #用于清理工作目录,删除编译和安装遗留的目标文件go version:  #用于查看go的版本信息
11
2020
04

说说go语言中,数组与切片的区别?

(1). 数组数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。数组的长度是数组类型的一部分,所以[3]int 和 [4]int 是两种不同的数组类型。  数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 ;  数组是值传递;  数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的参数传入时将复制一份数组而不是引用同一指针。数组的长度也
11
2020
04

在go语言中,Printf()、Sprintf()、Fprintf()函数的区别用法是什么?

都是把格式好的字符串输出,只是输出的目标不一样:Printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。Printf() 是和标准输出文件(stdout)关联的,Fprintf 则没有这个限制. Sprintf(),是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。 Fprintf(), 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*。主要用于文件操作。Fprintf()是格式
11
2020
04

在go语言中,new和make的区别?

new 的作用是初始化一个指向类型的指针(*T)new函数是内建函数,函数定义:func new(Type) *Type使用new函数来分配空间。传递给new 函数的是一个类型,不是一个值。返回值是 指向这个新分配的零值的指针。 make 的作用是为 slice,map 或 chan 初始化并返回引用(T)。make函数是内建函数,函数定义:func make(Type, size IntegerType) Type·        第一个参数是
11
2020
04

go语言中切片的扩容机制是什么?

如果切片的容量小于1024个元素,那么扩容的时候slice的cap就在当前容量的基础上翻番,乘以2;一旦元素个数超过1024个元素,增长因子就变成1.25,即每次增加当前容量的四分之一。如果扩容之后,还没有触及原数组的容量,那么,切片中的指针指向的位置,就还是原数组,如果扩容之后,超过了原数组的容量,那么,Go就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。即大致可以表述如下:当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)当超过容量,
11
2020
04

XML CDATA是什么

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

Java的XML数据绑定是什么

答:Java的XML绑定指从XML文件中创建类和对象,使用Java编程语言修改XML文档。XML绑定的Java API,JAXB提供了绑定XML文档和Java对象的便利方式。另一个可选的XML绑定方法是使用开源库,比如XML Beans。Java中XML绑定的一个最大的优势就是利用Java编程能力创建和修改XML文档。由此,XML面试问答题对于XML技术的每个人都是有用的。由于XML具有平台独立的特性,XPath,XSLT,XQuery等XML技术越来越重要,XML广泛用于跨平台数据传输。尽管X
11
2020
04

DOM和SAX解析器有什么区别

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

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

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

什么是格式良好的XML

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

什么是XML元素和属性

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

XSLT是什么?

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

XPath是什么?

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

DTD与XML Schema有什么区别?

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

XML是什么?

XML即可扩展标记语言(Extensible Markup language),你可以根据自己的需要扩展XML。XML中可以轻松定义<books>, <orders>等自定义标签,而在HTML等其他标记语言中必须使用预定义的标签,比如<p>,而不能使用用户定义的标签。使用DTD和XML Schema标准化XML结构。XML主要用于从一个系统到另一系统的数据传输,比如企业级应用的客户端与服务端。
10
2020
04

常见的浏览器端存储的方式

有时需要将网页中的一些数据保存在浏览器端,这样做的好处是,当下次访问页面时,不需要再次向服务器请求数据,直接就可以从本地读取数据。目前常用的有以下几种方法:Cookie:cookie会随着每次HTTP请求头信息一起发送,无形中增加了网络流量,另外,cookie能存储的数据容量有限,根据浏览器类型不同而不同,IE6大约只能存储2K。 Cookie可以实现记录访问者的信息、在页面之间传递信息、自动识别用户。Flash ShareObject:这种方式能能解决上面提到的cookie存储的两个
10
2020
04

关于HTML标签的enctype属性:enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

application/x-www-form-urlencoded 在发送前编码所有字符(默认)multipart/form-data 不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。text/plain 空格转换为 “+” 加号,但不对特殊字符编码。
10
2020
04

关于比较Ajax与Flash的优缺点

Ajax的优势:1.可搜索性 2.开放性 3.费用 4.易用性 5.易于开发。Flash的优势:1.多媒体处理 2.兼容性 3.矢量图形 4.客户端资源调度Ajax的劣势:1.它可能破坏浏览器的后退功能 2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中,不过这些都有相关方法解决。Flash的劣势:1.二进制格式 2.格式私有 3.flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间 4.性能问题
10
2020
04

Web Storage分类 :Web Storage实际上由两部分组成:sessionStorage与localStorage。

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
10
2020
04

放在HTML里的哪一部分JavaScripts会在页面加载的时候被执行?

在HTML body部分中的JavaScripts会在页面加载的时候被执行。在HTML head部分中的JavaScripts会在被调用的时候才执行。
10
2020
04

iframe的使用场景有

典型系统结构,左侧是功能树,右侧就是一些常见的table或者表单之类的。为了每一个功能,单独分离出来,采用iframe。 (即与第三方域名下的页面共享cookie)ajax上传文件。加载别的网站内容,例如google广告,网站流量分析。在上传图片时,不用flash实现无刷新。跨域访问的时候可以用到iframe,使用iframe请求不同域名下的资源。
10
2020
04

form表单中input元素的readonly与disabled属性描述

设置readonly = true,页面上无法修改内容,但是可以通过JavaScript修改,内容会被提交设置disabled = true,无法修改内容,也不会被提交
10
2020
04

HTML元素的显示优先级

帧元素(frame)>HTML元素优先,表单元素总>非表单元素优先 常见的非表单元素包括:链接标记(A),DIV标记,SPAN标记,TABLE标记等等。表单元素覆盖样式元素的根本原因在于HTML元素默认的显示优先级规则。所有这样HTML元素又可以根据其显示要求分成两类,即有窗口的HTML元素(Windowed Element),无窗口的HTML元素(Windowless Element)。 有窗口的元素包括:SELECT元素,OBJECT元素,插件,IE5.01以
10
2020
04

关于置换元素和不可替换元素

置换元素:浏览器根据元素的标签和属性,来决定元素的具体显示内容。 例如:浏览器会根据<img>标签的src属性的值来读取图片信息并显示出来,而如果查看(x)html代码,则看不到图片的实际内容;<input>标签的type属性来决定是显示输入框,还是单选按钮等。 (x)html中 的<img>、<input>、<textarea>、<select>、<object>都是置换元素。这些元素往往没有实际的内容,即是一
10
2020
04

img标签中的alt属性的作用是

提供替代图片的信息,使屏幕阅读器能获取到关于图片的信息
10
2020
04

标签的目的是什么?

用可伸缩矢量图来画图或文本
10
2020
04

onchange和onblur

onchange 在元素值改变时触发。onchange 属性适用于:input、textarea 以及 select元素。onblur 事件会在对象失去焦点时发生。支持该事件的 JavaScript 对象:button, checkbox,fileUpload, layer, frame, password, radio, reset, submit, text,textarea, window。
10
2020
04

添加样式的方式有

内联式:即直接加在标签上的样式 如:<div style="width:100px;"></div> 导入样式:@import url("css/style.css")嵌入式:即用<style>.classname {width: 100px;}</style>标签括起来写在页面中的样式。 外部引用式:即将样式单独放到一个文件夹中,然后用link标签引入页面的形式,如:<link r
10
2020
04

解释一下utf-8和GBK和ISISO8859-2 字符集

charset 属性规定 HTML 文档的字符编码。UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。GBK是汉字编码,是双字节码,可表示繁体字和简体字。ISO8859-2 字符集,也称为 Latin-2,收集了 东欧 字符。
10
2020
04

HTML标签:

块级标签:默认宽度100%(占满一行); 块级标签自动换行(独占一行,右边不能有任何东西); 块级标签可以使用CSS设置宽度高度! 常用的块状元素有:div、 p、 h1**h6、ol、ul、dl、table、address、blockquote、form行级标签:默认宽度由内容撑开(内容多宽、宽度就占多宽); 行级标签不会自动换行(一行当中,从左往右依次排列); 行级标签的宽度高度不能设置! 常用的内联元素有:a、span、br、i、em、st
10
2020
04

关于HTML语义化,你知道的都有哪些标签?

header、article、address都属于语义化明确的标签。
10
2020
04

默认情况下,使用h1标签会形成什么效果?

加粗、大号文字
10
2020
04

主流浏览器内核私有属性css前缀:

mozilla内核 (firefox,flock等) -mozwebkit内核(safari,chrome等) -webkitopera内核(opera浏览器) -otrident内核(ie浏览器) -ms
09
2020
04

Kubernetes与Docker有什么关系?

众所周知,Docker提供容器的生命周期管理,Docker镜像构建运行时容器。但是,由于这些单独的容器必须通信,因此使用Kubernetes。因此,我们说Docker构建容器,这些容器通过Kubernetes相互通信。因此,可以使用Kubernetes手动关联和编排在多个主机上运行的容器。
09
2020
04

事务的四大特性分别详细说明

1)原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。2)一致性事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。3)隔离性由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能
09
2020
04

写出一条SQL语句:取出Student表中第31到第40条数据(以自动增长的ID作为主键,主键可能不连续)

答: select top 10 * from Student where id not in (select top 30 id from Student)
09
2020
04

依赖注入(DI)

让我们可以不用自己实例化就能创建依赖对象的方法. 简单的来说, 依赖是以注入的方式传递的. 在Web应用中, Angular让我们可以通过DI来创建像Controllers和Directives这样的对象. 我们还可以创建自己的依赖对象, 当我们要实例化它们时, Angular能自动实现注入.
09
2020
04

angular的数据绑定采用什么机制?详述原理

脏检查机制。双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。原理就是,Angular 在 scope 模型上设置了一个监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch ,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular
09
2020
04

go语言中切片的扩容机制是什么?

如果切片的容量小于1024个元素,那么扩容的时候slice的cap就在当前容量的基础上翻番,乘以2;一旦元素个数超过1024个元素,增长因子就变成1.25,即每次增加当前容量的四分之一。如果扩容之后,还没有触及原数组的容量,那么,切片中的指针指向的位置,就还是原数组,如果扩容之后,超过了原数组的容量,那么,Go就会开辟一块新的内存,把原来的值拷贝过来,这种情况丝毫不会影响到原数组。即大致可以表述如下:当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)当超过容量,
09
2020
04

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

答:DataConnection连接对象,Command执行命令和存储过程,DataReader向前只读的数据流,DataAdapter适配器,支持增删查询,DataSet数据存储器,DataReader:向前只读的数据流
09
2020
04

阐述一下CSS Sprites

将一个页面涉及到的所有图片都包含到一张大图中去,然后利用CSS的 background-image,background- repeat,background-position 的组合进行背景定位。利用CSS Sprites能很好地减少网页的http请求,从而大大的提高页面的性能;CSS Sprites能减少图片的字节。
09
2020
04

CSS属性overflow属性定义溢出元素内容区的内容会如何处理?

参数是scroll时候,必会出现滚动条。参数是auto时候,子元素内容大于父元素时出现滚动条。参数是visible时候,溢出的内容出现在父元素之外。参数是hidden时候,溢出隐藏。
09
2020
04

style标签写在body后与body前有什么区别?

页面加载自上而下 当然是先加载样式。写在body标签后由于浏览器以逐行方式对HTML文档进行解析,当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染,在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题)
09
2020
04

png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?

png是便携式网络图片(Portable Network Graphics)是一种无损数据压缩位图文件格式.优点是:压缩比高,色彩好。 大多数地方都可以用。jpg是一种针对相片使用的一种失真压缩方法,是一种破坏性的压缩,在色调及颜色平滑变化做的不错。在www上,被用来储存和传输照片的格式。gif是一种位图文件格式,以8位色重现真色彩的图像。可以实现动画效果.webp格式是谷歌在2010年推出的图片格式,压缩率只有jpg的2/3,大小比png小了45%。缺点是压缩的时间更久了,兼容性不好,目前谷歌
09
2020
04

有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度

外层div使用position:relative;高度要求自适应的div使用position: absolute; top: 100px; bottom: 0; left: 0
09
2020
04

为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式?

浮动元素碰到包含它的边框或者浮动元素的边框停留。由于浮动元素不在文档流中,所以文档流的块框表现得就像浮动框不存在一样。浮动元素会漂浮在文档流的块框上。浮动带来的问题:父元素的高度无法被撑开,影响与父元素同级的元素与浮动元素同级的非浮动元素(内联元素)会跟随其后若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构。清除浮动的方式:父级div定义height最后一个浮动元素后加空div标签 并添加样式clear:both。包含浮动元素的父标签添加样式overflow为hidde
09
2020
04

对BFC规范(块级格式化上下文:block formatting context)的理解?

BFC规定了内部的Block Box如何布局。定位方案:内部的Box会在垂直方向上一个接一个放置。Box垂直方向的距离由margin决定,属于同一个BFC的两个相邻Box的margin会发生重叠。每个元素的margin box 的左边,与包含块border box的左边相接触。BFC的区域不会与float box重叠。BFC是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。计算BFC的高度时,浮动元素也会参与计算。满足下列条件之一就可触发BFC根元素,即htmlfloat的值不
09
2020
04

position跟display、overflow、float这些特性相互叠加后会怎么样?

display属性规定元素应该生成的框的类型;position属性规定元素的定位类型;float属性是一种布局方式,定义元素在哪个方向浮动。类似于优先级机制:position:absolute/fixed优先级最高,有他们在时,float不起作用,display值需要调整。float 或者absolute定位的元素,只能是块元素或表格。
09
2020
04

display:none与visibility:hidden的区别?

display:none 不显示对应的元素,在文档布局中不再分配空间(回流+重绘)visibility:hidden 隐藏对应元素,在文档布局中仍保留原来的空间(重绘)重绘:当render-tree中的一些元素需要更新属性,而这些属性只影响元素的外观、风格,而不影响布局,比如是background-color,则就称为重绘。回流:当页面中的布局和几何属性改变时就需要回流,比如是:<1>、添加或删除可见的DOM元素<2>、元素位置的改变<3>、元素尺寸的改变(边
09
2020
04

CSS里的visibility属性有个collapse属性值?在不同浏览器下以后什么区别?

当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden是一样的。chrome中,使用collapse值和使用hidden没有区别。firefox,opera和IE,使用collapse值和使用display:none没有什么区别。
09
2020
04

absolute的containing block计算方式跟正常流有什么不同?

无论属于哪种,都要先找到其祖先元素中最近的 position 值不为 static 的元素,然后再判断:若此元素为 inline 元素,则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形;否则,则由这个祖先元素的 padding box 构成。如果都找不到,则为 initial containing block。补充:static(默认的)/relative:
09
2020
04

为什么要初始化CSS样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差
09
2020
04

常见的兼容性问题?

不同浏览器的标签默认的margin和padding不一样。*{ margin:0; padding:0;} IE6双边距bug:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大。hack:display:inline;将其转化为行内属性。渐进识别的方式,从总体中逐渐排除局部。首先,巧妙的使用“9”这一标记,将IE浏览器从所有情况中分离出来。接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。{back
09
2020
04

一个满屏品字布局如何设计?

方法一:上面那块用margin: 0 auto;居中; 下面两块用float或者inline-block不换行; 用margin调整位置使他们居中。方法二:上面的div设置成100%,下面的div分别宽50%,然后使用float或者inline使其不换行。
09
2020
04

Etcd怎么实现分布式锁?

首先思考下Etcd是什么?可能很多人第一反应可能是一个键值存储仓库,却没有重视官方定义的后半句,用于配置共享和服务发现。A highly-available key value store for shared configuration and service discovery.实际上,etcd 作为一个受到 ZooKeeper 与 doozer 启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点。简单:基于 HTTP+JSON 的 API 让你用 curl 就可以轻松使用。安全:
09
2020
04

分布式锁实现原理,用过吗?

在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件:在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;高可用的获取锁与释放锁;高性能的获取锁与释放锁;具备可重入特性;具备锁失效机制,防止死锁;具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多
09
2020
04

微服务架构是什么样子的?

通常传统的项目体积庞大,需求、设计、开发、测试、部署流程固定。新功能需要在原项目上做修改。但是微服务可以看做是对大项目的拆分,是在快速迭代更新上线的需求下产生的。新的功能模块会发布成新的服务组件,与其他已发布的服务组件一同协作。 服务内部有多个生产者和消费者,通常以http rest的方式调用,服务总体以一个(或几个)服务的形式呈现给客户使用。微服务架构是一种思想对微服务架构我们没有一个明确的定义,但简单来说微服务架构是:采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过
09
2020
04

LVS相关了解.

LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是LinuxVirtualServer现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。 从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构
09
2020
04

负载均衡原理是什么?

负载均衡Load Balance)是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。负载均衡,其核心就是网络流量分发,分很多维度。负载均衡(Load Balance)通常是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。负载均衡是建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的
09
2020
04

并发编程概念是什么?

并行是指两个或者多个事件在同一时刻发生;并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。而并行是真正意义上的“同时执行”。并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
09
2020
04

Golang 中 Goroutine 如何调度?

goroutine是Golang语言中最经典的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心。 goroutine使用方式非常的简单,只需使用go关键字即可启动一个协程,并且它是处于异步方式运行,你不需要等它运行完成以后在执行以后的代码。go func()//通过go关键字启动一个协程来运行函数协程:协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。 因此,协程能保留上一次调用时的状态(即
09
2020
04

Golang GC 时会发生什么?

首先我们先来了解下垃圾回收.什么是垃圾回收?内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序开发者必须对内存小心的进行管理操作,控制内存的申请及释放。因为稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰程序开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种办法:内存泄露检测工具。这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起到辅助作用。智能指针。这是 c++ 中
09
2020
04

Epoll原理.

开发高性能网络程序时,windows开发者们言必称Iocp,linux开发者们则言必称Epoll。大家都明白Epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的Socket句柄,比起以前的Select和Poll效率提高了很多。先简单了解下如何使用C库封装的3个epoll系统调用。int epoll_create(int size);  int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); &n
09
2020
04

什么是channel,为什么它可以做到线程安全?

Channel是Go中的一个核心类型,可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication),Channel也可以理解是一个先进先出的队列,通过管道进行通信。Golang的Channel,发送一个数据到Channel 和 从Channel接收一个数据 都是 原子性的。而且Go的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存,前者就是传统的加锁,后者就是Channel。也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然
09
2020
04

Data Race问题怎么解决?能不能不加锁解决这个问题?

同步访问共享数据是处理数据竞争的一种有效的方法.golang在1.1之后引入了竞争检测机制,可以使用 go run -race 或者 go build -race来进行静态检测。 其在内部的实现是,开启多个协程执行同一个命令, 并且记录下每个变量的状态.竞争检测器基于C/C++的ThreadSanitizer 运行时库,该库在Google内部代码基地和Chromium找到许多错误。这个技术在2012年九月集成到Go中,从那时开始,它已经在标准库中检测到42个竞争条件。现在,它已经是我们持续构建过
09
2020
04

Golang的内存模型,为什么小对象多了会造成gc压力。

通常小对象过多会导致GC三色法消耗过多的GPU。优化思路是,减少对象分配.
09
2020
04

互斥锁,读写锁,死锁问题是怎么解决。

互斥锁互斥锁就是互斥变量mutex,用来锁住临界区的.条件锁就是条件变量,当进程的某些资源要求不满足时就进入休眠,也就是锁住了。当资源被分配到了,条件锁打开,进程继续运行;读写锁,也类似,用于缓冲区等临界资源能互斥访问的。读写锁通常有些公共数据修改的机会很少,但其读的机会很多。并且在读的过程中会伴随着查找,给这种代码加锁会降低我们的程序效率。读写锁可以解决这个问题。注意:写独占,读共享,写锁优先级高死锁一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起
09
2020
04

协程,线程,进程的区别。

进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。线程线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属
09
2020
04

JSON 标准库对 nil slice 和 空 slice 的处理是一致的吗? 

首先JSON 标准库对 nil slice 和 空 slice 的处理是不一致.通常错误的用法,会报数组越界的错误,因为只是声明了slice,却没有给实例化的对象。var slice []intslice[1] = 0此时slice的值是nil,这种情况可以用于需要返回slice的函数,当函数出现异常的时候,保证函数依然会有nil的返回值。empty slice 是指slice不为nil,但是slice没有值,slice的底层的空间是空的,此时的定义如下:slice := make([]int,
09
2020
04

Golang 中常用的并发模型?

Golang 中常用的并发模型有三种:通过channel通知实现并发控制无缓冲的通道指的是通道的大小为0,也就是说,这种类型的通道在接收前没有能力保存任何值,它要求发送 goroutine 和接收 goroutine 同时准备好,才可以完成发送和接收操作。从上面无缓冲的通道定义来看,发送 goroutine 和接收 gouroutine 必须是同步的,同时准备后,如果没有同时准备好的话,先执行的操作就会阻塞等待,直到另一个相对应的操作准备好为止。这种无缓冲的通道我们也称之为同步通道。func m
09
2020
04

go语言的并发机制以及它所使用的CSP并发模型.

CSP模型是上个世纪七十年代提出的,不同于传统的多线程通过共享内存来通信,CSP讲究的是“以通信的方式来共享内存”。用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。Golang中channel 是被单独创建并且可以在进程之间传递,它的通信模式类似于 boss-worker 模式的,一个实体通过将消息发送到channel 中,然后又监听这个 channel 的实
09
2020
04

无缓冲 Chan 的发送和接收是否同步?

ch := make(chan int)    无缓冲的channel由于没有缓冲发送和接收需要同步.ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步. channel无缓冲时,发送阻塞直到数据被接收,接收阻塞直到读到数据。channel有缓冲时,当缓冲满时发送阻塞,当缓冲空时接收阻塞。
09
2020
04

go 实现消息队列

使用切片加锁可以实现
09
2020
04

go set的实现

用map 的 key不重复, type Set struct { m map[类型]Empty } 
09
2020
04

函数体 多次 defer 或 go defer执行顺序

defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。  执行顺序 先进后出 (类似 栈)
09
2020
04

go struct能不能比较

因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型
09
2020
04

goroutine的调度

 goroutine的本质是协程,是实现并行计算的核心。使用go关键字启动一个异步工作的协程,协程相对线程更加轻量化,协程运行在一个或多个线程上。各个协程之间的调度则有程序底层完成(线程和进程的操作是由程序触发系统接口,最后的执行者是系统)。协程拥有自己的寄存器上下文和栈,协程调度切换时 将寄存器和栈保存到其他地方,切换回来时再将寄存器上下文和栈恢复,这样 协程能保留上一次调用时的状态(即所有局部状态的一个特定组合)
08
2020
04

Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量?

Golang中Goroutine 可以通过 Channel 进行安全读写共享变量。
08
2020
04

用纯css创建一个三角形的原理是什么?

首先,需要把元素的宽高设置为0,然后设置边框样式。width: 0;height: 0;border-top: 40px solid transparent;border-left: 40px solid transparent;border-right: 40px solid transparent;border-bottom: 40px solid #00ff00;
08
2020
04

请说出XHTML和HTML的区别

答: 1、文档顶部doctype声明不同,xhtml的doctype顶部声明中明确规定了xhtml DTD的写法;         2、html元素必须正确嵌套,不能乱;         3、属性必须是小写的;         4、属性值必须加引号;         5、标签必须有结束,单标签也应该
08
2020
04

XML 是什么?

答:XML 即可扩展标记语言(Extensible Markup language),你可以根据自己的需要扩展 XML。XML 中可以轻松定义<books>, <orders>等自定义标签,而在 HTML 等其他标记语言中必须使用预定义的标签,比如<p>,而不能使用用户定义的标签。使用 DTD 和 XML Schema 标准化XML 结构。XML 主要用于从一个系统到另一系统的数据传输,比如企级应用的客户端与服务端。
08
2020
04

你对 MVC 的理解, MVC 有什么优缺点?结合 Struts ,说明在一个 Web 应用如何去使 用?

答:MVC 设计模式(应用观察者模式的框架模式)M: Model(Business process layer) ,模型,操作数据的业务处理层 , 并独立于表现层 (Independe ntof presentation) 。V: View(Presentation layer) ,视图,通过客户端数据类型显示数据 , 并回显模型层的执行结果 。C: Controller(Control layer) ,控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC 框
08
2020
04

如何使元素垂直水平居中?

答:a、知道具体宽高:父级定位,子级定位,宽高300px.container {    position: absolute;    left: calc(50% - 150px);    top: calc(50% - 150px);    width: 300px;    height: 300px;    border: 1px solid red;}或者.contain
08
2020
04

如何获取 topic 主题的列表

bin/kafka-topics.sh --list --zookeeper localhost:2181
08
2020
04

Linux常用系统安全命令

sudo // 超级用户su // 用于切换当前用户身份到其他身份,变更时需输入所要变更的用户账号与密码。chmod // 用来变更文件或目录的权限setfacl // 设置文件访问控制列表
08
2020
04

JavaScript 的组成

JavaScript 由以下三部分组成:ECMAScript(核心):JavaScript 语言基础DOM(文档对象模型):规定了访问 HTML 和 XML 的接口BOM(浏览器对象模型):提供了浏览器窗口之间进行交互的对象和方法
08
2020
04

维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

答:尽可能使用约束,如check、主键、外键、非空字段等来约束。这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。
08
2020
04

什么是锁?

答:锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
08
2020
04

索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。索引很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
08
2020
04

什么是事务?

答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。事务有四个特性,分别是:原子性,一致性,隔离性和持久性。
08
2020
04

什么是存储过程?用什么来调用?

答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。
08
2020
04

触发器的作用?

  答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
07
2020
04

什么方法可以替换v-model?

  <template>  <div id="listBox">    <p>v-model动态监听输入的值{{value1}} <br /></p>     <p>使用v-model实现的监听:<input type="text" v-model="value1" ><
07
2020
04

如何给vue自定义组件添加点击事件?

需要在@click后面加上.native,官方对于native的解释为:.native -——监听组件根元素的原生事件正确写法:<my-button  @click.native="alert1()" names="删除" v-bind:item2="btdata"></my-button> 
07
2020
04

vue路由钩子函数:

路由的钩子函数总结有6个全局的路由钩子函数:beforeEach、afterEach单个的路由钩子函数:beforeEnter组件内的路由钩子函数:beforeRouteEnter、beforeRouteLeave、beforeRouteUpdate 模块一:全局导航钩子函数1、vue router.beforeEach(全局前置守卫)beforeEach的钩子函数,它是一个全局的before 钩子函数,(beforeEach)意思是在 每次每一个路由改变的时候都得执行一遍。它的三个参
07
2020
04

axios和ajax的区别:

1.区别 axios是通过promise实现对ajax技术的一种封装,就像jQuery实现ajax封装一样。 简单来说: ajax技术实现了网页的局部数据刷新,axios实现了对ajax的封装。 axios是ajax ajax不止axios。Ajax:Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。Aj
07
2020
04

vue动态路由传值:

vue动态路由配置,vue路由传参动态路由:  当我们很多个页面或者组件都要被很多次重复利用的时候,我们的路由都指向同一个组件,这时候从不同组件进入一个"共用"的组件,并且还要传参数,渲染不同的数据  这就要用到动态路由跟路由传参了!首先我们来了解下router-link这个组件:  简单来说,它是个导航器,利用to属性导航到目标组件,并且在渲染的时候会自动生成一个a标签,当然官方也有说明,加个tag标签属性就可以渲染不同的标签,可以浏览器端查看到  并且当一个导航器被激活的
07
2020
04

vue自定义指令:

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

vue生命周期函数:

beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyedajax操作是在monted生命周期中完成的。
07
2020
04

vue父子组件之间的传值:

简单来说,子组件通过props方法接受父组件传来的值,子组件通过$emit方法来向父组件发送数据。(具体案例可以看我之前写的博客)。
07
2020
04

说下你了解的axios相关配置属性?

答:`url`是用于请求的服务器URL`method`是创建请求时使用的方法,默认是get`baseURL`将自动加在`url`前面,除非`url`是一个绝对URL。它可以通过设置一个`baseURL`便于为axios实例的方法传递相对URL`transformRequest`允许在向服务器发送前,修改请求数据,只能用在'PUT','POST'和'PATCH'这几个请求方法`headers`是即将被发送的自定义请求头headers:{'X-
07
2020
04

axios有哪些常用方法?

答:一、axios.get(url[, config])   //get请求用于列表和信息查询二、axios.delete(url[, config])  //删除三、axios.post(url[, data[, config]])  //post请求用于信息的添加四、axios.put(url[, data[, config]])  //更新操作
07
2020
04

axios 是什么

1. Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。前端最流行的 ajax 请求库,2. react/vue 官方都推荐使用 axios 发 ajax 请求
07
2020
04

axios 特点

1. 基于 promise 的异步 ajax 请求库,支持promise所有的API2. 浏览器端/node 端都可以使用,浏览器中创建XMLHttpRequests3. 支持请求/响应拦截器4. 支持请求取消5. 可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据6. 批量发送多个请求7. 安全性更高,客户端支持防御 XSRF,就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻
07
2020
04

axios 常用语法

axios(config): 通用/最本质的发任意类型请求的方式axios(url[, config]): 可以只指定 url 发 get 请求axios.request(config): 等同于 axios(config)axios.get(url[, config]): 发 get 请求axios.delete(url[, config]): 发 delete 请求axios.post(url[, data, config]): 发 post 请求axios.put(url[, data,
07
2020
04

axios为什么既能在浏览器环境运行又能在服务器(node)环境运行?

axios在浏览器端使用XMLHttpRequest对象发送ajax请求;在node环境使用http对象发送ajax请求。var defaults.adapter = getDefaultAdapter();function getDefaultAdapter () { var adapter;    if (typeof XMLHttpRequest !== 'undefined') {     // 浏览器环境&nb
07
2020
04

axios相比原生ajax的优点

ajax的缺点本身是针对MVC的编程,不符合现在前端MVVM的浪潮基于原生的XHR开发,XHR本身的架构不清晰。JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)不符合关注分离(Separation of Concerns)的原则配置和调用方式非常混乱,而且基于事件的异步模型不友好。
06
2020
04

Hibernate的五个核心接口

1.Configuration 接口:配置Hibernate,根据其启动hibernate,创建 SessionFactory 对象; 2.SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建 session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应 用的多个线程共享,是重量级、二级缓存; 3.Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,&n
06
2020
04

什么是SessionFactory,她是线程安全么?

SessionFactory 是Hibrenate单例数据存储和线程安全的,以至于可以多线程同时访问。一个SessionFactory 在启动的时候只能建立一次。SessionFactory应该包装各种单例以至于它能很简单的在一个应用代码中储存.
06
2020
04

在数据库中条件查询速度很慢的时候,如何优化?

1.建索引 2.减少表之间的关联 3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面 4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据
06
2020
04

JDBC hibernate 和 ibatis 的区别

jdbc:手动 手动写sql delete、insert、update要将对象的值一个一个取出传到sql中,不能直接传入一个对象。 select:返回的是一个resultset,要从ResultSet中一行一行、一个字段一个字段的取出,然后封装到一个对象中,不直接返回一个对象。 ibatis的特点:半自动化 sql要手动写 delete、insert、update:直接传入一个对象 select:直接返回一个对象 h
06
2020
04

Detached Object(游离对象)有什么好处

Detached Object(游离对象)可以传递到任何层直到表现层而不是用任何DTO(DataTransfer Objects). 然后你还可以重新把游离对象赋给另外一个Session.
06
2020
04

谈谈Hibernate中inverse的作用

inverse属性默认是false,就是说关系的两端都来维护关系。 比如Student和Teacher是多对多关系,用一个中间表TeacherStudent维护。Gp)i 如果Student这边inverse=”true”, 那么关系由另一端Teacher维护,就是说当插入Student时,不会操作TeacherStudent表(中间表)。只有Teacher插入或删除时才会触发对中间表的操作。所以两边都inverse=”true”是不对的,会导致任何操作都不触发对中间表的影响
06
2020
04

Hibernate有哪几种查询数据的方式

3种:hql、条件查询QBC(QueryBy Criteria)、原生sql (通过createSQLQuery建立)
06
2020
04

如何优化Hibernate?

1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰
06
2020
04

Hibernate的查询方式

Sql、Criteria,objectcomposition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数
06
2020
04

说下Hibernate的缓存机制

内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据 c) 第三方缓存的实现
06
2020
04

Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、来实现类之间的关系。
06
2020
04

Hibernate是如何延迟加载?

当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
06
2020
04

Hibernate工作原理及为什么要用?

1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简
06
2020
04

hibernate里面的sorted collection 和ordered collection有什么区别

sorted collection是在内存中通过Java比较器进行排序的 ordered collection是在数据库中通过order by进行排序的
06
2020
04

hibernate都支持哪些缓存策略

Read-only: 这种策略适用于那些频繁读取却不会更新的数据,这是目前为止最简单和最有效的缓存策略 * Read/write:这种策略适用于需要被更新的数据,比read-only更耗费资源,在非JTA环境下,每个事务需要在session.close和session.disconnect()被调用 * Nonstrict read/write: 这种策略不保障两个同时进行的事务会修改同一块数据,这种策略适用于那些经常读取但是极少更新的数据 * Transactio
06
2020
04

如何在控制台看到hibernate生成并执行的sql

在定义数据库和数据库属性的文件applicationConfig.xml里面,把hibernate.show_sql 设置为true 这样生成的SQL就会在控制台出现了 注意:这样做会加重系统的负担,不利于性能调优
06
2020
04

比较hibernate的三种检索策略优缺点

1立即检索; 优点: 对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象; 缺点: 1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间; 2延迟检索: 优点: 由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间; 缺点: 应用程序如果希望访问游离状态代理类实例,
06
2020
04

hibernate的三种状态之间如何转换

当对象由瞬时状态(Transient)一save()时,就变成了持久化状态; 当我们在Session里存储对象的时候,实际是在Session的Map里存了一份, 也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象(Persistent)。 Session 一 Close()了,它的缓存也都关闭了,整个Session也就失效了,这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。 当游离状态(Detached)update()
06
2020
04

update和saveOrUpdate的区别?

update()和saveOrUpdate()是用来对跨Session的PO进行状态管理的。 update()方法操作的对象必须是持久化了的对象。也就是说,如果此对象在数据库中不存在的话,就不能使用update()方法。 saveOrUpdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会 更新数据库中的对象;如果是未持久化的对象使用此方法,则save到数据库中。
05
2020
04

什么是Hibernate的并发机制?怎么去处理并发问题?

Hibernate并发机制:a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次, 然后就丢弃。  如果一个Session 实例允许共享的话,那些支持并发运行的,例如Http request,session beans将会导致出现资源争用。  如果在Http Session中有hibernate的Session的话,就可能会出现同步访问Http Session。只要用户足够快的点击
05
2020
04

URI和URL区别

首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和
05
2020
04

delete 与Truncate区别?

1)Truncate 是DDL 语句,DELETE 是DML语句。2) Truncate 的速度远快于DELETE;原因是: 当执行DELETE操作时所有表数据先被COPY到回滚表空间,数据量不同花费时间长短不一。而TRUNCATE 是直接删除数据不进回滚表空间。3) delete 数据可以运行Rollback 进行数据回滚。而Truncate 则是永久删除不能回滚。4) Truncate 操作不会触发表上的delete触发器,而delete 会正常触发。5) Truncate 语句不能带whe
05
2020
04

打印类的加载情况及对象的回收情况

这个可以通过配置JVM的启动参数,打印这些信息(到屏幕(默认也会到catalina.log中)或者文件),具体参数如下: -XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs] -XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088
05
2020
04

监视Tomcat的内存使用情况

使用JDK自带的jconsole可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等;JDK自带的jvisualvm可以下载插件(如GC等),可以查看更丰富的信息。如果是分析本地的Tomcat的话,还可以进行内存抽样等,检查每个类的使用情况
05
2020
04

关于Tomcat的session数目

这个可以直接从Tomcat的web管理界面去查看即可 ;或者借助于第三方工具Lambda Probe来查看,它相对于Tomcat自带的管理稍微多了点功能,但也不多 ;
05
2020
04

专业点的分析工具有

IBM ISA,JProfiler、probe 等,具体监控及分析方式去网上搜索即可
05
2020
04

添加JMS远程监控

对于部署在局域网内其它机器上的Tomcat,可以打开JMX监控端口,局域网其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不支持),同样是在JVM启动参数中配置即可,配置如下: -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.71.38 设置JV
05
2020
04

共享session处理

目前的处理方式有如下几种: 1).使用Tomcat本身的Session复制功能 参考http://ajita.iteye.com/blog/1715312(Session复制的配置) 方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率 2).使用第三方来存放共享Session 目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行To
05
2020
04

垃圾回收策略调优

垃圾回收的设置也是在catalina.sh中,调整JAVA_OPTS变量。 具体设置如下: JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100" 具体的垃圾回收策略及相应策略的各项参数如下: 串行收集器(JDK1.5以前主要的回收方式) -XX:+UseSerialGC:设置串行
05
2020
04

内存调优

内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。 具体设置如下: JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4" 其各项参数如下: -Xmx3550m:设置JVM最大可用内存为3550M。 -Xms355
05
2020
04

tomcat 如何优化?

1、优化连接配置.这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。参数解释:URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。minSpareThreads : 最小备用线程数,tomcat启动时的初始化的
05
2020
04

tomcat容器是如何创建servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。
05
2020
04

Tomcat有几种部署方式?

1)直接把Web项目放在webapps下,Tomcat会自动将其部署2)在server.xml文件上配置<Context>节点,设置相关的属性即可3)通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。编写XML的方式来进行设置。
05
2020
04

tomcat 有哪几种Connector 运行模式(优化)?

bio:传统的Java I/O操作,同步且阻塞IO。maxThreads="150"//Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。 minSpareThreads="25"---Tomcat初始化时创建的线程数。默认值4。如果当前没有空闲线程,且没有超过maxThreads,一次性创建的空闲线程数量。To
05
2020
04

Tomcat的缺省端口是多少,怎么修改?

1)找到Tomcat目录下的conf文件夹2)进入conf文件夹里面找到server.xml文件3)打开server.xml文件4)在server.xml文件里面找到下列信息<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/&
05
2020
04

Tomcat一个请求的完整过程

Ng:(nginx)upstream yy_001{        server 10.99.99.99:8080;         server 10.99.99.100:8080;         hash $**;         healthcheck_enabled;   &nb
05
2020
04

Tomcat工作模式?

Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;Tomcat作为独立服务器:请求来自于web浏览器;
04
2020
04

请解释如下jvm参数的含义:

-server -Xms512m -Xmx512m -Xss1024K-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。Server模式启动 最小堆内存512m 最大512m 每个线程栈空间1m 永久代256 最大永久代2
04
2020
04

你们线上应用的JVM参数有哪些。

-server (64位无需此参数)Xms6000M -Xmx6000M -Xmn500M -XX:PermSize=500M -XX:MaxPermSize=500M -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConc
04
2020
04

讲讲JAVA的反射机制。

Java程序在运行状态可以动态的获取类的所有属性和方法,并实例化该类,调用方法的功能 
04
2020
04

简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。

类加载器 就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。其他类加载器:由Java语言实现,继承自抽象类ClassLoader。扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或java.ext.dirs系统变量指定的路径中的所有类库。应用
04
2020
04

JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作 内存等。

内存屏障:为了保障执行顺序和可见性的一条cpu指令 重排序:为了提高性能,编译器和处理器会对执行进行重拍 happen-before:操作间执行的顺序关系。有些操作先发生。 主内存:共享变量存储的区域即是主内存 工作内存:每个线程copy的本地内存,存储了该线程以读/写共享变量的副本 
04
2020
04

你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。

Serial、parNew、ParallelScavenge、SerialOld、ParallelOld、CMS、G1 CMS:一、初始标记:此时标记需要用户线程停下来;二、并发标记:此时标记可以和用户线程一起运行;三、重新标记:此时标记需要用户线程停下来,主要母的是为了对并发标记的垃圾进行审核;四、并发清除:与用户线程一起与运行进行垃圾清除;缺点:     1、CMS收集器对cpu资源非常敏感;     2、CMS收集器无法
04
2020
04

JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。

Eden和Survivor的比例是8:1.        首先说如果没有Survivor区会出现什么情况:此时每触发一次Minor GC,就会把Eden区的对象复制到老年代,这样当老年代满了之后会触发Major Gc(通常伴随着MinorGC,可以看做Full GC),比较耗时。 如果只有1个Survivor区,那当Eden区满了之后,就会复制对象到Survivor区,容易产生内存碎片化。严重影响性能。所以使用2个Survivor区,始终保持有一
04
2020
04

JVM的内存结构,Eden和Survivor比例。

JVM区域总体分两类,heap区和非heap区。heap区又分为:Eden Space(伊甸园)、Survivor Space(幸存者区)、Old Gen(老年代)。非heap区又分:Code Cache(代码缓存区);Perm Gen(永久代);(jdk1.8为元空间)Jvm Stack(java虚拟机栈);Local Method Statck(本地方法栈); 1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1
04
2020
04

什么情况下会发生堆、栈内存溢出。

栈溢出:方法执行时创建的栈帧超过了栈的深度 ,最有可能就是方法递归调用。堆溢出:heap space表示堆空间,堆中主要存储的是对象。不断的new对象会导致堆中的空间溢出
03
2020
04

解释如何在Nginx服务器上添加模块?

在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时间选择。nginx状态码499:服务端处理时间过长,客户端主动关闭了连接。502错误可能原因(1).FastCGI进程是否已经启动(2).FastCGI worker进程数是否不够(3).FastCGI执行时间过长fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;(4).FastCGI Buffer不够nginx和apac
03
2020
04

用Nginx服务器解释-s的目的是什么?

用于运行Nginx -s参数的可执行文件。
03
2020
04

解释Nginx是否支持将请求压缩到上游?

您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持“gzip”编码方法的客户机或服务器使用“内容编码:gzip”来解压缩响应。解释如何在Nginx中获得当前的时间?要获得Nginx的当前时间,必须使用SSI模块、$date_gmt和$date_local的变量。Proxy_set_header THE-TIME $date_gmt;
03
2020
04

请解释什么是C10K问题?

C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。
03
2020
04

请解释ngx_http_upstream_module的作用是什么?

ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。
03
2020
04

Nginx 如何开启压缩?

开启nginx gzip压缩后,网页、css、js等静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率,给用户快的体验。虽然会消耗cpu资源,但是为了给用户更好的体验是值得的。开启的配置如下:将以上配置放到nginx.conf的http{ … }节点中。保存并重启nginx,刷新页面(为了避免缓存,请强制刷新)就能看到效果了。以谷歌浏览器为例,通过F12看请求的响应头部,如下图:gzip压缩前后效果对比:jquery原大小90kb,压缩后只有30kb。gzip虽然好用,但是一下类型
03
2020
04

Nginx 如何实现后端服务的健康检查?

方式一,利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。方式二,利用 nginx_upstream_check_module 模块对后端节点做健康检查。推荐使用。
03
2020
04

Nginx 有哪些负载均衡策略?

负载均衡,即是代理服务器将接收的请求均衡的分发到各服务器中。Nginx 默认提供了 3 种负载均衡策略:1、轮询(默认)round_robin每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。2、IP 哈希 ip_hash每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 共享的问题。当然,实际场景下,一般不考虑使用 ip_hash 解决 session 共享。3、最少连接 least_conn下一个请
03
2020
04

什么叫 CDN 服务?

CDN ,即内容分发网络。其目的是,通过在现有的 Internet中 增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度。一般来说,因为现在 CDN 服务比较大众,所以基本所有公司都会使用 CDN 服务。
03
2020
04

为什么要做动、静分离?

在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do 等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js 等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗?当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用
03
2020
04

什么是动态资源、静态资源分离?

动态资源、静态资源分离,是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离。
03
2020
04

为什么 Nginx 不使用多线程?

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量)(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。Netty、Redis 基本采用相同思路。
03
2020
04

Nginx 是如何实现高并发的?

如果一个 server 采用一个进程(或者线程)负责一个request的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。其缺点胖友应该也感觉到了,此处不述。思考下,Java 的 NIO 和 BIO 的对比哟。而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。Nginx是如何利用的呢,简单来说:同样的 4 个进程,如果采用一个进程负责一个 r
03
2020
04

请解释 Nginx 如何处理 HTTP 请求?

首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到指定的 ip 地址端口,再 listen 监听)。然后,再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进程 )出多个子进程出来。之后,子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户
03
2020
04

Squid、Varinsh、Nginx 有什么区别?

三者都实现缓存服务器的作用。所以,本问题所有的视角,都是在作为缓存服务器下来聊。1、Nginx本来是反向代理/web服务器,用了插件可以做做这个副业(缓存服务器)。但是本身不支持特性挺多,只能缓存静态文件。2、从这些功能上,Varinsh 和 Squid 是专业的 Cache 服务,而Nginx 这些是第三方模块完成。3、Varnish 本身的技术上优势要高于 Squid ,它采用了可视化页面缓存技术。在内存的利用上,Varnis h比 Squid 具有优势,性能要比 Squid 高。还有强大的
03
2020
04

LVS、Nginx、HAproxy 有什么区别?

LVS :是基于四层的转发。HAproxy : 是基于四层和七层的转发,是专业的代理服务器。Nginx :是 WEB 服务器,缓存服务器,又是反向代理服务器,可以做七层的转发。Nginx 引入 TCP 插件之后,也可以支持四层的转发。区别:LVS 由于是基于四层的转发所以只能做端口的转发,而基于 URL 的、基于目录的这种转发 LVS 就做不了。工作选择:HAproxy 和 Nginx 由于可以做七层的转发,所以 URL 和目录的转发都可以做,在很大并发量的时候我们就要选择 LVS ,像中小型公
03
2020
04

请列举 Nginx 和 Apache 之间的不同点?

轻量级,同样起 web 服务,Nginx 比 Apache 占用更少的内存及资源。抗并发,Nginx 处理请求是异步非阻塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能。最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程。Nginx 高度模块化的设计,编写模块相对简单。
03
2020
04

什么是反向代理?

反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理总结就一句话:代理端代理的是服务端。
03
2020
04

什么是正向代理?

一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。正向代理总结就一句话:代理端代理的是客户端。例如说:? 我们使用的翻墙软件,OpenVPN 等等。
03
2020
04

使用“反向代理服务器”的优点是什么?

反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和 Web 服务器之间的中间层。这对于安全方面来说是很好的,特别是当我们使用 Web 托管服务时。这里,先不考虑负载均衡。
03
2020
04

Nginx 有哪些优点?

跨平台、配置简单。非阻塞、高并发连接处理 2-3 万并发连接数,官方监测能支持 5 万并发。内存消耗小开启 10 个 Nginx 才占 150M 内存。成本低廉,且开源。稳定性高,宕机的概率非常小。
03
2020
04

Nginx 常用配置?

worker_processes  8; # 工作进程个数worker_connections  65535; # 每个工作进程能并发处理(发起)的最大连接数(包含所有连接数)error_log         /data/logs/nginx/error.log; # 错误日志打印地址access_log      /data/logs/nginx/access.log; # 进入日志打印地址log_fo
03
2020
04

Nginx 常用命令?

启动 nginx 。停止 nginx -s stop 或 nginx -s quit 。重载配置 ./sbin/nginx -s reload(平滑重启) 或 service nginx reload 。重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。查看 nginx 版本 nginx -v 。检查配置文件是否正确 nginx -t 。显示帮助信息 nginx -h 。
03
2020
04

fastcgi 与 cgi 的区别?

1)cgiweb 服务器会根据请求的内容,然后会 fork 一个新进程来运行外部 c 程序(或 perl 脚本…), 这个进程会把处理完的数据返回给 web 服务器,最后 web 服务器把内容发送给用户,刚才 fork 的进程也随之退出。如果下次用户还请求改动态脚本,那么 web 服务器又再次 fork 一个新进程,周而复始的进行。2)fastcgiweb 服务器收到一个请求时,他不会重新 fork 一个进程(因为这个进程在 web 服务器启动时就开启了,而且不会退出),web 服务器直接把内容
03
2020
04

请解释一下什么是 Nginx ?

Nginx ,是一个 Web 服务器和反向代理服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。目前使用的最多的 Web 服务器或者代理服务器,像淘宝、新浪、网易、迅雷等都在使用。Nginx 的主要功能如下:作为 http server (代替 Apache ,对 PHP 需要 FastCGI 处理器支持)FastCGI:Nginx 本身不支持 PHP 等语言,但是它可以通过 FastCGI 来将请求扔给某些语言或框架处理。反向代理服务器实现负载均衡虚拟主机
03
2020
04

SpringBoot执行流程

1)开始请求,2)收集各种条件和回调接口,3)通知started(),4)创建并准备Environment,5)通告environmentPrepared()6) 创建并初始化ApplicationContext7) 通告contextPrepare(),通告contextLoaded()8) 调用ApplicationContext的refresh()方法,完成最终程序启动9)执行ApplicationRunner和CommandlineRunner通告finished()10)结束
03
2020
04

SpringBoot2.0新特性

Spring Boot 2是完全基于java8,, http请求方面, 引入了Webflux, 他是基于Spring Webflux, 它是一个新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。性能对比于之前的同步方式有了一定的提高db方面,默认引入了HikariCP,替代了之前的tomcat-pool作为底层的数据库连接池, 对比于tomcat-pool, HikariCP拥有更好的性能,总而言之就是提
03
2020
04

SpringBoot性能如何优化

tomcat内存调优更改文件(catalina.sh)启动部分的优化可以移除 @SpringBootApplication 和 @ComponentScan 两个注解来禁用组件自动扫描,然后在我们需要的 bean 上进行显式配置:
03
2020
04

SpringBoot如何实现打包

pom文件中主要针对不同的环境设置对应的profile,其中默认激活的是dev环境的配置然后配置需要包含和过滤的application.properties然后使用maven的打包命令实现不同环境打包即可
03
2020
04

热部署原理与热加载区别是什么?

部署方式热部署在服务器运行时重新部署项目热加载在运行时重新加载class实现原理热部署直接重新加载整个应用热加载在运行时重新加载class使用场景热部署更多的是在生产环境使用热加载则更多的实在开发环境使用
03
2020
04

SpringBoot热部署使用什么?

Spring Loadedspring-boot-devtools
03
2020
04

@EnableAutoConfiguration作用

从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器
03
2020
04

SpringBoot中用那些注解

@SpringBootApplication@Component:@RestController
03
2020
04

SpringBoot启动方式

IDE 运行Application这个类的main方法在springboot的应用的根目录下运行mvn spring-boot:run使用mvn install 生成jar后运行
02
2020
04

vue的优点是什么?

低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。可测试。界面素来是比较
02
2020
04

axios的特点有哪些?

答:一、Axios 是一个基于 promise 的 HTTP 库,支持promise所有的API二、它可以拦截请求和响应三、它可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据四、安全性更高,客户端支持防御 XSRF
02
2020
04

去掉Bootstrap表格边框和设置表格间距

Bootstrap默认表格样式,为了区别我加了背景色这个表格是默认带边框的,如何去掉边框,直接上代码:*{     border: 0px solid transparent !important; }有时候我们需要表格和表格之间有间距,然而table的tr没有margin,即使设置了margin也没用这个时候通过border-collapse和border-spacing来设置table{    border-collapse:sep
02
2020
04

bootstrap和vue哪个好

BootStrap:特点:栅格系统,使用简单,上手容易。 专为响应式页面而生. 一套代码就可以自适应平板电脑和PC。缺点:缺少一套有力的成体系的组件(当时调查的时候还没有, 现在据说有了), 我在实际使用时, 发生了作用域冲突的问题, 如果没有整理好一整套组件, 开发很累。Vue:特点:站在了React的肩膀上, 许多方面更出色了: 1.数据的双向绑定. 数据改, 页面改. 页面改, 数据也改。2.页面的呈现据说比React还快。3.组件化(实际上React也有组件化). 这和Boot
02
2020
04

Bootstrap布局:栅格系统详解

概要,栅格系统针对pc,pad,移动端开发出响应式web页面,根据不同屏幕分辨率有针对不同的解决方法。(0.1, 屏幕设备尺寸大于1200px 选择col-lg (0.2. 屏幕设备尺寸在970px到1200px 选择col-md (0.3. 屏幕设备尺寸在768px到970px 选择col-sm (0.4. 屏幕设备尺寸小于768px 选择col-xs1.栅格系统把页面分为12栏(最多12栏),如下: <!DOCTYPE html><h
02
2020
04

宏定义的用法,看下面这个程序,求出结果

#include <stdio.h>#define S(a,b) a*b int main(void){int n = 3;int m = 5;printf("%d",S(n+m,m+n)); return 0;}这道题容易出现的错误结果是64,得到这个结果肯定是这样理解的(3+5)*(5+3)。其实并不是,大家要理解宏定义的概念,宏定义只是简单的符号替换,而不做其他处理,所以这里得到的结果是 3+5*5+3=31.大家看看运行结果:fs@
02
2020
04

a=3,b=5,不用第三变量temp,对a和b的值进行交换

如果有第三者temp,a和b交换非常方便:temp = a;a = b;b =temp;若无temp,可以这样做:a = a + b;b = a - b;a = a - b;当然,我们可以利用C语言的位运算符:a = 3;b = 5;a ^= b;b ^= a;a ^= b;原理是a ^ b ^ b == a; a ^ b == b ^ a;
02
2020
04

编码实现某一变量某位清0或置1

给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清a的bit 3,在以上两个操作中,要保持其他位不变。笔者认为,在对ARM寄存器操作时会经常用到这一块,所以要注意这块:#define BIT3 (0x1 << 3 ) Satic int a;//设置a的bit 3: void set_bit3( void ) {       a |= BIT3; //将a第3位置1 }//清a的bit 3 
02
2020
04

用C编写一个死循环程序

while(){}其实还有for(;;)说明:很多种途径都可实现同一种功能,但是不同的方法时间和空间占用度不同,特别是对于嵌入式软件,处理器速度比较慢,存储空间较小,所以时间和空间优势是选择各种方法的首要考虑条件。
02
2020
04

extern有什么作用

extern标识的变量或者函数声明其定义在别的文件中,提示编译器遇到此变量和函数时在其它模块中寻找其定义。
02
2020
04

static有什么作用

static在C中主要用于定义全局静态变量、定义局部静态变量、定义静态函数。在C++中新增了两种作用:定义静态数据成员、静态函数成员。注意:因为static定义的变量分配在静态区,所以其定义的变量的默认值为0,普通变量的默认值为随机数,在定义指针变量时要特别注意。
02
2020
04

关键字const是什么

const用来定义一个只读的变量或对象。主要优点:便于类型检查、同宏定义一样可以方便地进行参数的修改和调整、节省空间,避免不必要的内存分配、可为函数重载提供参考。说明:const修饰函数参数,是一种编程规范的要求,便于阅读,一看即知这个参数不能被改变,实现时不易出错。
02
2020
04

typedef和define有什么区别

(1)用法不同:typedef用来定义一种数据类型的别名,增强程序的可读性。define主要用来定义常量,以及书写复杂使用频繁的宏。(2)执行时间不同:typedef是编译过程的一部分,有类型检查的功能。define是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。(3)作用域不同:typedef有作用域限定。define不受作用域约束,只要是在define声明后的引用都是正确的。(4)对指针的操作不同:typedef和define定义的指针时有很大的区别
02
2020
04

编码实现直接选择排序

选择排序实现代码如下:#include <stdio.h> int main(){ int i,j,t; int array[10]={2,7,1,8,5,9,3,4,0,6}; printf("\nDisplay this array:\n"); for(i=0;i<10;i++) {  printf("%d ",array[i]); } prin
02
2020
04

编码实现冒泡排序

冒泡排序编程实现如下:#include <stdio.h>#define LEN 10 int main(){ int a,i,j; int ARRAY[10]={23,1,4,9,6,17,24,56,98,72}; printf("\n"); printf("Display this array:\n"); for(a=0;a<10;a++) {  pri
02
2020
04

编码实现直接插入排序

直接插入排序编程实现如下:#include <stdio.h> int main(){ int i,temp,p; int array[10] = {2,6,1,9,4,7,5,8,3,0}; printf("Display this array:\n"); for(i=0;i<10;i++) {  printf("%d ",array[i]); } &nbs
02
2020
04

简述队列和栈的异同

队列和栈都是线性存储结构,但是两者的插入和删除数据的操作不同,队列是“先进先出”,栈是“后进先出”。注意:区别栈区和堆区。堆区的存取是“顺序随意”,而栈区是“后进先出”。栈由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。它与本题中的堆和栈是两回事。堆栈只是一种数据结构,而堆区和栈区是程序的不同内存存储区域。
02
2020
04

链表与数组的区别

数组和链表有以下几点不同:(1)存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间,长度可变,每个结点要保存相邻结点指针。(2)数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,效率低。(3)数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。(4)越界问题:链表不存在越界问题,数组有越界问题。说明:在选择数组或链表数据结构时,一定要根据实际需要进行选择。数组便于查询,链表便于插入删除。数组节省空间但是长度固定,
02
2020
04

简述strcpy sprintf与mencpy的区别

三者主要有以下不同之处:(1)操作对象不同,strcpy的两个操作对象均为字符串,sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串,memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。(2)执行效率不同,memcpy最高,strcpy次之,sprintf的效率最低。(3)实现功能不同,strcpy主要实现字符串变量间的拷贝,sprintf主要实现其他数据类型格式到字符串的转化,memcpy主要是内存块间的拷贝。说明:strcpy、sprintf与memc
02
2020
04

简述C、C++程序编译的内存分配情况

C、C++中内存分配方式可以分为三种:(1)从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。(2)在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配:即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用fr
02
2020
04

a 和 &a 有什么区别

请写出以下代码的打印结果,主要目的是考察a和&a的区别。#include<stdio.h> void main( void ) {      int a[5]={1,2,3,4,5};     int *ptr=(int *)(&a+1);     printf("%d,%d",*(a+1),*(ptr-1)); &nb
02
2020
04

一个指针可以是volatile吗?

可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断服务子程序修改一个指向一个buffer的指针时,必须用volatile来修饰这个指针。
02
2020
04

写一个“标准”宏MIN

#define min(a,b) ((a)<=(b)?(a):(b))
02
2020
04

sizeof和strlen的区别

sizeof和strlen有以下区别: sizeof是一个操作符,strlen是库函数。 sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。 编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。 数组做sizeof的参数不退化,传递给strlen就退化为指针了。注意:有些是操作符看起来像是函数,而有些函数名看起来又像操
02
2020
04

实现strcat

 char* MyStrCat( char *pDest, const char *pSrc )    {         if( nullptr == pDest || nullptr == pSrc )         {             return nullptr;   &
02
2020
04

int (*s[10])(int) 表示的是什么?

int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
02
2020
04

将程序跳转到指定内存地址 要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000 = 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?

((void ()( ))0x100000 ) ( );  首先要将0x100000强制转换成函数指针,即:  (void ()())0x100000  然后再调用它:  ((void ()())0x100000)();  用typedef可以看得更直观些:  typedef void()() voidFuncPtr;  *((voidFuncPtr)0x100000)();
02
2020
04

复杂声明 void * ( * (*fp1)(int))[10]; float (( fp2)(int,int,int))(int); int (* ( * fp3)())10; 分别表示什么意

【标准答案】1.void * ( * (fp1)(int))[10]; fp1是一个指针,指向一个函数,这个函数的参数为int型,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个void型指针。2.float (( fp2)(int,int,int))(int); fp2是一个指针,指向一个函数,这个函数的参数为3个int型,函数的返回值是一个指针,这个指针指向一个函数,这个函数的参数为int型,函数的返回值是float型。3.int (* ( * fp3)()
02
2020
04

const 与 #define 的比较 ,const有什么优点?

【参考答案】(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 。(2) 有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。
02
2020
04

实现strcpy.

 char* MyStrCpy( char *pDest, const char *pSrc )    {        if( nullptr == pDest || nullptr == pSrc )        {           return nullptr;       
02
2020
04

C语言中数字转字符串的方法是什么?(itoa)请实现他

char* Myitoa( char *pDest, int val, int radix )   {       assert( NULL != pDest );       assert( radix > 1 );       const bool IsMinu = val < 0;       cha
02
2020
04

如何判断链表是否有环

bool IsLoop( Node *pHead )  {      //[H->A->B->C->A]       assert( NULL != pHead );       Node *pNext = pHead->mpNext;       Node *pNextNext = pHead->mp
02
2020
04

统计出一个字符串每种字母出现的次数要求时间复杂度为O(n)

void CountLetter( const char *pSrc )   {       int count[ 256 ] = {};      for( ; *pSrc !='\0'; ++pSrc )      {          const char &c = *pSrc;  &nb
02
2020
04

选择排序的思想是什么?( 每次找到最大或最小的值放在数组的低位上 )请实现它

void SelectSort( int *pArray, int count )  {      for( int i = 0; i < count; ++i )      {          //默认低位元素最小          int MinValue = pArray[ i ];    &n
02
2020
04

冒泡排序的思想是什么?(升序排序中越小的数往低位走,越大的数往高位走,每次与相邻元素比较导致的特点)请实现它

void BubbleSort( int *pArray, int count )   {       //eg.[6][8][8][0][9][1]      //i = 0,j < 5    [6][8][0][8][1][9]       //i = 1,j < 4    [6][0][8][1][8][9]
02
2020
04

已知两个数组有序实现一个方法将他们合并后任然有序

void MergeSort( int *pMerge, int *p1, int p1len, int *p2, int p2len )   {      assert( nullptr != pMerge && nullptr != p1 && nullptr != p2 );                  
02
2020
04

main 函数执行以前,还会执行什么代码?

答案:全局对象的构造函数会在main 函数之前执行。
02
2020
04

C++是不是类型安全的?

答案:不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)。C#是类型安全的。
02
2020
04

实现一个算法找到数组中第二大的数

int FindSec( int *p, int len )    {      assert( nullptr != p );       int maxv = p[ 0 ];       int secv = p[ 0 ];      for( int i = 1; i < len; ++i )    &nb
02
2020
04

C与C++的区别?

C是面向过程,C++面向对象,C是C++的一个子集,C++还有继承多态分装等特性
02
2020
04

C++11的新特性?C++14?C++17

C++11:auto关键字,nullptr,for新用法( for(auto a: b) ), 智能指针,匿名函数(lambda)等 C++14:auto关键字扩展,泛型lambda C++17:
02
2020
04

指针和引用的区别?

1.指针是一个存储内存地址的变量,指向一个内存单元;引用是变量的别名 2.用const指针,没有const引用 3.指针可以为空,引用必须初始化,不能为null 4.有多级指针,但没有多级引用 5.指针初始化后可以指向其他存储单元,引用初始化后不能改变
02
2020
04

static和const区别?

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间
02
2020
04

const和define的区别?

1.define在预处理阶段展开,const是在编译运行阶段使用 2.define没有类型检查,const在编译器有运行检查 3.define没有分配内存,const会分配存储空间 4.const可以节省空间,const常量在程序运行中只有一份拷贝(静态区), 而define有若干个拷贝 5.编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。 6.
02
2020
04

define和typedef的区别?

1.typedef常用于定义一个标识符及关键字的别名,不实际分配内存空间;define为宏定义语句,在预处理过程中完成,缺少类型检测 2.typdef和define不同,不仅仅是单纯的类型替换 例如#define INT int* typedef int* pINT;INT a, b;   //a是int*类型,b是intpINT c, d;  //c和d都是int*
02
2020
04

struct和class的区别?

1.两者都可以用成员函数,变量,以及可继承 2.struct默认权限为public, class为private 3.struct默认继承方式为public,class为private
02
2020
04

C++中的重载,覆盖,隐藏的区别?

1.重载:同一作用域内,函数名相同,但是参数的类型与顺序是不同的函数组为重载函数(不考虑返回值类型) 2.覆盖(重写):派生类中存在重新定义的函数。函数名,参数列表与返回值都和基类一致。基类的函数必须要有virtual修饰 3.隐藏:派生类存在和基类函数名相同的函数,基类可以不是virtual函数,参数列表和返回值也可以不同。
02
2020
04

C++多态的实现,虚函数原理

多态: 指当不同的对象收到相同的消息时,产生不同的动作 1.编译时多态(静态绑定):函数重载,运算符重载 2.运行时多态(动态绑定):虚函数 虚函数: 1.虚函数是通过一张虚函数表实现的(编译器处理虚函数的方法:为每个类对象添加一个隐藏成员,隐藏成员中保存了一个指向函数地址数组的指针,称为虚表指针,这种数组成为虚函数表) 2.虚函数表中主要存放勒种虚函数的地址,用于解决继承,重写的问题 3.继承的时候,若派生类重写了虚函数,则原先指向基
02
2020
04

C++如何实现一个接口

抽象类,使用纯虚函数
02
2020
04

C++虚继承的作用

用于解决多重继承的问题: 不同对象继承的同一基类会在子类中存在的多份拷贝,浪费存储空间,并且造成二义性 底层的实现:虚继承的时候,子类都会有一个虚基类的指针和虚基类表,所以基类只存在一份拷贝,避免了二义性
02
2020
04

C++中的构造函数

1.默认构造函数 2.一般构造函数 3.拷贝构造函数 4.转换构造函数
02
2020
04

C++的内存模型

1.堆区(动态区):用于存放new分配的变量 2.栈区:用于存放局部变量 3.静态存储区:用于保存全局变量和静态变量 4.常量存储区:存储常量,字符串常量等 5.代码区:存储代码 关于自由存储区网上意见不同,有的认为可以等价于堆区 5.自由存储区:存放malloc分配的变量
02
2020
04

浅拷贝和深拷贝

类中默认的复制构造函数进行的是浅拷贝。 1.浅拷贝只是对指针的拷贝,拷贝后指向同一内存空间;深拷贝不只是对指针拷贝,还对内容进行的拷贝,指向不同的地址 2.浅拷贝容易造成内存泄漏(析构的时候析构了两次)
02
2020
04

new/delete和malloc/free的区别

1.malloc/free是库函数, new/delete是操作符 2.malloc/free只是单纯的申请空间,new/delete还会调用构造函数和析构函数 3.malloc不抛出异常,new会抛出异常
02
2020
04

STL中unordered_map和map的区别

1.unordered_map底层为hashtable, map底层为红黑树 2.unordered_map是无序的
02
2020
04

STL中set和map的区别

1.两者的底层都是红黑树 2.set的节点是一个元素,map的节点是一对元素(key和value) 3.元素都会被自动排序 4.都不允许键值重复 5.set不能改变值,因为key=value;map可以通过key改变value
02
2020
04

STL红黑树的实现

1.红黑树是一个二叉搜索树 2.满足4条规则:a.节点不是红色就是黑色b.根节点为黑色c.如果节点为红色,子节点必须为黑色d.任意节点到null的黑色节点数相同) 3.通过旋转维持红黑树的结构
01
2020
04

封装、继承、多态、虚函数

a、封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式好处:将变化隔离、便于使用、提高复用性、提高安全性原则:将不需要对外提供的内容隐藏起来,把属性隐藏,提供公共方法对其访问b、继承:提高代码复用性;继承是多态的前提注:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可自己用this指定自身的其他构造函数c、多态:是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象好处:提高了程序的扩展性弊
01
2020
04

什么是面向对象

面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能通过对象来实现的,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次的。面向对象三大特征:封装性、继承性、多态性。其中封装性是指隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安全性。对于继承性,就是两种事物间存在着一定的所属关系,那么继承的类就可以从被继承的类中获得一些属性和方法;这就提高了代码的复用性。继承是作为多态的前提的。
01
2020
04

C++和C的区别

C++在C的基础上添加类;C主要是面向过程的,C++主要是面向对象的;C主要考虑通过一个过程将输入经过各种运算后得到一个输出,C++主要考虑是如何构造一个对象模型,让这个模型契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出。
01
2020
04

用简介语言描述C++

C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++是一种中级语言,综合了高级语言和低级语言的特点。C++是C的一个超集,事实上,任何合法的C程序都是合法的C++程序。注:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查的。所以C++是在编译时执行类型检查的。
01
2020
04

#ifdef x #define x … #endif 作用

防止头文件在被多次引用的时候重复定义,这是C和C++的所有编译器通用的。但是微软的编译器还提供了另外一种方式#pragma once因为#ifdef ...这种方法是利用宏定义特性来保证不会被重复引用的,但是#ifdef 这个宏定义可以在文件的任何地方使用,所以编译器必须将文件读完才能完成工作。但是#pragma once是单独的一个宏定义,编译器只要可以立即标记,所以第二种更快,但无法跨平台。
01
2020
04

#include 和 #include ""的区别

#include用来指明引用的头文件,但是一般只有相对路径,不会引用完整路径。#include <> 表明从预定的缺省路径下找头文件,而#include ""表明先从本文件的当前目录下查找,如果没有,再按照#include <>预定的缺省路径下查找。
01
2020
04

使用jdbc操作数据库存在的缺点?

答:1.频繁的创建连接和释放资源,造成系统资源浪费。       2.sql语句在代码中硬编码。       3.使用preparedStatement向占位符传参数存在硬编码。       4.对结果集解析存在硬编码。
01
2020
04

介绍一下Mybatis框架。

答:Mybatis是一个优秀的持久层框架。它和Hibernate一样,对jdbc操作数据库的过程进行了封装。它本来叫iBatis,是apache公司的一个开源项目,但在2010年的时候迁移到了Google公司,并改名为Mybatis。
01
2020
04

使用Mybatis的mapper接口调用时候有哪些要求?

 1) Mapper接口方法名和Mapper.xml中定义的每个SQL的id相同; 2) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sqlparameterType类型相同; 3) Mapper接口方法的输入输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同; 4) Mapper.xml文件中的namespace,就是接口的类路径。
01
2020
04

MyBatis与hibernate有哪些不同 ?

1)Mybatis MyBatis 是支持定制化 SQL、存储过程以及高级映射的一种持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis它不完全是一个ORM(对象关系映射)框架;它需要程序员自己编写部分SQL语句。Mybatis可以通过xml或者注解的方式灵活的配置要运行的SQL语句,并将java对象和SQL语句映射生成最终的执行的SQL,最后将SQL执行的结果在映射生成java对象。 Mybatis程序员可以直接的编写原生态的SQL
01
2020
04

Mybatis编程步骤 ?

Step1:创建SQLSessionFactory Step2:通过SQLSessionFactory创建SQLSession Step3:通过SQLSession执行数据库操作 Step4:调用session.commit()提交事物 Step5:调用session.close()关闭会话
01
2020
04

Mybatis与Spring 的整合?

1) Spring Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架;AOP和IOC是Spring框架重要的两个模块;控制反转就是改变对象的创建方式,将对象的创建和维护有开发人员创建改为由容器帮我们完成创建和维护。 2) Mybatis是支持SQL查询,存储过程和高级映射的优秀持久成框架。Mybatis几乎是消除了使用JDBC存在的重复创建和关闭连接,以及结果集查询的问题。它使用简单的xml或者注解用于配置和映射,将java的POjOs映射成数据库中的记录。3)
01
2020
04

Mybatis的表关联的映射?

1) 一对一关联 Property: 对象属性名称 javaType: 对象属          性的类型 column: 所对应的外键字段的名称 select: 使          用另一个查询封装的结果2)一对多关联 3)多对多关联
01
2020
04

Mybais 常用注解 ?

1.@Insert : 插入sql , 和xml insert sql语法完全一样2.@Select : 查询sql,  和xml select sql语法完全一样3.@Update : 更新sql,  和xml update sql语法完全一样4.@Delete : 删除sql,  和xml delete sql语法完全一样5.@Param :  入参6.@Results :结果集合7.@Result : 结果
01
2020
04

Mybatis 分页查询?

1.Mybatis本身有分页查询,但是并不是正真的分页查询,它是把数据查出来放在内存里面,你想要什么就给你什么。2.我们使用Mybatis实现分页查询的时候,是要实现真分页查询,就是要用sql语句来实现分页查询。MySQL和Oracle两种数据库的实现方法是不一样的。3.Mysql:select * from  table  limit N , M;  其中:N表示从第几页开始,M表示每页显示的条数。比如:数据库中有30条数据,要求每页显示10条,显示第2页的所有数
01
2020
04

Mybatis动态SQL?

1) 传统的JDBC的方法,在组合SQL语句的时候需要去拼接,稍微不注意就会少少了一个空格,标点符号,都会导致系统错误。Mybatis的动态SQL就是为了解决这种问题而产生的;Mybatis的动态SQL语句值基于OGNL表达式的,方便在SQL语句中实现某些逻辑;可以使用标签组合成灵活的sql语句,提供开发的效率。 2) Mybatis的动态SQL标签主要由以下几类: If语句(简单的条件判断) Choose(when/otherwise),相当于java语言中的switch,与jstl
01
2020
04

Mybatis的映射文件 ?

Mybatis 真正强大的在于它的映射文件,它和JDBC代码进行比较,可以省掉95%的代码,Mybatis就是针对SQL进行构建。 SQL映射文件中几个顶级的元素:• cache – 给定命名空间的缓存配置。• cache-ref – 其他命名空间缓存配置的引用。 • resultMap – 是最复杂也是最强大的元素,用来描述如何     从数据库结果集中来加载对象。• sql – 可被其他语句引用的可重用语句块。• insert – 映射插入语句• up
01
2020
04

Mapper编写有几种方式 ?

方式1:接口实现类集成SQLSessionDaoSupport 此方法需要编写mapper接口,mapper接口的实现类,mapper.xml文件。 方式2:使用org.mybatis.spring.mapper.MapperFactoryBean 此方法需要在SqlMapConfig.xml中配置mapper.xml的位置,还需定义mapper接口。 方式3:使用mapper扫描器 需要编写mapper.xml文件,需要mapper接口,配置mapper扫描器,使用扫描器从
01
2020
04

使用Mybatis的mapper接口调用时候有哪些要求?

1) Mapper接口方法名和Mapper.xml中定义的每个SQL的id相同; 2) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sqlparameterType类型相同 ;3) Mapper接口方法的输入输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同 ;4) Mapper.xml文件中的namespace,就是接口的类路径。
01
2020
04

简单的说一下MyBatis的一级缓存和二级缓存?

Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。
01
2020
04

SqlMapConfig.xml中配置有哪些内容?

SqlMapConfig.xml中配置的内容和顺序如下:properties(属性)settings(配置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境集合属性对象)environment(环境子属性对象)transactionManager(事务管理)dataSource(数据源)mappers(映射器)
01
2020
04

MyBatis编程步骤是什么样的?

① 创建SqlSessionFactory② 通过SqlSessionFactory创建SqlSession③ 通过sqlsession执行数据库操作④ 调用session.commit()提交事务⑤ 调用session.close()关闭会话
01
2020
04

Mybatis工作原理?

原理:通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。完成数据库的CRUD操作和事务提交,关闭SqlSession。
01
2020
04

Mybatis如何分页,分页原理?

RowBounds对象分页在Sql内直接书写,带有物理分页
01
2020
04

获取上一次自动生成的主键值?

select last _insert_id()
01
2020
04

${} 和 #{}的区别?

:简单字符串替换,把{}直接替换成变量的值,不做任何转换,这种是取值以后再去编译SQL语句。#{}:预编译处理,sql中的#{}替换成?,补全预编译语句,有效的防止Sql语句注入,这种取值是编译好SQL语句再取值。总结:一般用#{}来进行列的代替
01
2020
04

Mybatis配置一对一?

<association property="topicType" select="selectType" column="topics_type_id" javaType="com.tmf.bbs.pojo.Type"/>property:属性名select:要连接的查询column:共同列javaType:集合中元素的类型
01
2020
04

Mybatis配置一对多?

<collection property="topicComment" column="id" ofType="com.tmf.bbs.pojo.Comment" select="selectComment" />property:属性名column:共同列ofType:集合中元素的类型select:要连接的查询
01
2020
04

Mybatis的好处?

1.把Sql语句从Java中独立出来。2.封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。3.自己编写Sql语句,更加的灵活。4.入参无需用对象封装(或者map封装),使用@Param注解
01
2020
04

查询表名和返回实体Bean对象不一致,如何处理?

映射键值对即可<result column="title" property="title" javaType="java.lang.String"/>1column:数据库中表的列名property:实体Bean中的属性名
01
2020
04

Mybatis在核心处理类叫什么?

SqlSession
01
2020
04

什么情况用注解,什么情况用xml绑定?

注解使用情况:Sql语句简单时xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件)
01
2020
04

什么是Mybatis的接口绑定,有什么好处?

Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
01
2020
04

mybatis中的#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql
01
2020
04

JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。解决: Mybatis自动将j
01
2020
04

简单介绍下你对mybatis的理解?

1. mybatis配置2. SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。3. mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。4. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂5. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。6. mybatis底层自定义了Execut
01
2020
04

Mybatis是如何将SQL执行结果封装成目标对象并返回的,都有哪些映射形式?

 1. ResultMap形式。 将SQL执行结果用<ResultMap>标签映射成目标对象。    2.  使用SQL列的别名,将列的别名书写成对象属性名。
01
2020
04

Mybatis 是如何进行分页的?分页插件的原理是什么?

Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 sql 内直接书写带有物理分页的参数来完成物理分 页功能,也可以使用分页插件来完成物理分页。 分页插件的基本原理是使用 Mybatis 提供的插件接口,实现自定义插件,在插件 的拦截方法内拦截待执行的 sql,然后重写 sql,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。 
01
2020
04

当实体类中的属性名与表中的字段名不一样,怎么办?

 有两种方式:    1. 使用as 别名的方式让字段的别名与属性名一致。    2. 使用<resultMap>来映射字段名和实体类属性名的一一对应的关系 <select id="getOrder" parameterType="int"resultMap="orderresultmap">select * from orders where orde
01
2020
04

#{}与${}的区别是什么?

 #{} 是预编译处理,${}是字符串替换。     1. Mybatis处理#{}时,会将sql#{}转换为?,然后使用PreparedStatement的set方法来赋值。    2. 使用#{}能有效的预防SQL注入,提高系统的安全性。
01
2020
04

什么是Mybatis?

1. Mybatis是一个半orm(对象映射)框架,它内部封装了JDBC,开发时只需要关注SQL的本身,不需要 加载驱动、创建连接、写statement的过程,程序员直接编写原生的sql,灵活性高。    2. Mybatis可以使用XML 或注解来配置和映射原生信息,将POJO映射成数据库的记录(对象的属性字段),避免了所有JDBC代码和手动设置参数以及获取结果集。
01
2020
04

Mybatis的优点有哪些?

 1. 基于SQL编程,不会对数据库的现有设计和java应用程序造成任何影响,SQL写在XML文件里,解除了SQL与应用程序代码的耦合,方便统一管理; 提供XML标签(结果map),支持动态编写SQL语句,并可重用。      2. 与JDBC相比,减少了代码的冗余量,减少了50%的代码量,不需要手动开关连接。      3. 很好与各种数据库兼容(因为Mybatis使用JDBC连接数据库,所以只要支持JDBC连接数据库的都支
01
2020
04

Mybatis的缺点有那些?

 1. SQL语句的编写工作量较大,尤其是字段多的时候,对开发人员的编写SQL语句的功底有一定要求。     2. SQL 依赖于数据库,导致数据库移植性差,SQL语句依赖于数据库。 
01
2020
04

Mybatis的适用场合?

1.  Mybatis专注于SQL的本身,是一个足够灵活的DAO层方案。      2. 对性能要求很高的项目,使用myabtis是一个不错的选择。