最新Java面试题整理

上传人:沈*** 文档编号:63076592 上传时间:2022-03-17 格式:DOC 页数:19 大小:215KB
收藏 版权申诉 举报 下载
最新Java面试题整理_第1页
第1页 / 共19页
最新Java面试题整理_第2页
第2页 / 共19页
最新Java面试题整理_第3页
第3页 / 共19页
资源描述:

《最新Java面试题整理》由会员分享,可在线阅读,更多相关《最新Java面试题整理(19页珍藏版)》请在装配图网上搜索。

1、1 基础篇1.1 基本功1.1.1 面向对象特征封装,继承,多态和抽象1、封装 封装给对象提供了隐藏内部特性和行为的能力。 对象提供一些能被其他对象访问的方法 来改变它内部的数据。在 Java 当中,有 3 种修饰符: public , private 和 protected 。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访 问权限。下面列出了使用封装的一些好处:1) 通过隐藏对象的属性来保护对象内部的状态。2) 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。3) 禁止对象之间的不良交互提高模块化2、继承 继承给对象提供了从基类获取字段和方法的能力。

2、继承提供了代码的重用行,也可以在 不修改类的情况下给现存的类添加新特性。3、多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。 一个多态类型上 的操作可以应用到其他类型的值上面。4、抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细 节来创建类。 Java 支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术 的主要目的是把类的行为和实现细节分离开。1.1.2 final, finally, finalize的区别1、final 修饰符(关键字)如果一个 类被声明为 final ,意味着它 不能再派生出新的子类 ,不能作为父类被继承。 因

3、此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量或方法 声明为 final ,可以保证它们 在使用中不被改变 。被声明为 final 的 变量 必须在声明时给定初值 ,而在以后的引用中只能读取,不可修改。被声明为 final 的方 法也同样只能使用,不能重载。2、finally在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话) 。3、finalize方法名。 Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去 之前做

4、必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个 对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 finalize() 方法是在垃圾收 集器删除对象之前对这个对象调用的。int是基本数据类型 ,而Integer是其包装类,注意是一个类。 为什么要提供包装类呢? ?一是为了在各种类型间转化,通过各种方法的调用。否则你无法直接通过变量转化。1.1.4 重载和重写的区别override(重写)1.方法名、参数、返回值相同。2.子类方法不能缩小父类方法的访问权限。3.子类方法不能抛出

5、比父类方法更多的异常(但子类方法可以不抛出异常 )。4.存在于父类和子类之间。5.方法被定义为final不能被重写。overload(重载)1.参数类型、个数、顺序至少有一个不相冋。2.不能重载只有返回值不冋的方法名。3.存在于父类和子类、冋类中。区别点重载重写(覆写)英文Overloadi ngOverid ing定义方法名称相同,参数的类型或个数不方法名称、参数类型、返回值类型全部相同同权限对权限没要求被重与的方法不能拥有更严格的权限范围发生在一个类中发生在继承类中1.1.5 抽象类和接口有什么区别接口是公开的,里面不能有私有的方法或变量 ,是用于让别人使用的, 而抽象类是可以 有私有方法

6、或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法 ,一般的应用里,最顶级的是接口,然后是抽象类实 现接口,最后才到具体类实现。还有,接口可以实现多重继承, 而一个类只能继承一个超类 ,但可以通过继承多个接口 实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。1.1.6 说说反射的用途及实现Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架Java反射的主要功能:-确定一个对象的类-取

7、出类的modifiers,数据成员,方法,构造器,和超类.-找出某个接口里定义的常量和方法说明.- 创建一个类实例 , 这个实例在运行时刻才有名字 ( 运行时间才生成的对象 ).- 取得和设定对象数据成员的值 , 如果数据成员名是运行时刻确定的也能做到 .- 在运行时刻调用动态对象的方法 .- 创建数组 , 数组大小和类型在运行时刻才确定 , 也能更改数组成员的值 . 反射的应用很多,很多框架都有用到spri ng 的ioc/di 也是反射. javaBean和jsp之间调用也是反射.struts 的 FormBean 和页面之间也是通过反射调用.JDBC 的 classForName() 也

8、是反射 .hibernate 的 find(Class clazz) 也是反射.反射还有一个不得不说的问题, 就是性能问题, 大量使用反射系统性能大打折扣。 怎么使用 使你的系统达到最优就看你系统架构和综合使用问题啦,这里就不多说了。1.1.7 来源:说说自定义注解的场景及实现登陆、权限拦截、日志处理,以及各种 Java 框架,如 Spring , Hibernate ,JUnit 提 到注解就不能不说反射, Java 自定义注解是通过运行时靠反射获取注解。实际开发中,例如我们要获取某个方法的调用日志,可以通过AOP(动态代理机制)给方法添加切面,通过反射来获取方法包含的注解,如果包含日志注解

9、,就进行日志记录。1.1.8 HTTP请求的GET与POST方式的区别1、请求数据的方式GET请求,请求的数据会附加在 URL之后,以?分割URL和传输数据,多个参数用&连接。 URL的编码格式采用的是 ASCII编码,而不是 uniclde,即是说所有的非 ASCII字符都 要编码之后再传输。POST请求会把请求的数据放置在 HTTP请求包的包体中。因此,GET 请求的数据会暴露在地址栏中,而POST请求则不会。2、传输数据的大小在HTTP规范中,没有对 URL的长度和传输的数据大小进行限制。但是在实际开发过程 中,对于GET特定的浏览器和服务器对 URL的长度有限制。因此,在 使用GET请

10、求时, 传输数据会受到 URL长度的限制。对于POST由于不是URL传值,理论上是不会受限 制的,但是实际上各个服务器会规定对POST提交数据大小进行限制, Apache、IIS都有各自的配置。3、安全性POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面 GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作, 通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成 Cross-site reque

11、st frogery 攻击4、HTTP中的GET POST SOAP协议都是在 HTTP上运行的1.1.9 参考:与 Cookie 区别cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个 Web服务器 存储 cookie 。以后浏览器在给特定的 Web 服务器发请求的时候,同时会发送所有为 该服务器存储的 cookie 。下面列出了 session 和 cookie 的区别:无论客户端浏览器做怎么样的设置, session 都应该能正常工作。客户端可以选择禁用 cookie ,但是, session 仍然是能够工作的,因为客户端无法禁 用服务端的 session 。

12、1.1.10 JDBC 流程1、 加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM( Java 虚拟机),这通过类的静态方法 forName(String className) 实现。例如:1.1.11 equals 与 = 的区别值类型( int,char,long,boolean等)都是 用 =判断相等性 。对象引用的话, =判断引用所指的对象是否是同一个。equals 是 Object 的成员函数,有些类会覆盖( override )这个方法,用于判断对象的 等价性。例如String类,两个引用所指向的 String都是” abc”,但可能出现他们实际对

13、应的 对象并不是同一个(和 jvm 实现方式有关) ,因此用 =判断他们可能不相等,但用equals判断一定是相等的。1.2 集合1.2.1 List 和 Set 区别List,Set 都是继承自 Collection 接口List 特点: 元素有放入顺序,元素可重复Set 特点: 元素无放入顺序,元素不可重复 ,重复元素会覆盖掉(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入 Set 的 Object 必须定义 equals() 方法,另外 list 支持 for 循 环,也就是通过下标来遍历,也可以用迭代器,但是 set 只能

14、用迭代,因为他无序,无法用 下标来取得想要的值。 )Set 和 List 对比:Set: 检索元素效率低下,删除和插入效率高 ,插入和删除不会引起元素位置改变。List :和数组类似, List 可以动态增长,查找元素效率高,插入删除元素效率低 ,因为会引起其他元素位置改变。1.2.2 List 和 Map 区别List 是对象集合,允许对象重复 。Map是键值对的集合,不允许 key重复。1.2.3 Arraylist 与 LinkedList 区别Arraylist :优点: ArrayList 是实现了 基于动态数组的数据结构 ,因为 地址连续 ,一旦数据存储好了, 查询操作效率会比较高

15、(在内存里是连着放的) 。缺点:因为地址连续, ArrayList 要移动数据 , 所以插入和删除操作效率比较低。LinkedList :优点: LinkedList 基于链表的数据结构 , 地址是任意的 ,所以在开辟内存空间的时候不需要 等一个连续的地址, 对于新增和删除操作 add 和 remove ,LinedList 比较占优势。 LinkedList 适用于要头尾操作或插入指定位置的场景缺点:因为 LinkedList 要移动指针 , 所以查询操作性能比较低。适用场景分析: 当需要对数据进行对此访问的情况下选用 ArrayList ,当需要对数据进行多次增加删除修改 时采用 Link

16、edList 。1.2.4 ArrayList 与 Vector 区别publicfloat loadFactor; i.nt congurrencyLeve 1)if (I (loadFactor 0) III initialcapacity MAX_SEGMENTS) c-ncErren 匚 yLmvml = rlAX J LAMENTS;H Find powr-of-two size5 best notching argunent.?int sshift Q;int asize = 1;xhile (ssi2 c concurrncyLv&l) +s3hift;331 ze = 1;th

17、is * aementShift = 32 - ashift;thisegmentHask = gsize - 1;if (iitialCapacity 挖昭毋 CAPACITY initialCapscity = MAXIMUK_CAFACITYjitit c initialcapacity / ssize/if (c * sai2e initialCapacity)十十int cap = MTN 忙酬肝 TAEEE CAPACTTYiwhile (cap g)cap - 1;/ create seyment3 and uegmntg0Segment eO =new 5egmentloadF

18、atr(int)tcap * loadfactor), (Ha3hEntry ) new HashEntryfcap):匸马帚一,Segment as = (SeginenK/ V J) naw Segment 53iie;JAA/.puzOrderedObject (ss; SEAFE* sO);/write : f 七vyrn三工匕三 工:this .slament3 = 35;1.2.5public V (K keyf V value)(SegmentrV a;if (value nulJL七hrcw new Nn 1 l?o intFrExcept i r n (;int ha导h =

19、 hashkey;int j = (hash segmentShift) & segmentMask;if ( 9 - Seqment f7W5ArE*g&tObject/ t. dv._ Ldtilu; rcchcck(egiuentsf (j SSH.IFT + SBASB) )= null) /111 wmu工匕启nla = ensureSegmerit (j 1 ;return 3,put(key, hash, va1uef false)?public class CallableThreadTest implements Callable public static void mai

20、n(String arcs) throws InterruptedExceptionr ExecutionException CallableThreadTest ctt = n令w CallableThreadTest(); FutureTask ft 三 new FutureTask(ctt);Thread t = new Thread (ftr f,FutureTa3kM) /t.start ();System.out.printIn(MFutureTask.cet=M + ft.get (); public Integer call () throws Exception int i

21、- 0;for (; i 5; i+) Sys tem out.prin tin (Thread. ge tName() + ,f f, + i);return i;)* Constructs a code CountDownLatch initialized with the given count.Gparam count the number of times 01ink #countDown must be invoked before threads can pass through link tawait)hrows IllegalArgumentException if (cod

22、e count is negativepublicCountDownLatch(int count) if (count 0) throw new IllegalArgumentException (f,count 0fr);public voidiwaithis.sync = new Sync(count);() throws InterruptedException syncacquireSharedlnterruptibly(1);public final voidcquireSharedlnterruptiblint arg)throws InterruptedEMception if

23、 (Thread.interrupted()throw new InterruptedException(); if (tryAcquireShared(arg) 0)doAcquireSharedlnterruptibly(arg);protected inttryAcquireShared(int acquires)r&turn (getState() = 0) ? 1 : -1;Acquires in shared interruptible mode. 6param arg the acquire argumentprivate voiddoAcquireSharedlnterrupt

24、ibly(int arg)throws InterruptedException final Node node = addWaiter(Node.SHARED);boolean failed = true;final Node p = node.predecessor(); if (p = head) int r = tryAcquireShared(arg); if (r ” 0) setHeadAndPropagate(noder r); next = null; / help GC failed = false;return;if (shouldParkAfterFailedAcqui

25、ze (pr node) & parkAndChecklnterrupt()throw new InterruptedException();)finally if (failed)cancelAcquire(node);L/* Decrements the count of the latch, releasing all 讨aiting threads if* the count reaches zero.* If the current count is greater than zero then it is decremented.* If the new count is zero

26、 then all waiting threads are re-enabled for* thread scheduling purposes.* If the current count equals zero then nothing happens.*/public void countDown() syncreleaseShared(1);Releases in shared mode. Implemented by unblocking one or more threads if link #tryReleaseShared returns true.* Rparam arg t

27、he release argument This value is conveyed to* link #tryReleaseShared but is otherwise uninterpreted* and can represent anything you like.* re turn the value returned from link # t ryReleaseShared)*/public final boolean releaseShared(int arg) if (tryReleaseShared(arg) doReleaseShared();return true;r

28、eturn false;protected boolean/ Decrement count; signal when transition to zerofor (;)int c = getState(); if (c = 0)return false;int nextc if (compareAndSetState(c, nextc) r令turn nextc = 0;)Release action for shared mode 一一 signal successor and ensurepropagahi on . (Not,: For pxc 1 us i va mod a, taI

29、 aasp just: Amounts to calling unparkSuccessor of head if it needs signal.)private void* Ensure that a release propagatesr even if there are other* in-progress acquires/releases. This proceeds in the usual* way of trying to unparkSuccessor of head if it needs* signal. But if it does not, status is w

30、et to PROPAGATE to* ensure that upon release, propagation continues.* Additionallyr we must loop in case a new node is added* while we are doing this. Also, unlike other uses of* unparkSuccessor we need to know if CAS to reset status* fails, if so rechecking.for (;) Node h = head;if (h != null & h !

31、= tail) int ws h.waitStatus;if (ws = Node-SIGNAL) if (!compareAndSetWaitStatus(h, Node.SIGNALf 0) continue;/ loop Lu recheck caaeaunparkSuccessor(h); else if (ws = 0 &! comparekndS&tYJai tStatus(hf Qf Node. PROPAGATE) continue;/ loop on failed CAS/ loop if head changed)if (h = head)break;ar(2 )在spri

32、ng配置文件中加入JDK动态代理和CGLIB字节码生成的区别?(1) JDK动态代理只能对实现了接口的类生成代理,而不能针对类(2) CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成final参考:1.2.6Spring事务实现方式参考:1.2.7Spring事务底层原理参考:1.2.8如何自定义注解实现功能可以结合spring的AOP对注解进行拦截,提取注解。大致流程为:1. 新建一个注解 MyLog加在需要注解申明的方法上面2. 新建一个类MyLogAspect,通过Aspect注解使该类成为切面类。3. 通过Pointcut

33、指定切入点,这里指定的切入点为MyLog注解类型,也就是被 MyLog注解修饰的方法,进入该切入点。4. MyLogAspect 中的方法通过加通知注解(Before、Around AfterReturning 、 AfterThrowing、After等各种通知)指定要做的业务操作。1.2.9 Spring MVC 运行流程一、先用文字描述1.用户发送请求到 DispatchServlet根据请求路径查询具体的Han dler返回一个 HandlerExcutionChain给 DispatchServletHandlerExcutionChain: Handler 禾口 Intercept

34、or集合调用HandlerAdapter 适配器调用具体的Handler处理业务处理结束返回一个具体的ModelAndView给适配器ModelAndView:model - 数据模型,view - 视图名称7.适配器将 ModelAndView 给 DispatchServlet把视图名称给ViewResolver视图解析器返回一个具体的视图给DispatchServlet10. 渲染视图11. 展示给用户 二、画图解析SpringMvc 的配置1.2.104 -4y.参考:Spring MVC 启动流程1.2.114 -4y.参考:Spring 的单例实现原理1.2.12 Spring 框

35、架中用到了哪些设计模式Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:代理模式一在 AOP和remoting中被用的比较多。单例模式在 spring 配置文件中定义的 bean 默认为单例模式。模 板 方 法 用 来 解 决 代 码 重 复 的 问 题 。 比 如 RestTemplate, JmsTemplate, JpaTemplate 。工厂模式 BeanFactory 用来创建对象的实例。适配器spri ng aop装饰器spri ng data hashmapper观察者-spri ng时间驱动模型回调-Spring ResourceLoaderAware 回调

36、接口前端控制器-spring用前端控制器 DispatcherServlet对请求进行分发1.2.13 Spring 其他产品( Srping Boot 、Spring Cloud 、 SpringSecuiritySpring Data 、 Spring AMQP 等)参考:1.3 Netty1.3.1 为什么选择 NettyNetty 是业界最流行的 NIO 框架之一,它的健壮性、功能、性能、可定制性和可扩展性在 同类框架中都是首屈一指的, 它已经得到成百上千的商用项目验证, 例如 Hadoop 的 RPC 框 架 Avro 使用 Netty 作为通信框架。 很多其它业界主流的 RPC 和

37、分布式服务框架, 也使用 Netty 来构建高性能的异步通信能力。Netty 的优点总结如下: API 使用简单,开发门槛低; 功能强大,预置了多种编解码功能,支持多种主流协议; 定制能力强,可以通过 ChannelHandler 对通信框架进行灵活的扩展; 性能高,通过与其它业界主流的 NIO 框架对比, Netty 的综合性能最优; 社区活跃, 版本迭代周期短,发现的 BUG 可以被及时修复,同时, 更多的新功能会被加入; 经历了大规模的商业应用考验,质量得到验证。在互联网、大数据、网络游戏、企业应用、 电信软件等众多行业得到成功商用,证明了它完全满足不同行业的商用标准。 正是因为这些优点

38、, Netty 逐渐成为 Java NIO 编程的首选框架。1.3.2 说说业务中, Netty 的使用场景1.3.3原生的 NIO 在 JDK 版本存在 epoll bug它会导致 Selector 空轮询,最终导致 CPU 100%。官方声称在版本的 update18 修复了该问 题,但是直到版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决。该BUG以及与该BUG相关的问题单可以参见以下链接内容。异常堆栈如下:RUNNABLEat Method)at at at- locked (a- locked (aUnmodifiableSet)- locked (aat

39、at :217)at java:836)1.3.4 什么是 TCP 粘包/ 拆包参考:1.3.54 -4y.参考:TCP粘包/拆包的解决办法1.3.64 -4y.参考:Netty 线程模型1.3.74 -4y.参考:说说 Netty 的零拷贝1.3.8 Netty 内部执行流程参考:1.3.9 Netty 重连实现2 微服务篇2.1 微服务2.1.1前后端分离是如何做的参考:2.1.2微服务哪些框架Spring Cloud 、 Dubbo、 Hsf 等2.1.3你怎么理解 RPC 框架rpo的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个 调用的方法是部署哪里。通过

40、RPC能解耦服务,这才是使用RPC的真正目的。2.1.4说说 RPC 的实现原理参考:2.1.5 说说 Dubbo 的实现原理dubbo提供功能来讲, 提供基础功能-RPC调用提供增值功能SOA服务治理dubbo 启动时查找可用的远程服务提供者,调用接口时不是最终调用本地实现,而是通过拦 截调用(又用上JDK动态代理功能)过程经过一系列的的序列化、 远程通信、协议解析最终 调用到远程服务提供者2.1.6 你怎么理解 RESTfulREST是 一种软件架构风格、设计风格,它是一种面向资源的网络化超媒体应用的架构风格。 它主要是用于构建轻量级的、可维护的、可伸缩的Web 服务。基于 REST 的服

41、务被称为RESTful 服务。 REST 不依赖于任何协议, 但是几乎每个 RESTful 服务使用 HTTP 作为底层 协议, RESTful 使用 http method 标识操作,例如:GET 根据用户 id 查询用户数据POST 新增用户PUT 修改用户信息DELETE删除用户信息2.1.74 -4y.参考:说说如何设计一个良好的 API2.1.84 -4y.参考:如何理解 RESTful API 的幂等性2.1.94 -4y.参考:如何保证接口的幂等性2.1.104 -4y.参考:说说 CAP 定理、 BASE 理论2.1.114 -4y.参考:怎么考虑数据一致性问题2.1.12 说

42、说最终一致性的实现方案可以结合MC实现最终一致性,例如电商系统,把生成订单数据的写操作逻辑通过事务控制, 一些无关紧要的业务例如日志处理,通知,通过异步消息处理,最终到请求落地。2.1.13 你怎么看待微服务 小:微服务体积小 独:能够独立的部署和运行。 轻:使用轻量级的通信机制和架构。 松:为服务之间是松耦合的。2.1.14 微服务与 SOA 的区别可以把微服务当做去除了 ESB的SOA ESB是SOA架构中的中心总线,设计图形应该是星形 的,而微服务是去中心化的分布式软件架构。2.1.154 -4y.参考:如何拆分服务2.1.164 -4y.参考:微服务如何进行数据库管理2.1.174 -

43、4y.参考:如何应对微服务的链式调用异常2.1.184 -4y.参考:对于快速追踪与定位问题2.1.194 -4y.参考:微服务的安全2.2 分布式2.2.1 谈谈业务中使用分布式的场景一、解决 java 集群的 session 共享的解决方案:1. 客户端 cookie 加密。(一般用于内网中企业级的系统中,要求用户浏览器端的 cookie 不 能禁用,禁用的话,该方案会失效) 。2. 集群中,各个应用服务器提供了 session 复制的功能, tomcat 和 jboss 都实现了这样的 功能。 特点: 性能随着服务器增加急剧下降, 容易引起广播风暴; session 数据需要序列化, 影

44、响性能。的持久化,使用数据库来保存 session 。就算服务器宕机也没事儿,数据库中的 session 照 样存在。特点:每次请求 session 都要读写数据库,会带来性能开销。使用内存数据库,会 提高性能,但是宕机会丢失数据 ( 像支付宝的宕机,有同城灾备、异地灾备 )。4. 使用共享存储来保存 session 。和数据库类似,就算宕机了也没有事儿。其实就是专门搞 一台服务器,全部对 session 落地。特点:频繁的进行序列化和反序列化会影响性能。5.使用 memcached来保存session。本质上是内存数据库的解决方案。特点:存入 memcached的数据需要序列化,效率极低。二

45、、分布式事务的解决方案 : 解决方案: try confirm cancel 。2.2.2 Session 分布式方案1. 客户端 cookie 加密。(一般用于内网中企业级的系统中,要求用户浏览器端的cookie 不能禁用,禁用的话,该方案会失效) 。2. 集群中,各个应用服务器提供了 session 复制的功能, tomcat 和 jboss 都实现了这样的 功能。 特点: 性能随着服务器增加急剧下降, 容易引起广播风暴; session 数据需要序列化, 影响性能。的持久化,使用数据库来保存 session 。就算服务器宕机也没事儿,数据库中的 session 照 样存在。特点:每次请求

46、 session 都要读写数据库,会带来性能开销。使用内存数据库,会 提高性能,但是宕机会丢失数据 ( 像支付宝的宕机,有同城灾备、异地灾备 )。4. 使用共享存储来保存 session 。和数据库类似,就算宕机了也没有事儿。其实就是专门搞 一台服务器,全部对 session 落地。特点:频繁的进行序列化和反序列化会影响性能。5. 使用 memcached来保存session。本质上是内存数据库的解决方案。 特点:存入 memcached 的数据需要序列化,效率极低。2.2.3 分布式锁的场景比如交易系统的金额修改, 同一时间只能又一个人操作, 比如秒杀场景, 同一时间只能一个 用户抢到,比如

47、火车站抢票等等2.2.4 分布式锁的实现方案基于数据库实现分布式锁 基于缓存实现分布式锁 基于 Zookeeper 实现分布式锁2.2.5 分布式事务参考:2.2.6 集群与负载均衡的算法与实现参考:2.2.74 -4y.参考:说说分库与分表设计2.2.84 -4y.参考:分库与分表带来的分布式困境与应对之策安全 &性能 安全问题安全要素与 STRIDE 威胁 防范常见的 Web 攻击 服务端通信安全攻防 HTTPS 原理剖析 HTTPS 降级攻击 授权与认证 基于角色的访问控制 基于数据的访问控制 性能优化 性能指标有哪些 如何发现性能瓶颈 性能调优的常见手段 说说你在项目中如何进行性能调优

48、 工程篇 需求分析 你如何对需求原型进行理解和拆分 说说你对功能性需求的理解 说说你对非功能性需求的理解 你针对产品提出哪些交互和改进意见 你如何理解用户痛点 设计能力 说说你在项目中使用过的 UML 图 你如何考虑组件化 你如何考虑服务化 你如何进行领域建模 你如何划分领域边界 说说你项目中的领域建模 说说概要设计 设计模式 你项目中有使用哪些设计模式 说说常用开源框架中设计模式使用分析 说说你对设计原则的理解 23 种设计模式的设计理念 设计模式之间的异同,例如策略模式与状态模式的区别 设计模式之间的结合,例如策略模式+简单工厂模式的实践设计模式的性能,例如单例模式哪种性能更好。 业务工程

49、 你系统中的前后端分离是如何做的 说说你的开发流程 你和团队是如何沟通的 你如何进行代码评审 说说你对技术与业务的理解 说说你在项目中经常遇到的 Exception 说说你在项目中遇到感觉最难Bug,怎么解决的 说说你在项目中遇到印象最深困难,怎么解决的 你觉得你们项目还有哪些不足的地方 你是否遇到过 CPU 100% ,如何排查与解决 你是否遇到过 内存 OOM ,如何排查与解决 说说你对敏捷开发的实践 说说你对开发运维的实践 介绍下工作中的一个对自己最有价值的项目,以及在这个过程中的角色 软实力说说你的亮点 说说你最近在看什么书 说说你觉得最有意义的技术书籍 工作之余做什么事情 说说个人发展方向方面的思考 说说你认为的服务端开发工程师应该具备哪些能力 说说你认为的架构师是什么样的,架构师主要做什么 说说你所理解的技术专家

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!