`
jsbylibo
  • 浏览: 12136 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

面试总结

阅读更多

最近面试被问的一些问题,整理一下(定期更新):

1.分布式事务

事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉。就要么生,要么死。没有半死不死的中间不可预期状态。

事务是为了保障业务数据的完整性和准确性的。

分布式事务,常见的两个处理办法就是两段式提交和补偿。

两段式提交典型的就是XA,有个事务协调器,告诉大家,来都准备好提交,大家回复,都准备好了,然后协调器告诉大家,一起提交,大家都提交了。

补偿比较好理解,先处理业务,然后定时或者回调里,检查状态是不是一致的,如果不一致采用某个策略,强制状态到某个结束状态(一般是失败状态),然后就世界太平了。典型的就是冲正操作。

准备好了以后,如果没有问题,收到提交,所有人都开始提交。

这个时候,比如对数据库来说,有redo日志的。

如果某个数据库这时候宕机了,那么它重启的时候,先执行检查,也会把上一次的这些操作都提交掉的。所以各个点的数据都是一致的。

 

2.多线程

2.1 多线程编程的好处是什么?  在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态。

2.2我们如何创建一个线程?  一是实现Runnable接口(好因为还可以继承),然后将它传递给Thread的构造函数,创建一个Thread对象;二是直接继承Thread类。

Java 多线程并发编程会有许多不同的问题,主要有如下问题的应用:

多线程读写共享数据同步问题

并发读数据,保持各个线程读取到的数据一致性的问题。

解决方案:

synchronized关键字和Lock并发锁:主要解决多线程共享数据同步问题。 

ThreadLocal主要解决多线程中数据因并发产生不一致问题。

 

3.中间件

Java中间件技术主要就是EJB,如果说服务器主要有tomcat、weblogic、webshpere,JBoss等。

4.并发解决方案

基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。

f5负载均衡

redis

5.系统应用架构

 

6.JVM  内存调优

eclipse中:window-preferences-java-jre-jdk中 vm 参数

was中:中间件服务器-应用-进程定义-java虚拟机中 初始堆大小(1024M)最大堆大小(1536M)通用JVM参数-XX:MaxPermSize=256M

6.1.JVM内存管理的机制

内存空间划分为:Sun JDK在实现时遵照JVM规范,将内存空间划分为堆、JVM方法栈、方法区、本地方法栈、PC寄存器。 配置-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M

堆: 堆用于存储对象实例及数组值,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中对象所占用的内存由GC进行回收,在32位操作系统上最大为2GB,在64位操作系统上则没有限制,其大小可通过-Xms和-Xmx来控制,-Xms为JVM启动时申请的最小Heap内存,默认为物理内存的1/64但小于1GB;-Xmx为JVM可申请的最大Heap内存,默认为物理内存的1/4但小于1GB。

JVM方法栈: 为线程私有,其在内存分配上非常高效。当方法运行完毕时,其对应的栈帧所占用的内存也会自动释放。当JVM方法栈空间不足时,会抛出StackOverflowError的错误,在Sun JDK中可以通过-Xss来指定其大小。

方法区: 要加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息。方法区域也是全局共享的,在一定条件下它也会被GC,当方法区域要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。在Sun JDK中这块区域对应Permanet Generation,又称为持久代,默认最小值为16MB,最大值为64MB,可通过-XX:PermSize及-XX:MaxPermSize来指定最小值和最大值。

PC寄存器: 占用的可能为CPU寄存器或操作系统内存。

6.2.Java堆和栈的区别

Java把内存划分成两种:一种是栈内存,一种是堆内存。

在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

  堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。

6.3.Java内存泄露和内存溢出

  内存泄漏:分配出去的内存回收不了

  内存溢出:指系统内存不够用了

6.4.Java类加载机制

  JVM将类加载过程划分为三个步骤:装载、链接和初始化。

6.5.内存回收

 

 

8.线程池

什么叫线程池,线程池作用?什么是连接池,连接池作用?

线程池就是申请固定数目的线程,放在某个空间中。当申请线程时,就从线程池中取得。当线程池中的线程都被占用的时候,无法获取到新的线程。通过ThreadPoolExecutor来创建一个线程池

连接池是数据库连接池,跟线程池原理一样。目的都是一样的,防止链接过多造成压力。

 

8.自己攻克的难题

 

9.性能调优

9.1数据库调整

9.1.1 sequence缓存的增加

9.1.2 增加日志大小与数量,并且将日志文件与数据文件磁盘分离,减少io写争抢

9.1.3 调整缓冲池大小

9.1.4 打开数据库的脏读回写

9.2was参数调整

9.2.1 线程池调整  服务器—所有服务器—dbank-provider—线程池—WebContainer 100并发50/300,300并发50/600;

9.2.2 JVM调整 服务器—所有服务器—dbank-provider—Java和进程管理—进程定义—Java虚拟机,修改初始堆大小与最大堆大小(1024M/2048M)  通用JVM参数填入额外参数(-XX:MaxPermSize=256M);

9.2.3 JDBC连接池调整 资源—JDBC—数据源—dbank_ds—连接池属性,修改最小连接数与最大连接数  100并发10/300,300并发10/600;

9.2.4 系统日志大小及个数 故障诊断—日志和跟踪—服务器名(如dbank-provider)—JVM日志

将SystemOut.log与SystemErr.log最大大小修改为200MB,历史日志文件最大数为20个。

9.2.5 修改数据库隔离级别 资源—JDBC—数据源—dbank_ds—定制属性—webSphereDefaultIsolationLevel(需翻页)将默认级别4修改为2。

9.2.6 修改应用日志缓存大小 修改应用中(直销银行、电子账户、产品中心)日志配置文件logback.xml中的quenceSize从10240修改为1024。

9.3添加索引

9.4代码调优

 

10.你说说你做的最好的项目?

要重点介绍到①项目是做什么?②用到那些技术?③整个项目中最大的亮点是?核心部分④遇到bug是怎么解决的?

例如: 我认为我做的最好的项目是电子账户系统,电子账户类似于支付宝,是**银行直销银行的账务支撑系统。分为账户管理、记账、对账、日终跑批、报表统计等模块。目前生产用户数量在六七万左右。使用技术IFP(基于Spring)+Maven,生产中配置两台应用服务器,使用F5负载均衡,配置虚地址,由F5分发到两台服务器。

你项目遇到bug?怎么查问题?

例如:首先遇到了bug,会查询日志,通过日志定位到某个类的行数,判断是否有代码问题。

你遇到了什么bug?你是怎么解决?

例如我自己项目中,查询量非常大。通过日志发现了堆内存溢出,最后通过优化代码,减轻new和加大堆内存。

数据源方式锁表,由于db2默认隔离级别4较高,改为2。

批量扣划时间超长导致规定时间没有取到文件改为主动通知方式。

连接数不够调优。

 

11.java的数据结构

java.util包中三个重要的接口及特点:List(列表)、Set(保证集合中元素唯一)、Map(维护多个key-value键值对,保证key唯一)。其不同子类的实现各有差异,如是否同步(线程安全)、是否有序。

 

12.java中常用的类,包,接口

类:String Integer Long  File  Date Thread

包:

第一个包:java.lang包 该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握,因为它们应用很广。

第二个包:java.util包 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

第三个包:java.io包  该包通过文件系统、数据流和序列化提供系统的输入与输出。

第四个包:java.sql包 

第五个包:java.NET包

第六个包:java.math包; 

接口:Comparable Collection Map List Runnable

 

13.https通讯原理:

Http传输数据不加密,明文,通信端口80;而Https在数据通信之前需要客户端、服务器进行握手(身份认证),建立连接后,传输数据经过加密,通信端口443。

原理:1.客户端发起HTTPS请求;2、服务端的配置;3、传送证书;4、客户端解析证书;5、传送加密信息;6、服务段解密信息;7、传输加密后的信息;8、客户端解密信息

 

14系统调优:

通常的性能瓶颈:cpu,内存,io,带宽

vmstat 全面的性能查看工具

netstat网络相关查看工具

top 与进程相关的性能查看工具

iostatio性能查看工具

ps 进程查看工具

iftop 网络带宽查看工具

vi/find/awk/lsof/free编辑器/查找命令/文本过滤/查看进程打开文件进程情况/内存查看

查看端口

 

15.maven常用命令

 

0
0
分享到:
评论

相关推荐

    陈涛后端面试总结

    陈涛后端面试总结 这篇文章总结了数字IC后端的一些重要问题,涵盖了电源走线的选择、交替路由的应用、线间干扰的解决、标准单元延迟的影响因素、禁止使用库中某些单元、wire load model的类型、延迟模型的类型、...

    10万字面试总结Java.pdf

    这份"10万字面试总结Java.pdf"涵盖了Java基础知识、JVM、Spring框架、并发编程、Linux、Dubbo、Mybatis、Springcloud、Spring Boot、消息队列和Zookeeper等多个核心主题,旨在帮助Java开发者全面准备面试。...

    阿里面试总结及答案

    ### 阿里面试总结及答案 #### 一、Java事件机制 Java事件机制是Swing框架中的核心组件之一,它允许程序响应用户输入或其他事件。该机制主要包括三个方面:事件、事件监听器以及事件源。 - **事件**:通常继承自`...

    《我想进大厂》面试总结.pdf

    在进行《我想进大厂》的面试总结时,我们首先要了解面试对于求职者和招聘方的重要性。面试不仅仅是一个考核和选择的过程,它也反映了求职者的职业素养、技术能力、沟通技巧和解决问题的能力。而对于面试官而言,面试...

    全网最全-谷粒商城项目-面试总结-简历优化_Java-You的博客-CSDN博客 .html

    全网最全-谷粒商城项目-面试总结-简历优化_Java-You的博客-CSDN博客 .html

    2020年上海JAVA开发工程师面试总结

    2020年上海JAVA开发工程师面试总结

    阿里巴巴面试总结DOC版

    阿里巴巴面试总结DOC版 本资源摘要信息主要总结了阿里巴巴面试中的问题和答案,涵盖了 Java 编程语言、设计模式、JVM 内存模型、ClassLoader 结构、UML 模型图、OSGi 框架、Spring 框架、iBatis 框架、Java 序列化...

    软件工程师 程序员10万字大厂应聘面试总结java面试题和答案.pdf

    本文档是关于软件工程师程序员Java面试题和答案的总结,涵盖了Java语言的特点、面向对象和面向过程的区别、基本数据类型、标识符的命名规则、instanceof关键字的作用、Java自动装箱与拆箱等知识点。 一、Java语言的...

    Java面试总结面试总结PDF

    Java面试总结面试总结PDF

    面试总结 .docx

    面试总结

    面试总结 .pdf

    面试总结

    2018秋招iOS面试总结

    在2018年的秋季招聘中,iOS面试成为众多求职者关注的焦点。这个时期的面试不仅反映了当时的iOS技术趋势,也为后来的求职者提供了宝贵的参考经验。以下是对2018年秋招iOS面试中常见知识点的详尽解析: 1. **...

    面试录音&面试总结.zip

    【标题】:“面试录音&面试总结.zip”是一个包含面试过程记录和回顾的压缩文件,它可能包括了求职者与招聘方的对话音频以及面试后的个人反思和总结文档。这类文件对于求职者来说是宝贵的资源,可以帮助他们分析面试...

    最近图像面试总结

    ### 图像面试总结 在近期参加的一系列技术面试过程中,遇到了不少与图像处理相关的技术问题。为了更好地总结经验,本文将对这些面试中涉及到的知识点进行详细的归纳与解析。 #### 1. 指针与图像数据结构 面试中...

    西安2010Java面试总结

    【西安2010Java面试总结】 在2010年的西安Java面试中,面试官主要关注以下几个核心知识点,这些内容对于Java开发者来说至关重要,也是面试官用来评估候选人技术实力的关键标准。 1. **Java基础知识**:面试通常从...

    创迹面试总结.doc

    【创迹面试总结】 面试是求职过程中的关键环节,它不仅是公司评估求职者能力与适应性的途径,也是求职者展示自身素质和专业素养的机会。在创迹面试中,面试官通常会关注以下几个方面: 1. **项目经验**:面试官会...

    java面试大全。各大公司面试总结。知识点总结,共31个文档

    Java面试大全涵盖了大量的技术知识点,这些内容通常会出现在各大公司的面试过程中。为了帮助你更好地准备,以下是基于描述中提到的“31个文档”可能涉及的一些核心Java面试知识点的详细阐述: 1. **基础概念**:...

    机器学习面试总结

    以下是根据给定文件内容总结的一些关键知识点: 1. 自我介绍和项目介绍:面试者应该准备简洁明了的自我介绍,并对参与的项目有深入的了解,能够清晰地阐述项目的目标、实施过程以及所遇到的问题和解决方案。 2. ...

    java开发面试总结

    【Java开发面试总结】 在Java开发的面试过程中,面试官通常会关注候选人的技术栈是否广泛且深入。这里,我们重点讨论几个关键知识点,包括前端技术、JavaScript、Ajax、Java基础以及Web开发框架。 1. **前端开发...

Global site tag (gtag.js) - Google Analytics