-3y
石杉
1、互联网公司的面试官是如何360°无死角考察候选人的?(上篇)
2、互联网公司面试官是如何360°无死角考察候选人的?(下篇)
3、阿里三面,P9面试官是如何360°无死角考察候选人的?]
4、【Java进阶面试系列之一】哥们,你们的系统架构中为什么要引入消息中间件?
5、【Java进阶面试系列之二】:哥们,那你说说系统架构引入消息中间件有什么缺点?
7、【行走的Offer收割机】记一位朋友斩获BAT技术专家Offer的面试经历【石杉的架构笔记】
10、Java进阶面试系列之五 消息中间件集群崩溃,如何保证百万生产数据不丢失?
11、本科毕业3年的我,是如何薪资翻倍拿到38万年薪Offer的?
横扫阿里、滴滴、美团后,3年经验的Java后端妹子整理出这份厚厚的面经!
石杉并发面试
大白话聊聊Java并发面试问题之volatile到底是什么?
大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?
Java工程师如何在1个月内做好面试准备?【石杉的架构笔记】
在短时间内应该如何来快速的复习和准备呢?
勤奋:快速的回顾自己的笔记,把各种常见技术的核心原理和项目实践都通过笔记回顾的方式快速的回忆起来,在大脑里形成一个知识网络
非勤奋:把技术广度可能涉及到的各种点都罗列出来,然后上网百度一下各个技术点常见的一些面试问题,或者是基本的一些核心原理 通过百度各个技术点,然后从各种技术博客中快速了解一个技术的方式,短时间内可以迅速建立起来对技术广度中涉及到的各个点的一些基本认知、核心原理,这样在面试的时候避免一问三不知
成功无捷径,作为一个优秀的技术工程师,最重要的事情是一年365天,每天都不停的学习积累,坚持很多年. 只有通过几年的积累,你才能够厚积薄发,量变产生质变,菜鸟变成大牛
决定你未来技术的高度有多高,还有你能否成为团队里顶梁柱的,是你的技术深度 在遇到技术问题的时候,直接从本质和底层出发,分析和定位问题,最后带领团队解决问题
技术深度的体现,不一定是说看过源码,这只是其中一种表现形式而已,其他的还有,比如说对某个特别有难度的技术场景,比如说公司双11每秒几十万QPS并发请求下,你负责了其中支付系统,成功应对超高并发量。
在这个过程中,你对系统架构的设计,对系统做的大量的并发优化、性能优化,都可以成为你在某个技术领域的技术深度的体现
快速准备 1).源码 如果你在过去几年,自己就深入阅读过大量开源技术的源码,在阅读源码的过程中,自己还把源码的架构图、流程图,手工画了大量的图出来 把过去几年的源码研究笔记翻出来,快速过一下,练习如何在面试现场在白板上纯手工把各种技术的源码架构图和流程图现场画出来
2).复杂的系统 或者在过去几年,你对某个技术领域,针对很高的技术难度做过什么复杂的系统,在那个技术领域扎下了很深的研究的话,那么此时你也可以针对过去的笔记快速的复习,在面试现场一定要现场画图把你做过的复杂系统以及技术难度都说清楚
3).背熟悉技术 你可以从简历中挑选出某个你相对来说用的比较多,熟悉一点点的技术,然后直接用万能的百度,搜索“XX技术源码分析”,“XX技术底层原理”。 通过几天的时间快速的 “ 死记硬背 + 软磨硬泡 ”,力争对某个技术相对有一些稍微底层一些的理解。
背面试题 手写常用的算法(保证无bug)
Java架构师主要需要做哪些工作呢?
1、负责设计和搭建软件系统架构(平台、数据库、接口和应用架构等),解决开发中各种系统架构问题。 2、优化现有系统的性能,解决软件系统平台关键技术问题攻关、核心功能模块设计、核心代码开发。 3、在项目需求不断细化的工程中校正整体的架构设计,以及详细模块拆分设计。 4、营造技术学习氛围,带领团队不断完善开发开发方法及流程,提升开发效率与质量,加强技术标准及规范。 5、带领团队攻克例如大数据量、高并发、高稳定性等带来的各种挑战及技术难关。 6、责任心强,有团队合作精神,工作认真负责高效并具有一定抗压能力。 7、参与讨论公司产品发展方向,完整的规划和把握产品研发架构。
Java架构师要学习哪些知识呢?
并发编程 JAVA内存模型(JMM) java当中的线程通讯和消息传递 什么是重排序和顺序一致性?Happens-Before?As-If-Serial?
Synchronized的概念和分析 同步、重量级锁以及Synchronized的原理分析 自旋锁、偏向锁、轻量级锁、重量级锁的概念、使用以及如何来优化他们
Volatile和DCL的知识 Volatile的使用场景和Volatile实现机制、内存语义、内存模型 DCL的单例模式,什么是DCL?如何来解决DCL的问题
并发基础之AQS的深度分析 AbstractAueuedSynchronizer同步器的概念、CLH同步队列是什么? 同步状态的获取和释放、线程阻塞和唤醒
Lock和并发常用工具类 java当中的Lock、ReentrantLock、ReentrantReadWriteLock、Condition java当中的并发工具类CyclicBarrier、CountDownLatch、Semphore java当中的并发集合类ConcurrentHashMap、ConcurrentLinkedQueue......
原子操作常用知识讲解 基本类型的原子操作比如经典的AtomicBoolean、AtomicLnteger、AtomicLong 数组类型的原子操作代表几个类AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray 引用类型的原子操作的典型AtomicReference、AtomicReferenceFieldUpdater...... CAS的概念和知识、Compare And Swap 以及他的缺陷
线程池和并发并行 Executor、ThreadPoolExecutor、Callable &Future、ScheduledExecutorService ThreadLocal、Fork & Join?什么是并行?线程池如何保证核心线程不被销毁?
框架和源码应用
mybatis应用和源码解析 mybatis优缺点、spring 与mybatis 集成 Config、Sql配置、Mapper配置、有几种注册mapper的方法,优先级如何? mybaits的一级缓存、二级缓存、mybatis的二级缓存为什么是鸡肋? 通用mapper的实现、mybaits编写sql语句的三种方式 @MapperScan的源码分析?mapperScan如何生效的? mybatis如何扩展spring的扫描器的、mybatis扫描完之后如何利用FactoryBean的? mybaits底层如何把一个代理对象放到spring容器中?用到了spring的哪些知识? mybaits和spring的核心接口ImportBeanDefinitionRegistrar之间千丝万缕的关系 从原来来说明mybaits的一级缓存为什么会失效?spring为什么把他失效?有没有办法解决? 从mybatis来分析mybatis的执行流程、mybaits的sql什么时候缓存的?缓存在哪里? mybaits当中的方法名为什么需要和mapper当中的id一致?从源码来说明
tomcat源码解析 tomat的总体概述和tomcat的启动流程源码分析 tomcat当中web请求的源码分析?一个http如何请求到tomcat的?tomcat如何处理的? tomcat的协议分析,从源码来分析tomcat当中的各种详细配置的意义 tomcat和apache、nginx等等主流静态服务器的搭配使用 tomcat的性能调优?生成环境上如何让你的tomcat容器的性能达到最高
spring源码分析 spring的基本应用和spring源码的编译 java 混乱的日志系统,Jul、jcl、log4j、slf4j..... spring4和spring在日志方面的源码对比 AspectJ和springAop,aspectj的静态织入 JDK动态代理的源码分析,JDK是如何操作字节码 spring通过cglib完成AOP,cglib如果完成方法拦截 AnnotationAwareAspectJAutoProxyCreator如何完成代理织入的 BeanDefinition是什么东西,sping当中的各种BeanDefinition的作用 BeanDefinition有什么作用?如果来改变一个bean的行为 BeanDefinitionRegistry的作用,源码分析 BeanNameGenerator如何改变beanName的生成策略 BeanPostProcessor如何插手bean的实例化过程、经典的应用场景有哪些?spring内部哪里用到了这个接口 BeanFactoryPostProcessor和BeanPostProcessor的区别、经典应用场景、spring内部如何把他应用起来的 BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的关系已经区别,spring底层如何调用他们 ConfigurationClassPostProcessor这个类如何完成bean的扫描,如何完成@Bean的扫描、如何完成对@Import的解析 @Imoprt的三种类型,普通类、配置类、ImportSelector 如何利用ImportSelector来完成对spring的扩展? @Configuration这注解为什么可以不加?加了和不加的区别,底层为什么使用cglib @Bean的方法是如何保证单例的?如果不需要单例需要这么配置?为什么需要这么配置 springFacoryBean和BeanFacory的区别,有哪些经典应用场景?spring的factoryMethod的经典应用场景? ImportBeanDefinitionRegistrar这个接口的作用,其他主流框架如何利用这个类来完成和spring的结合的? spring是什么时候来执行后置处理器的?有哪些重要的后置处理器,比如CommonAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor如何来完成spring初始化方法的回调。spring内部的各种Procesor的作用分别是什么 spring和springBoot当中的各种@Enablexxxx的原理是什么?如何自己实现一个?比如动态开启某某些自定义功能 spring如何来完成bean的循环依赖并且实例化的,什么是spring的IOC容器,怎么通过源码来理解? 其他,比如Bean的实例化过程,源码中的两次gegetSingleton的不同和相比如SpringMvc的源码分析等等......
Spring微服务
Spring Cloud
Eureka的源码分析服务注册和服务发现以及心跳机制和保护机制,对比eureka与zookeeper,什么是CAP原则?
Ribbon源码分析和客服端负载均衡,客户端负载均衡?服务端负载均衡? Ribbon核心组件IRule以及重写IRule
Fegin源码分析和声明式服务调用,Fegin负载均衡,Fegin如何与Hystrix结合使用? 有什么问题?
Hystrix实现服务限流、降级,大型分布式项目服务雪崩如何解决? 服务熔断到底是什么?一线公司的解决方案
HystrixDoashboard如何实现自定义接口降级、监控数据、数据聚合等等
Zuul统一网关详解、服务路由、过滤器使用等,从源头来拦截掉一些不良请求
分布式配置中心Config详解,如何与github或是其他自定义的git平台结合、比如gitlab
分布式链路跟踪详解,串联调用链,,让Bug无处可藏,如何厘清微服务之间的依赖关系?如何跟踪业务流的处理顺序?
Spring Boot Spring Boot的源码分析和基本应用、利用springmvc的知识模拟和手写一个springboot springmvc的零配置如何实现的?利用servelt3.0的哪些新知识?在springmvc中如何内嵌一个tomcat,如何把web.xml去掉 springboot当中的监听器和设计模式中观察者模式的关系、模拟java当中的事件驱动编程模型 springboot的启动流程分析、springboot如何初始化spring的context?如何初始化DispacterServlet的、如何启动tomcat的 springboot的配置文件类型、配置文件的语法、配置文件的加载顺序、模拟springboot的自动配置 l springboot的日志系统、springboot如何设计他的日志系统的,有什么优势?如何做到统一日志的? Docker 什么是Docker、为什么要使用他、和开发有什么关系?能否带来便捷、Docker简介、入门,Docker的架构是怎样的? Docker的三大核心概念:镜像(Images)、容器(Containers)、仓库服务注册器(Registry)他们分别是什么? Docker的基础用法以及Docker镜像的基本操作 容器技术入门、Docker容器基本操作、容器虚拟化网络概述以及Docker的容器网络是怎样的? 程序员如何利用Dockerfile格式、Dockerfile命令以及docker build构建镜像 Compose和Dockerfile的区别是什么?Compose的配置文件以及使用Compose运行容器、Docker的实战应用
性能调优
mysql性能调优
mysql中为什么不使用其他数据结构而就用B+树作为索引的数据结构
mysql执行计划详解&mysql查询优化器详解
mysql索引优化实战,包括普通查询、group by、order by
java数据结构算法 hash算法详解、java当中hashmap源码解析、手写一个hashmap 从源码理解hashmapJDK7和JDK8的变化、为什么有这样的变化,Java8新特性 顺序存储、双向链表、单向链表、java当中linkedList的源码分析 java当中线性结构、树形结构以及图形结构分析以及应用场景和经典使用 大数字运算和经典排序、二叉树红黑树排序、查找
JVM性能调优 java内存模型总体概述、类加载过程和classloader、运行时数据区当中的总体内容、编译原理 内存区域与内存溢出异常、虚拟机对象、程序计数器、java栈、本地方法栈、操作数、方法区、堆内存和元数据等等 Classloader的知识详细、默认全盘负责机制、从JDK源码来理解双亲委派模式、如何打破双亲委派?为什么需要打破? 虚拟机性能监控与故障处理、jvm基本命令,jinfo命令的使用jmap命令使用、jstak命令的使用、使用jvisualvm分析 垃圾收集器与内存分配策略、垃圾回收算法与基础、串型收集器、并行收集器、内存分配与回收策略。 程序编译与代码优化、运行期优化、编译期优化、JVM调优的本质是什么?什么是轻gc?什么是Full gc?如何调优 JVM执行子系统、类文件结构、类加载机制、字节码执行引擎、字节码编译模式、如何改变字节码编译模式?
JVM 是每一个开发人员必备的技能,推荐看国内比较经典的 JVM 书籍,里面包含 JVM 的内存接口、类的加载机制等基础知识,是不是觉得这些在面试中似曾相识?所以对于 JVM 方面的知识巩固与其在网上看一些零零碎碎的文章不如啃一下《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第 2 版)》这本书,当然如果你的英文好则强烈推荐看 Oracle 最新发布的 JAVA 虚拟机规范。 在啃书的时候切记不能图快,你对知识的积累不是通过看书的数量来决定,而是看书的深度。所以在看每一章节的时候看到不懂的要配合网上的文章理解,并且需要看几篇文章理解,因为一篇文章很可能是错误的
互联网工程 Maven 整体认知maven的体系结构 maven核心命令 maven的pom配置体系 搭建Nexus私服
Git 动手搭建Git客户端与服务端 Git的核心命令 Git企业应用 git的原理,git底层指针介绍
Linux Linux原理、启动、目录介绍 Linux运维常用命令、Linux用户与权限介绍 shell脚本编写
分布式 分布式协调框架(Zookeeper) 什么是分布式系统?分布式系统有何挑战?Zookeeper快速入门&集群搭建基本使用 Zookeeper有哪些常用命令以及注意事项、zkclient客户端与curator框架有什么功能以及如何使用 手写Zookeeper常见应用场景:分布式配置中心、分布式锁、分布式定时任务 Zookeeper核心概念znode、watch机制、序列化、持久化机制讲解及其源码解析 Zookeeper怎么解决分布式中的一致性问题?领导选举流程讲解及其源码解析
RPC服务框架(Dubbo) 手写RPC框架以及为什么要使用Dubbo? 传统应用系统如何演变成分布式系统详解 Dubbo的六大特性是什么?对企业级开发有何好处?Dubbo的作用简要说明、快速演示Dubbo调用示例 Dubbo中协议、注册中心、动态代理机制是怎么达到可扩展的?Dubbo的扩展机制源码解析 Dubbo从服务提供者到注册中心到消费者调用服务中间的流程源码解析 Dubbo的监控中心以及管理平台的使用,方便企业级开发与管理
分布式数据缓存(Redis)
关系型数据库瓶颈与优化、ehcache和redis的对比?nosql的使用场景
Redis基本数据类型、比如map的使用场景?有什么优缺点?什么时候用map等等
Redis高级特性、如何来理解redis的单线程但是高性能?如何理解redis和epoll
Redis持久化、什么情况下需要持久化?方案是什么?有什么优缺点?如何优雅的选择持久化方案
Redis项目中应用、reids的高级命令mget、scan?为什么有scan这条命令,如何理解redis的游标?
单机版redis的安装以及redis生产环境启动方案
redis持久化机对于生产环境中的灾难恢复的意义
redis主从架构下如何才能做到99.99%的高可用性
在项目中重新搭建一套主从复制+高可用+多master的redis cluster集群
redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)
redis的RDB持久化配置以及数据恢复实验
redis的RDB和AOF两种持久化机制的优劣势对比
分布式数据存储(mycat)
分库分表场景介绍
Mycat原理解析
分库分表实战
分布式Rabbitmq RabbitMQ环境安装&RabbitMQ整体架构与消息流转&交换机详解 消息如何保障 100% 的投递成功方案&企业消息幂等性概念及业界主流解决方案 Confirm确认消息详解&Return返回消息详解&消费端的限流策略&消费端ACK与重回队列机制 SpringAMQP用户管理组件-RabbitAdmin应用&SpringAMQP消息模板组件-RabbitTemplate实战 SpringAMQP消息容器-SimpleMessageListenerContainer详解&SpringAMQP消息适配器-MessageListenerAdapter使用 RabbitMQ与SpringBoot2.0整合实战&RabbitMQ与Spring Cloud Stream整合实战 RabbitMQ集群架构模式&RabbitMQ集群镜像队列构建实现可靠性存储&RabbitMQ集群整合负载均衡基础组件HaProxy_
项目实战 大型互联网电商项目 面试题详解,offer选择 简历技术优化、项目优化 面试问题剖析 职业生涯规划
JavaOOP ☆1.谈谈你对oop的理解,oop有哪些特性?各有什么特点? oop :面向对象编程,oop有继承,多态,封装,抽象 继承 : 子类可以拥有父类的属性以及方法,也可以拥有自己的属性以及方法。 多态 : 父类的方法,子类有不同的实现方式 封装 : 将现实生活中具体的事封装成一个类。 抽象 : 使用private修饰属性和方法,对外提供公有的get和set方法 2、什么是方法重载和方法重写,有什么异同? 方法重载:同一类中,同名不同参 !方法名相同,参数列表不相同(个数 顺序),和访问修饰符 返回值类型 异常无关 方法重写:子类重写父类,同名同参数 !方法名相同,参数列表相同,访问修饰符大于等于父类 返回值和父类相关(基本数据类型等于) 异常是父类的子类或子集
3、抽象类和接口有什么异同?
抽象类 接口
抽象方法 0-多个 是
属性是静态 不一定 是
用途 给类继承 给类实现
构造方法 产生子类对象初始化父类属性 无
从语法角度上,接口是一种特殊的抽象类,但从设计角度理解而言是错误的 抽象类是父类的共同特征,是"中间产品",子类才是"最终产品"...是子类是"is a"的关系,既在概念上本质是一样的 接口表示一种约束和一种能力,是"has a can do"的关系.接口定义"做什么",实现类负责"怎么做",体现是功能和实现相分离的原则
4、异常有哪几种类型,怎么自定义异常? RuntimeException Error CheckedException 继承Exception或子类 定义有参构造方法 在有异常的地方,throw异常
5、什么是多态?使用多态的两个前提条件?有哪两种表现形式和应用场合? 同一事物,有不同的表现形态...父类的方法,子类有不同的实现方式 前提: 继承 重写 表现形式:重载 重写 应用场合:方法形参 方法返回类型
6、什么是内部类?内部类有哪几种?有什么优缺点? 类中定义类 成员内部类 方法内部类 静态嵌套类 匿名内部类 优点:a.减少参数传递 b.封装(隐藏内部实现方法和细节) c.减少类文件 缺点:a.增加语法的难度 b.使结构复杂化
7、什么是构造方法,有什么作用,如何调用本类和父类的构造方法? 和类同名,无返回类型 初始化父类属性 this(参数) super(参数)
☆8、final、finally、finalize有什么异同? [上海优觉] final 最终的 修饰属性表示常量 修改方法表示不能被重写 修饰类不能被子类继承 finally 异常中总会执行,除了System.exit(0) finalize 是Object类的一个方法,在垃圾收集器调用垃圾回收的此方法,会覆盖该方法提供的回收对象的其他资源
9、类和类之间有哪几种关系?面向对象设计原则有哪些? 类和类之间的关系:继承、实现、依赖、关联、聚合、组合 设计原则: 1.依赖倒置原则(面向接口编程) 2.迪米特法则 (尽量减少类和类之间的依赖) 3.接口隔离原则(一个接口只一个规定) 4.聚合/组合原则(尽量使用聚合组合关系) 5.里氏替换原则(慎用继承) 6.开闭原则(对扩展开放 对修改关闭) 7.单一职能原则 (一个类只做一件事情)
10、String和StringBuffer、StringBuilder的区别?[中软 上海优觉] 同:都是final类 异:
String是不可变字符串,可以像基本数据类型一样直接赋值(直接存放常量池), StringBuffer是可变字符串,线程安全,只能通过new产生对象 StringBuilder是可变字符串,线程不安全。在字符串缓冲区被单个线程使用的时候建议使用StringBuilder因为在大多数实现中,它比 StringBuffer 要快
11、如何区分运行时异常与检查异常,他们使用时有何区别?[中软] RuntimeException及其所有子类都属于运行时异常,在程序中可以不用处理,直接由jvm处理, 检查异常必须在程序中处理。
12、static, abstract可以修饰什么,有什么作用?abstract可以和final共同修饰吗?10 ①static修饰变量、方法,在类加载的时候就会初始化,所有实例共享,可以用类名.属性、类名.方法名; abstract修饰方法表示该方法没有具体实现,必须由其子类实现,修饰类表示该类为抽象类不能被实例化。 ②他们不能共同修饰,因为abstract是代表抽象必须被实现,final代表终极的不能重写和继承。
static 修饰成员变量和局部变量的区别? 成员变量在类中加载时,初始化。 局部变量在方法在方法调用时,初始化常量
13、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 值传递,因为他传递的是对象的地址值,在Java中只有值传递,没有引用传递。
14、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? java类型的流: 按功能分:输入、输出流; 按内容分:字节、字符流; 按形式分:实体、装饰流 Reader Writer OutputStream InputStream (面试:现场编码,用递归算法查找文件)
15、java的IO里面使用了哪些经典设计模式,举例说明? 适配器模式 InputStreamReader 装饰模式 FilterInputStream
16、什么是java序列化,如何实现java序列化? 序列化就是将内存中的对象保存到硬盘或传输到网络中 先将需要序列化的类实现Serializable接口,然后通过ObjectOutputStream或XmlEncoder类的writeObject()方法实现t
17、DOM解析和SAX解析各有什么特点? (你在项目中用到了xml技术的哪些方面?如何实现的?) DOM解析构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。 SAX是一个解析速度快并且占用内存少的xml解析器,是基于事件驱动来解析的,可以随时停止解析,不能载入整个文档到内存,不能写入xml JDOM DOM4J
xml的视图
dtd
文档定义形式 schema 数据存储(在做数据交换平台,将不同的数据的数据组成xml文件,然后将xml文件压缩打包加密,通过网络传送给接受这,接受解密与解压缩后同xml文件中还原相关的信息进行处理) xml的作用 配置文件(将配置参数存储在xml中)
18、对反射的理解?[中软 德邦物流 医指通2017] A 可以使用反射动态的创建类型的实例,将类型绑定到现有对象、或从现有对象获取类型 B 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便在实现某个任务时可以用到反射
反射中invoke的作用[秀驿国际2017] 调用,调用Method类代表的方法。可以实现动态调用,例如可以动态的传人参数,可以把方法参数化
new instance()的作用[秀驿国际2017] 静态方法实例化对象
19、如何理解代理模式,静态代理和动态代理及装饰模式有什么区别? 代理模式是为被代理的类扩充新的功能,具有控制被代理类的访问等性质 静态代理每增加一个被代理类型必须新建一个代理类,会造成类爆炸; 通过动态代理解决这种问题,动态代理通过Proxy['pr?ks?]类动态的产生代理对象从而可以代理任意类。
代理模式具有控制被代理类的访问等性质,而装饰模式仅仅是单纯的扩充被装饰的类,为所装饰的对象增强功能。所以区别仅仅在是否对被代理/被装饰的类进行了控制而已。
20、说出ArrayList,Vector, LinkedList的存储性能和特性?[重点] A. ArrayList和Vector都是使用数组方式存储数据,它们都允许直接按序号查询元素,但是插入元素要涉及数组元素移动等内存操作,所以查询 数据快而插入删除慢, ['vekt?] Vector B.Vector由于使用了synchronized方法,通常性能上较ArrayList差, C.而LinkedList使用双向链表实现存储,按序号查询数据需要前向或后向遍历,但是插入数据时只要记录前后项,所以插入删除较快。
[笔试题]:List Set Map
☆21、Collection 和 Collections的区别? Collection 是集合类的顶级接口,子接口有Set 和List. Collections是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
22、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?Java中是否有内存泄漏? A.Set里的元素是不能重复的,用equals和hashCode方法来区分重复与否。添加元素时先判断hashCode然后再判断equals。 B.垃圾回收机制只能回收没有引用的对象,在set集合添加了元素后又将计算hash值的属性修改了将导致内存泄漏。单例对象在JVM的整个生命 周期中存在,如果单例对象持有外部对象的引用, 那么外部对象将不能被jvm回收,所以不正确使用单例也能引起内存泄露。
23、sleep() 、yield() 和 wait() 有什么区别? 1.wait()方法是Object的方法,sleep()是Thread的方法 2.wait()方法必须写在synchronized里面 3.wait()方法在等待的时候会释放对象锁,sleep()睡过去也抱着对象锁不放!(重要) 4.yield()让当前正在执行的线程暂停,该方法不会阻塞线程,而是将线程转入可运行状态
☆24、java中如何编写一个线程类,并启动他? 继承Java.lang.Thread类,并重写run() 方法,调用该对象的start()方法启动线程 实现Java.lang.Runnable接口,并实现run() 方法,将该对象实例作为Thread构造的参数再调用start()方法,使用了代理模式。
25、线程通信?[大全智能2017 医指通2017] Java提供了3个方法解决线程之间的通信问题 wait() : 表示线程一直等待,并释放对象锁,直到其它线程通知再找回对象锁 notify() : (唤醒一个同一个对象上处于等待状态的线程) 唤醒在此对象监视器上等待的单个线程。['n??t?fa? notifyAll():唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先运行 唤醒在此对象监视器上等待的所有线程。[
多线程 ①线程和进程的区别? A.地址空间和其它资源 进程资源独立(内存单元地址空间),同一个进程下的线程资源共享 一个程序至少有一个进程,一个进程至少有一个线程 进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。 B.通信 进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。 C.调度和切换 线程上下文切换比进程上下文切换要快得多。 D.在多线程OS中,进程不是一个可执行的实体
②多线程的理解 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 意义:提高应用程序的使用率
③创建线程 继承Thread类,@Overide start()方法 实现Runable接口,new thread(),对象实例为thread构造的参数,调用start()方法,使用了代理模式
④线程之间的通信 wait() notify() notifyAll()
⑤sleep yield wait的区别 wait()方法是Object的方法,sleep()是Thred的方法 wait()方法必须写在synchronized里面 wait()方法在等待的时候会释放对象锁,sleep睡过去也抱着对象锁不放 yield()让当前正在执行的线程暂停,该方法不会阻塞线程,而是将线程转入可运行状态
⑥生命周期(状态)[电话面试] 新建状态(就绪)->可执行状态(运行)->阻塞(可能)->死亡状态
⑦运用: 生活: 电影院买票,有3个售票窗口售票 项目: 秒杀活动中下单,后台使用了同步 批量导入,例如批量导入静态人员,zip包含500张照片解析并上传
⑧多线程安全问题: 是否有多线程环境 是否有共享数据 是否有多条语句操作共享数据 ⑨同步 同步代码块 同步方法 静态同步方法 ⑩线程安全类 1).什么是线程安全? 多个线程和一个线程运行的结果是一样.存在竞争的线程不安全,不存在竞争的线程就是安全的 2).StringBuffer、Vector、HashTable、ConcurrentHashMap、Atomicxxx(原子类)、collections工具类转化
3).如何实现线程安全? 加synchronized ⑪线程池 面试官:你分析过线程池源码吗?
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行 scheduled['ʃedjuːld]
线程池和并发并行?
尴尬的面试现场:说说你们系统有多大QPS?系统到底怎么抗住高并发的?【石杉的架构笔记】
高并发?[医指通2017]
减少数据库的请求次数 1,页面静态化- 用户可以直接获取页面,不用走那么多流程,比较适用于页面不频繁更新。 2,使用缓存- 第一次获取数据从数据库准提取,然后保存在缓存中,以后就可以直接从缓存提取数据。不过需要有机制维持缓存和数据库的一致性。 3,使用储存过程-那些处理一次请求需要多次访问数据库的操作,可以把操作整合到储存过程,这样只要一次数据库访问就可以了。 4,批量读取 - 高并发情况下,可以把多个请求的查询合并到一次进行,以减少数据库的访问次数 5,延迟修改 - 高并发情况下,可以把多次修改请求,先保存在缓存中,然后定时将缓存中的数据保存到数据库中,风险是可能会断电丢失缓存中的数据, 6, 使用索引 - 索引可以看作是特殊的缓存,尽量使用索引就要求where字句中精确的给出索引列的值。
少是指查询的数据要少。 1,分表 - 把本来同一张表的内容,可以按照地区,类别等分成多张表,很简单的一个思路,但是要尽量避免分出来的多表关联查询。 2,分离活跃数据 - 例如登录用户业务,注册用户很多,但是活跃的登录用户很少,可以把活跃用户专门保存一张表,查询是先查询活跃表,没有的话再查总表,这也类似与缓存啦。 3, 分块 - 数据库层面的优化,对程序是透明的,查询大数据只用找到相应块就行。
分流 1,集群 - 将并发请求分配到不同的服务器上,可以是业务服务器,也可以是数据库服务器。 2,分布式 - 分布式是把单次请求的多项业务逻辑分配到多个服务器上,这样可以同步处理很多逻辑,一般使用与特别复杂的业务请求。 3,CDN - 在域名解析层面的分流,例如将华南地区的用户请求分配到华南的服务器,华中地区的用户请求分配到华中的服务器。
结合秒杀、批量导入
锁机制: ①是什么? 两个或两个以上线程争夺资源产生的线程等待 ②死锁案例
synchronized(DeadLock.obj1){
synchronized(DeadLock.obj2){
}
}
③java的锁?多线程锁的类型 对象锁和类锁的区别
锁类型:
1.公平锁 / 非公平锁
公平锁:尽量以请求锁的顺序来获取锁
2.可重入锁 / 不可重入锁
可重入锁:可重复可递归调用的锁,synchronized、ReentrantLock
3.独享锁 / 共享锁
独享锁:该锁每一次只能被一个线程所持有.Synchronized
4.互斥锁 / 读写锁
ReadWriteLock是读写锁,readLock()获取读锁,writeLock()获取写锁
5.乐观锁 / 悲观锁
6.分段锁
ConcurrentHashMap
7.偏向锁 / 轻量级锁 / 重量级锁
偏向锁:一段同步代码一直被一个线程所访问,那么该线程会自动获取锁。降低获取锁的代价
8.自旋锁
当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环
对象锁和类锁的区别? 当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放。(方法锁也是对象锁) 对象锁是用来控制实例方法之间的同步 类锁是用来控制静态方法(或静态变量互斥体)之间的同步
④乐观锁和悲观锁了解吗?JDK中涉及到乐观锁和悲观锁的内容? 数据库的锁,悲观锁和乐观锁的理解?[深圳市海魅蓝科技] 悲观锁:假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。version版本 乐观锁:认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做
⑤synchronized 和 ReentranLock的区别? ⑥ThreadLocal?应用场景?
数据一致性怎么做的?有没有做过相关压测?指标是多少
26、同步和异步有何异同,在什么情况下分别使用他们? 同步就是当一个线程运行时其他线程不能访问该线程中锁定的对象,为保障数据完整而使用的方法,而异步可以多个线程同时使用一个对象 如果数据将在线程间共享。例如正在写的数据可能被另一个线程读到,或 者正在读的数据可能已经被另一个线程写过了,那么这些数据 就是共享数据,必须进行同步。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在采用异步往往更有效率。
☆27、java的网络编程有哪两种,他们之间有什么区别? **简述Socket TCP协议:传输控制协议,提供可靠无差错的数据传输,资源消耗较大,性能和效率较低 UDP协议:用户数据报协议,不可靠的数据传输,资源消耗小,性能和效率较高
28、描述一下JVM加载class文件的原理机制?
JVM中类的加载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
29、描述下类实例化的详细过程(顺序)?
- 父类静态成员和静态代码块,按在代码中出现的顺序依次执行
- 子类静态成员和静态代码块,按在代码中出现的顺序依次执行 3.父类实例成员 4.父类构造方法 5.子类实例成员 6.子类构造方法 其中1.2是在类加载的时候执行
30、请描述Object中有哪些方法及其作用? clone() 创建并返回此对象的一个副本。 equals(Object obj) 指示其他某个对象是否与此对象“相等” finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 getClass() 返回此 Object 的运行时类。 hashCode() 返回该对象的哈希码值。 notify() 唤醒在此对象监视器上等待的单个线程。['n??t?fa?] notifyAll() 唤醒在此对象监视器上等待的所有线程。 toString() 返回该对象的字符串表示。 wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 wait(long timeout) 在其他线程调用此对象的notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。 wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过指定实际时间量前,导致当前线程等待。 nanometer ['ne?n?mi:t?] n.[计量]毫微秒
==和equals的区别?&和&&的区别?[中软2017] ==是比较变量所对应的内存中所对应的数值,基本数据类型 equals是比较字符串 &是逻辑运算符,&&是位运算符(短路的功能,如果前面的表达式为false后面的就不会执行)
String的方法?[德邦 中国电信理想] String是否可以继承?[笔试题] final类,不能修改 **31.HashTable和HashMap的区别? 都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的
jdk1.8中,对hashMap和currentHashMap做了哪些优化?
hashMap优化: 1.当链表长度大于8时,转化为红黑树结构.提高查询效率 2.优化扩容方法,在扩容时保持了原来链表中的顺序,避免出现死循环
currentHashMap优化: 1.8的实现已经抛弃了Segment分段锁机制,利用Node数组+CAS+Synchronized来保证并发更新的安全,底层采用数组+链表+红黑树的存储结构。
如何解决hash冲突的,以及如果冲突了,怎么在hash表中找到目标值 链地址法 “头插法”,放到对应的链表的头部 https://www.jianshu.com/p/38337264911d
**32.JVM? 重点
-
JVM的内存结构? 方法区 堆 虚拟机栈 本地方法栈 程序计算器
-
内存中堆 栈 静态区的作用 内存区域 堆区:heap 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身. 3.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 栈区:stack 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 4.由编译器自动分配释放 ,存放函数的参数值,局部变量的值等 静态区/方法区:method 1.方法区又叫静态区,线程共享。方法区包含所有的class和static变量。 2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。 3.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
-
jvm性能优化?
-
Java GC机制?GC Roots有哪些? 谈下对GC的了解,何为垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的区别,看过cms的源码吗?[美团]
-
有没有使用过jvm自带的工具,如何使用的[美团]
-
有没有排查过线上oom的问题,如何排查的[美团]
-
什么时候用assert? Assert有什么作用? 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的 34.Math.round(11.5)等於多少? Math.round(-11.5)等於多少? ceil: 向上取整 Math.ceil(11.3)=12 Math.ceil(-11.3)=-11 floor:向下取整 Math.ceil(11.6)=11 Math.ceil(-11.6)=-12 round:四舍五入 Math.round(11.5)=12 Math.round(-11.5)=-11
35.说出一些常用的类,包,接口,异常,请各举5个[笔试] 类 : String , Integer , Character , Float , ArrayList 包 : java.util , java.lang, java.text, java.sql, java.io 接口 : Iterator , List, Map , Cloneable , Serializable 异常: IndexOutputBoundsException、NullPointException、NumberFormatException、 ClassNotFoundException、MethodNotFoundException、IOExceptionSQLException
常见的异常,如何解决?(重点)[医指通 2017]
36.访问类型?
作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × ×
37.int和Integer的区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java 为int提供的封装类。Java为每个原始类型提供了封装类 ☆38.启动一个线程是用run()还是用start()? ①什么时候使用Thread,什么时候使用Runable ②启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。 run()方法可以产生必须退出的标志来停止一个线程。
39.&和&&的区别。 &是位运算符。&&是布尔逻辑运算符
40.JDK使用的版本?JDK8的新特效?
41.静态变量和实例变量的区别? [文思海辉 平安科技 中软国际] 静态变量:用static,类的属性,类名来引用,就分配了空间 实例变量:对象的实例,必须先创建对象才能使用 42.iterator的作用? [电话面试] 43.四位数的随机数?[中国电信理想] (int)((Math.random()*9+1)*1000) 44.当前时间?3年前的时间
jvm内存模型 程序计算器:保存当前线程执行的虚拟字节码指令的内存地址 虚拟机栈:和线程紧密联系,为java方法服务 本地方法栈:为native方法服务 方法区:存储类结构信息的地方,包括常量池、静态变量、构造函数等 堆:存储java实例或对象的方法 java数据类型?[软通动力] 8基本数据类型和3引用数据类型 基本:int、byte、short、long、char、double、float、boolean 引用:类、接口、数组 结构算法 8种排序算法: 直接插入 插入 希尔 内部排序 选择 简单选择 (只使用内存)交换 冒泡排序(快速) 归并 基数
外部排序
(内存和外层相结合)
[美教]:二分算法(不只需要会框架的人,那样还不如招个应届生)
红黑树、二叉树的算法
框架-hibernate ☆1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory
为什么要用? 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.请描述下hibernate对象的三种状态是什么,有什么不同? 瞬时状态transient: 对象只存在于内存中,缓存和数据库中都没有id 持久化状态persistent: 内存中有id,缓存中有id,数据库也有id 游离状态detached: 内存中有id,缓存中没有id,数据库有id
3.谈谈你对Hibernate和MyBatis的理解及相对JDBC有什么优缺点? 相同点:都是通过sessionFactorybulider由xml配置文件生成sessionfactory,然后由sessionfactory生成session,然后开启执行事务和sql, 三者生命周期都是差不多的 mybatis的优势:可以进行更加细致的sql优化,减少查询的字段 hibernate优势:dao层比mybatis简单,数据库移植性比mybatis强,二级缓存机制比mybatis好,对象的缓存和维护比mybatis好 相对于jdbc开发效率高,运行速度快,但内存消耗大
☆4.请描述下什么是hibernate 1+N问题及如何解决? 查询多的一方默认会把一的一方查询出来(Eager),而且是发N条sql的方式查询 1、将多的一方设FetchType.LAZY,用到一的一方的时候才发sql语句,只是延迟而已 2、使用hql的迫切左外联接查询(left join fetch),只发一条|xml可以设置fetch="join" 3、使用Criteria查询,即使用hql的左外联接查询,只发一条 4、@BatchSize(size=?) 取一的一方的时候发1+N/?条sql | xml中的class标签中设置batch-size="5" 只有fetch="select"有用
5.请写出常见的几种主键生成策略,并解释其用途? 1:assigned ----表示在新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。 2:increment ----表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1. 适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。 3:identity ----主要适用于sqlserver数据库的自动增长列的表。 4:native ----表示根据不同的数据库采用不同的主键生成策略。
6.请指出session的get和load方法、save和saveOrUpdate方法、clear和flush方法的区别? get():先检查缓存(session),没有该对象立马发sql,如果对象不存在返回null,使用的时候则NullPointerException load():返回代理对象($$,stu.getClass()),需要用到的时候先检查缓存,没有才发sql,如果对象不存在直接异常(LazyInitializationException),session关闭后再用到也将异常 no session get()较常用,load()不常用 save():不管怎样都保存,即使有和数据库相同的id saveOrUpdate():对象存在id则update,如果数据库有id则成功update没有对应的id则异常,对象没有id则save clear():强制清空缓存,让对象变成瞬时状态或者游离状态 flush():默认强制缓存和数据库同步一下,对象变为持久状态,但没有提交还可以回滚session没有关闭
get和load的区别?(软通动力2017) load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常 get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。
☆6、hiberante中的对象关联关系有哪几种?MyBatis怎么配置关联关系? 1、单向一对一关联映射 2、单向多对一关联映射(many-to-one) 3、单向一对多关联映射(one-to-many) 4、单向多对多映射(many-to-many) 5、双向一对一关联映射 6、双向一对多关联映射 7、双向多对多关联映射
mybatis:可以使用嵌入式,引入式,继承式 一对多的时候在一的一方设置collection,多的一方设置association 多对一的时候在多的一方设置association,一的一方设置collection 多对多的时候,使用中间表实体映射,拆成一对多和多对一
7、hibernate联接查询有哪几种,迫切和非迫切有什么区别? 1.默认查询的情况: 2.迫切左外连接 3.左外连接 4.迫切内连接 5.内连接(包含隐式内连接) 6.右外连接
迫切联接和非迫切联接返回类型不同,但都是持久化状态,无论是否懒加载都会加载关联对象!
8、请描述下list()方法和iterate()方法有什么区别? iterate:先取所有需要的id,根据id查询对应的记录,第二次iterate先看缓存有木有,木有才发sql list:直接取所有记录,即使同一事务中第二次list还会发sql去数据库取,没有利用一级缓存
☆9、请描述下hibernate的缓存机制及事务隔离机制?[文思海辉电话面试 中信] 缓存机制:分类: 1.一级缓存:session缓存,事务范围的缓存 ☆2.二级缓存:sessionFactory的缓存,事务隔离级别的缓存(经常被访问、改动不大、数量有限、不是很重要,允许出现偶尔并发的数据) 3.查询缓存(应用程序运行时经常使用的查询语句,很少对查询的数据进行增、删、改操作)
缓存算法:LRU最近很少使用 LFU最少被使用 FIFO先进先出
作用:降低应用程序对数据库的访问频率,提高应用程序的运行效率
事务隔离机制:当事务并发访问有可能造成:脏读、不可重复读、幻读,会严重影响数据库和用户体验,通过设置事务隔离级别, 或者利用Hibernate提供的两种锁机制,悲观锁和乐观锁来解决
10、谈谈你对xml配置文件中的fetch和inverse的理解? fetch是抓取策略: select是在查询的时候先查询出一个实体,然后在根据一个查询出多个实体,产生1+N现象 join是在查询的时候使用外连接进行查询 subselect发送一条select语句抓取在前面查询到的所有实体对象的关联集合 实现懒加载设置lazy="true"后,一定得设置fetch属性等于select inverse:标记由哪一方来维护关联关系,双向关联中,默认值为false,如果设置为true,则表示由对方维护两者之间的关联关系
Mybatis
1.Mybatis mybatis是一个持久层的框架,是apache下的顶级项目。 mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。 mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。 mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
MyBatis的理解?[逑美科技有限公司]
2.mybatis框架原理
☆3.性能优化:解决1+N问题:用到哪个对象才发对应的sql
1、使用懒加载
配置:<settingname="lazyLoadingEnabled" value="true"/>
只要用到对象,不管是否用到关联对象都发1+N,只有什么对象都不用才发一条sql
2、使用联接查询
left join ...
4.缓存:
一级缓存是默认开启不能关闭
mybatis中还默认开启了全局缓存(二级缓存)
缓存开启后session没有关闭执行同样的sql语句会使用缓存,如果参数改变,缓存就会失效。
实现方式:1.内置 -cache 机制
2.第三方-ehcache, oscache
☆5.对比-Mybatis和hibernate的区别和应用场景?
hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。
对sql语句进行优化、修改比较困难的。
应用场景:
适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。
mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql, mybatis 也可以实现映射(输入映射、输出映射)。 应用场景: 适用与需求变化较多的项目,比如:互联网项目
6.Mybatis中#跟$的区别?
#把传入的数据当作字符串
7.ibatis:开源的 轻量级的 基于java持久层的 半自动式开发框架 优点: 1、sql可以写在XML中 结构清晰 配置灵活 2、增强了后期维护性 3、执行sql后 返回的结果集自动封装 缺点: 1、只使用于小项目 2、sql写在XML中 调试不方面 3、开源的东西少 文档资料少
8.ibatis 跟mybatis的区别: 1、mybatis实现了接口绑定,使用更加方便 2、mybatis改进了对象关系映射,效率更高 3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。 4.mybatis 增加的注解版
Ibatis跟Hibernate比较: 如果系统二次开发 Ibatis比Hibernate灵活性高 Ibatis简单易学 Hibernate相对复杂 在不同的数据库移植中 hibernate比较好 Ibatis可以进行细粒度优化 而Hibernate根据映射关系全部优化
Ibatis跟jdbc 比较: jdbc它是一个执行Sql语句的JAVA API 是一套访问数据库标准 提供了一组接口 Ibatis也是一套数据库框架 但是把sql语句抽离了出来 底层也是JDBC
9.MyBatis使用的版本?[上海普元]
10.MyBatis的标签?[德邦] 框架-Struts2 1.Struts2 Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点 Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性
1.Struts2跟Struts1的区别? struts2使用过滤器作为主控制器无需继承HttpServlet,struts1使用一个继承HttpServlet的ActionServlet类作为主控制器。 struts2中可以使用OGNL表达式,struts1中没有OGNL struts2中无需新创建一个专门作为页面数据对接的form类,struts1中要想获取页面数据对Bean进行填充必须要创建. struts2中自定义Action一定要继承struts中的Action或其子类,而且Action中的方法也无需再带参数. struts2中是多线程的,strut1中是单线程.
☆2.Struts2 的工作原理(执行流程)?应用了哪些经典设计模式? tomcat->web.xml->filter->struts.xml->namespace->action->method->result->jsp|html
- 客户端发送请求(*.action)
- FilterDispatcher拦截请求
- 调用ActionMapper,查找有没有对应的action
- 找到对应的action,创建Action的代理类ActionProxy,负责action的执行
- ActionProxy通过ConfigurationManager对象获得当前访问的action的相关配置信息.
- ActionProxy根据获得的action的配置信息,创建ActionInvocation对象.
- ActionInvocation对象负责执行invoke()方法,调用action的方法
- 处理完action后,返回Result对象,拦截器根据处理结果分发到对应的视图页面显示
设计模式 责任链模式 MVC设计模式 代理模式 适配器
3.浅谈struts2拦截器, 你知道struts2中那些拦截器?[德邦] 拦截器是在执行用户自定义Action之前执行的,能动态的拦截Action调用。 拦截器:Interceptor 拦截器本身是一个普通的java 对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种各样的Web项目许久。也可以阻止Action的执行 ,同时也可以提取 Action中可以复用的部分. 拦截器 : 大致分为拦截器,与连接链(stack) 拦截器与拦截链都存放在struts2-core核心jar包中的struts-default.xml文件中,在文件中可以看到所有的拦截器都在此文件中。
1.timer时间拦截器,用来计算从执行拦截器到拦退出截器共用了多长时间.
2.i18n 国际化语言拦截器
3.fileUpload 文件上传拦截器
...
6.如何实现自定义拦截器? 创建拦截器实现Interceptor接口或继承AbstractInterceptor,重写intercept()方法,配置xml
4、请写出自定义类型转换器的实现步骤?
1. 实现ognl.TypeConverter接口重写convertValue()
或 继承ognl.DefaultTypeConverter重写convertValue()
或 继承StrutsTypeConverter抽象类(DefaultTypeConverter子类)重写convertFromString(前台到后台)和convertToString(前-后)(常用)
2.注册转换器(自定义转换器):
a.配置全局属性文件xwork-conversion.properties(属性原始类名=转换器类)
jdbcType,类路径
com.cssl.Point=com.cssl.struts.MyConverter
b.配置指定action属性文件action名-conversion.properties(属性名=转换器类)
5.在action中如何使用request,response,session,application等对象? 1、使用内置类型获取(使用Servlet解耦合) 2、实现RequestAware、SessionAware、ApplicationAware接口,依赖容器注入DI(Dependency injection) (一般用这种) 3、使用Servlet耦合的方式(基本不用):ServletActionContext..... 4、实现ServletRequestAware、ServletResponseAware接口(DI)
10.struts2支持哪些表达式?OGNL有哪些特点? 1.OGNL(Object-Graph Navigation Language), 表达式,方便地操作对象属性的开源表达式语言 2.JSTL(JSP Standard Tag Library), JSP 2.0 集成的标准的表达式语言。 3.Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如 Python、Ruby和Smarttalik 等) 的一些特性; 4.Velocity, 严格来说不是表达式语言,它是一种基于Java的模版匹配引擎,据说其性能要比JSP好
OGNL表达式的特点: 1.支持对象方法调用,如xxx.doSomeSpecial(); 2.支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括路径)]@[方法名|值名] 例如: @java.lang.String@format('foo%s','bar') 或@tutorial.MyConstant@APP_NAME 3.支持赋值操作和表达式串联,如price=100,discount=0.1,calculatePrice(),这个表达式结果会返回80 4.访问OGNL上下文(OGNL 5 和ActionContext 5.操作集合对象
11.struts2的OGNL表达式中 '#’,'%’, '$’ 三个符号有哪些作用? ognl全称是Object Graph Navigation Language, struts2使用OGNL为默认表达式语言,同时扩展了OGNL,如值栈,并将值栈作为OGNL 的根对象,可以直接访问,结合struts标签使用
%{}:将原本的文本属性解析为ognl % : 1.使用%{}可以取出保存在值堆栈中的Action对象,直接调用它的方法 2.如果Action继承了ActionSupport,那么在页面标签中可以使用%{getText('key')}获取国际化信息 $ 用于i18n和struts配置文件 ^:过滤,返回符合条件第一个 ?:过滤,返回符合条件的最后一个;传值
struts2标签的作用?[诚泰财产]
14.struts2中有哪些核心类, 各有什么作用? ①.FilterDispatcher ,核心控制器, 作用: 1.读取静态数据信息 2.决定需要转发或者导航的Action配置 3.创建Action的Context 4.创建Action代理 5.内存清理和性能优化 ②.拦截器Interceptor 拦截器本身是一个普通的java 对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种各样的Web项目许久。 也可以阻止Action的执行,同时也可以提取Action中可以复用的部分. ③.ActionMapper ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等 Java Servlet类的依赖。 Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的需求来设计url格式 , 它自己也有Restful的实现,具体可以参考文档的docs\actionmapper.html ④.ActionProxy & ActionInvocation Action的一个代理,由ActionProxyFactory 创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。 ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的. ⑤.ConfigurationProvider&Configuration ConfigurationProvider 就是Struts2中配置文件解析器, Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类,XmlConfigurationProvider 及其子类 StrutsXmlConfigurationProvider来解析 ⑥.Configuration
15.请描述下Struts2提供的处理ajax的方式? jquery+struts2+json插件 Structs2的ajax标签 原生ajax dwr 16.Struts2的属性注入有哪几种方式?什么时候使用那种方式? 1、属性:直接在action定义属性和jsp页面name名称对应(属性较少的时候使用) 2、域模型:定义一个实体类Vo,类属性和jsp页面的name对应(jsp name:vo.属性名),action 中拥有vo的引用及get和set方法,还需注意vo一定要有无参的构造(常用) 3、模型驱动:实现ModelDriven,必须自己手动new Vo()无须get和set, jsp页面直接用属性名称,不需要vo.属性名,而且不能在一个action注入两个vo对象
17.如何让一个Action的多个方法映射不同请求?这几种方式各有什么特点 A).动态方法调用DMI :不推荐用,因为会有安全隐患 B).每个方法配置action:会产生太多的action C).通配符:注意写多个"action name=*"的时候防止冲突,约定高于配置
18.请描述ActionContext、StackContext、ValueStack之间的关系? ActionContext?: 是Action上下文,可以得到request session application一次Action调用都会创建一个ActionContext ValueStack: 是值栈,由OGNL实现?,存放表单中的值 可以把它简单的看作一个List Stack Context:栈上下文,用来存值
19.请描述struts2中的拦截器和过滤器的区别?[长量基金] 同: A).都是责任链模式的典型应用 B).功能类似,原理类似,方法类似 异: A).拦截器是webwork和struts2的概念,在struts2.xml中配置,只能拦截action请求 B).过滤器是Servlet中的概念,在web.xml配置,可以过滤所有请求
12.struts2你使用过哪些返回类型?各有什么区别?[软通动力2017] dispatcher 转发类型,代表返回结果为转发,数据不丢失,地址不变。 redirect 重定向,返回结果为重定向,数据丢失,地址改变。 chain 用来处理Action链,被跳转的Action仍然能获取上个页面的值,如request信息
13.ActionSupport类的作用? 实现了哪些接口?
ActionSupport作为Action类的基类,用来使用其父类已实现的一些方法。
作为Action的基类,实现了很多接口。
1.Action 存放了Action中方法常用的几个返回值,如success,input,login...
2.Valiadteable 验证类,包含了默认验证方法。此方法必定会被调用.
3.ValidationAware 验证信息处理类,如使错误消息获取,错误信息添加方法...
4.TextProvider 国际化供给类,获取国际化资源文件中的信息.
5.LocaleProvider 本地化供给类,获取本地信息.
6.Serializable 序列化接口,实现网络传输.
4.在struts2中,如何校验数据?
1.在Action中创建validate+要校验的方法名首字母大写
2.创建名称-validation.xml校验框架文件.
也可 在Action里实现preparable接口
7.在struts2中,如何设置上传文件格式或文件大小?
1.设置文件格式: 在想实现文件上传的Action标签下配置interceptor-ref标签name属性内容为fileUpload,
然后再在标签中添加配置param标签,name属性内容为allowedType在text中写入文件类型/文件格式
2.设置文件大小: 在struts.xml文件中创建constant 标签,设置name属性为 value 为文件大小单位为字节
8.在struts2中,如何设置国际化资源文件路径? 在页面如何使用国际化 在sturs.xml文件中配置constant标签 name属性为struts.custom.i18n.resources value为国际化资源文件路径.
- 页面中使用标签/struts-tags标签库 中的标签并在其标签下配置一个标签
- 使用OGNL表达式%{getText('国际化属性名称')}
9.struts2中,你使用过哪些标签? fielderror 错误信息输出标签, iterator 集合迭代标签, if 判断标签,form 表单标签,textfield text字段标签, submit 表单数据提交标签...
10.重复提交的插件,实现原理? token
框架-Spring
1、谈谈你对Spring的理解?[上海极点信息科技有限公司] spring是一个设计层面,轻量级的控制反转(IOC)和切面(AOP)非侵入式的开源框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用
☆2、请谈谈你对Spring的IOC和DI的理解? 控制反转IOC(Inversion of control):对象创建的权利反转到Spring容器(ApplicationContext.xml)而程序本身不在维护了 依赖注入DI(Dependency injection) :实际上DI和IOC是同一个概念,对象的创建由spring容器注入
3、Spring提供了几种注入方式?bean的生命周期主要有哪几种,用于什么情况?
①注入方式: set : 针对性强 构造器 : 赋值方便 接口 : 降低类之间的耦合性,提高代码可读性,与操作性 注解 : 使用方便,想赋值就赋值。控制性强
②bean的生存范围: scope 属性 (文档) 默认singleton(默认单例,action不能为单例):bean对象只会实例化一次 prototype(原型 多例):多个对象实例 request:一次HTTP请求,对应一个实例,仅在基于web的SpringApplicationContext情形下有效 session:session中对应一个实例.web 下有效 global session : 在一个全局的HttpSession中,一个bean定义对应一个实例
☆4、请解释下Spring的AOP是什么,有什么作用? AOP(Aspect Oriented Programming)面向切面编程 前置型通知 : 指定方法执行之前先执行通知方法。 后置型通知 : 指定方法执行之后再执行通知方法。 环绕行通知 : 执行方法执行之前执行一次,当指定方法执行之后,再返回坏绕行通知方法。 最终型 : 不管是否抛出异常都会执行通知。 异常型通知 : 只有当目标方法抛出异常之后才会执行通知
5、Spring中使用了哪些经典设计模式,举例说明? 1)工厂方法(Factory Method):Spring中的FactoryBean,让子类决定实例化哪一个类 2)单例(Singleton):提供了全局的访问点BeanFactory 3)适配器(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 举例:实现接口,web.servlet.mvc.SimpleControllerHandlerAdapter 4)代理(Proxy):为其他对象提供一种代理以控制对这个对象的访问 举例:aop 5)模板方法Template Method:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 举例:JdbcTemplate和DaoSupport
☆6、请描述下Spring是如何管理事务的? 声明式 : 在ApplicationContext.xml文件中配置事务 配置简单,使用方便,可控性强,细粒度高。由于它是将事务放在 xml文件里的,所以需要解析 编程式事务 : 在ApplicationContext.xml文件中配置事务 侵入性强,可控性差,一经编译不可被改变。但由于它是将事务代码写在DAO层代码里的,性能方面更高 注解 : 在持久层配置注解 配置简单,使用方便。缺点是一编译不可被改变。
脏读、幻影读、不可重复读
7、请描述下Spring整合struts2的基本步骤? 导包 配置struts.objectFactory属性值: 配置web.xml增加spring的监听器 Spring配置文件 修改Struts配置文件
8、请描述下Spring如何解决懒加载的方式? lazy-init(也分局部和全局):懒加载 true:延迟初始化,用到对象时,才初始化对象
9、请描述下Springmvc有哪些核心组件? 核心控制器:DispatcherServlet 控制器: Controller 请求分发器:Handler Mapping 视图解析器:ViewResolver & View 拦截器: Interceptors 本地化解析器 LocalResolver 验证器 Validate
☆10.Spring的安全(线程安全?)问题? 线程不安全的 struts1的action是单例的,所以存在线程安全问题(strusts2是多例的,所以也存在线程安全问题) springmvc默认的注入是单例,所以也存在线程安全问题 原因:单例 解决办法: struts1如果被spring管理,设置成scope为protype 禁用可变动的成员变量,使用局部变量
☆11.请描述下Springmvc的工作流程? 比较:☆struts和springmvc工作流程
1.DispatcherServlet接收请求
2.DispatcherServlet查询对应的处理器映射项(HandlerMapping),,找到处理请求的Controller,负责对请求进行真正的处理工作。
3.DispatcherServlet请求提交到目标Controller
3..Controller进行业务逻辑处理后,会返回一个ModelAndView
4.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
5.视图对象负责渲染返回给客户端。
简化版:
http发起请求到dispatcherServlet,通过HanderMapping映射到指定的Controller上,
Controller做一些业务代码的处理,返回到ModelAndView对象,然后通过视图解析器渲染出相应的view。
struts2执行流程:
http发起请求根据web.xml配置,
经过一系列的过滤器,再根据Struts.xml找到action类和方法,action调用业务逻辑组件处理,
再根据Struct.xml找到对应结果,跳转到相应的页面。
☆12.Struts与SpringMVC的区别
Spring配置文件如何写?
Spring加载顺序?[软通动力2017]
A. 实例化;
B. 设置属性值;
C. 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name;
D. 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory;
E. 如果实现ApplicationContextAware,调用setApplicationContext设置ApplicationContext
F. 调用BeanPostProcessor的预先初始化方法;
G. 调用InitializingBean的afterPropertiesSet()方法;
E. 调用定制init-method方法;
F. 调用BeanPostProcessor的后初始化方法;
G.Spring容器关闭,调用DisposableBean的destroy(),destroy-method方法;
Spring常用注解?[面试] @Componen、@Service、@Repository、@Controller、@RestController @Autowired、@Resource、@Configuration、@Bean、@Configuration、@Aspect @Value、@RequestMapping、@PathVariable、@RequestMapping
框架整合
一、Struts + Spring + Hibernate
Struts:表现层
1、Struts2采用Filter 进行配置
2、配置提交方式、通配符
3、
Spring:业务层
1、AOP
2、CORE
3、applicationContext.xml常用配置(dataSource数据源配置,sessionFactory工厂,TrasactionManager事务配置)
Hibernate:持久层
1、SQL和JDBC API
2、基于POJO,便于测试
二、Struts整合Spring
1、使用Spring 的 ActionSupport 类整合 Struts
2、使用Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor
3、将Struts Action 管理委托给 Spring 框架
三、Spring 整合 Hibernate
1、在 Spring 框架中,像 JDBC DataSource 或 Hibernate SessoionFactory 这样的资源,在应用程序上下文中可以用 bean 实现;
1、配置数据源,有三种方式的数据源
方式一:Spring内置实DriverManagerDataSource
方式二:DBCP提供的BasicDataSource
方式三:JNDI数据源(mysql5,tomcat6为例)
2、配置sessionFactory
3、配置事务
四、准备
1. 开发环境:MyEclipse 8.0 GA(Eclipse3.5.1,JRE1.6.0.10和MyEclipse Enterprise WorkBench8.0)
2. 运行环境:JDK 6 Update 20(JRE1.6.0.13)
3. 开发框架:Struts 2.1.8.1,Spring 2.5,Hibernate 3.2
4. 应用服务器:tomcat 6.0.26 5. 数据库服务器:SQL Server 五、理论
五、理论 简单来说就是使用Spring的IoC在Spring的容器中初始化好注入 bean、 sessionFactory、action、manager、dao等对象,这样对象就可以直接使用。 Hibernate负责数据库的持久化操作。 Struts负责表现层数据的传递,页面的跳转等。
SSH整合[重点--上海科江电子 上海触特信息科技]
JPA的理解[深圳阿尔法2017]
Java持久层API,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中
提供的功能:
1.ORM映射元数据
2.JPA的API(用来操作实体对象,执行crud操作)
3.查询语言
数据库面试
1.Sql优化?[重点--德邦、平安科技、简装包2017]
根据主键查询
大数据表删除,用truncate table代替delete
合理使用索引
查询时,使用列名(select *)
尽量少嵌套子查询
避免在 where 条件中进行函数计算
减少对表的查询
尽量多使用 COMMIT:
使用 DECODE 函数来减少处理时间
删除重复记录
sql 语句用大写的
用 IN 来替换 OR
连续in,使用between and
事务
使用外键
explain分析sql执行计划
服务层面 配置mysql性能优化参数; 系统层面 优化数据表结构、字段类型、字段索引、分表,分库、读写分离等等。 数据库层面 优化SQL语句,合理使用字段索引 代码层面 使用缓存和NoSQL数据库方式存储,如MongoDB/Memcached/Redis来缓解高并发下数据库查询的压力
2.分页[上海触特信息科技] MySQL:select * 表名 limit pageIndex,(pageIndex-1)pageSize Oracle: SELECT * FROM (SELECT ROWNUM rn,t. FROM (SELECT ename,sal FROM emp ORDER BY sal) t --排序查询所有结果 WHERE ROWNUM<=10) --限制查询的上限(pageIndex*pageSize) WHERE rn>5 --限制查询的下限(pageIndex-1)*pageSize 取前10条 ☆3.说出数据连接池的工作机制是什么? 连接池的实现是以空间换时间 优点:效率高,安全性稳定性好,节约资源
工作机制: 创建:J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。 调用:客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。 如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。 释放:当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正关连接,而是把它代理的Connection对象还回到连接池中。
4.外连接与内连接的区别? 内连接(自然连接):只有两个表相匹配的行才能在结果集中出现 外连接 左外(以左边的表为主) 右外(以右边的表为主) 全外连接(左右两边都不受限制) 5.外连接中的左外连接、右外连接和全外连接有什么特点? 左外连接:A left [outer] join B on 等值条件 右外连接:A right [outer] join B on 等值条件 完全外连接:A full [outer] join B on 等值条件 6.表级锁,行级锁和页面锁各有什么特点? 表级锁 , 开销小,加琐快。不会出现死锁;锁粒度大,发出琐冲突的概率最高,并发度最低。 行级锁 , 开锁大,加琐慢;会出现死琐;琐力度最小,发生琐冲突概率最低,并发度也最高。 页面锁 , 锁力度界于表锁和行锁之间,并发度一般。
7.如何操作一个游标读取一个表? 写出代码?
用过游标吗?在存储过程中用过游标吗?
游标的好处?[深圳市海魅蓝科技2017] 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果 优点: a 对从表中检索出的数据进行操作非常灵活。 b 允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作。 c 提供对基于游标位置而对表中数据进行删除或更新的能力。 缺点: 游标速度较慢
8.什么是存储函数? 如何声明存储函数?存储函数有什么限制?
☆9. 什么是存储过程? 如何创建存储过程?
概念
a.类似于C#/Java中的方法,是对代码的封装,方便用户调用
b.过程可以无参,也可以接收1个或多个参数
c.过程可以通过return返回1个int类型数据
优点[深圳市海魅蓝科技2017]
a.模块化,按功能进行封装
b.重用性好,易于维护
c.执行效率高,编译好之后存储在数据库中
d.减少网络流量的使用
e.安全性高
创建
CREATE OR REPLACE PROCEDURE 过程名
AS
声明部分
BEGIN
逻辑处理部分
END;
调用
BEGIN
过程名
END;
数据库存储过程,输入和输出参数,编程题?[恒拓开源2017年]
--eg 创建过程,根据员工编号查询员工姓名(out参数)
CREATE OR REPLACE PROCEDURE
proc_three(eno IN NUMBER,v_ename OUT VARCHAR2)
AS
BEGIN
--eno:=7438; --不能赋值
dbms_output.put_line(v_ename);
SELECT ename INTO v_ename FROM emp WHERE empno=eno;
END;
--调用
DECLARE
eno NUMBER;
v_ename VARCHAR2(20);
BEGIN
eno := &eno;
--v_ename:='admin';
proc_three(eno,v_ename);
dbms_output.put_line(v_ename);
END;
10.存储过程和函数的区别[深圳市海魅蓝科技2017]
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程 函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表
11.事务是什么?[重点]
1、概念:同生共死
1)事务是最小的逻辑单元
2)该单元包含1个或者1组数据库操作
3)这些数据库操作要么同时成功,要么同时失败
2、分类:
1)隐式事务
2)自动提交事务:针对单个数据库操作
SQLServer将单个的insert/delete/update操作当作1个独立的事务,自动提交
3)显式事务:针对多个数据库操作 a- 开始事务 begin transaction b- 提交事务 commit transaction c- 回滚事务 rollback transaction 注意:使用@@error累加每个操作的错误号,作为判断提交或回滚依据
3、特点:ACID A- 原子性,事务是最小的、不可分割的逻辑单元 C- 一致性,事务前后的数据应保持一致 I- 隔离性,事务之间是相互独立的 D- 永久性,事务提交后对数据库的影响是永久的,一旦提交则无法回滚
事务的作用:
12.Oracle
①Oracle是甲骨文公司的一款关系数据库管理系统。 ②Oracle主要特点: 1.)完整的数据管理功能: 1.数据的大量性, 2.数据保存的持久性, 3.数据的共享性, 4.数据的可靠性。 2.)分布式处理功能。 3.)用ORACLE能轻松的实现数据仓库的操作。 ③Oracle的优点:可用性强,可扩展性强,数据安全性强,稳定性强。 13.MySQL
1.MySql是一个开放源码的小型关联式数据库管理系统。 2.MySql的系统特性: 1.为多种编程语言提供了API。 2.支持多线程,充分利用CPU资源。 3.提供多语言的支持。 4.优化的SQL查询算法,提高查询的速度。 5.提供TCP/IP、ODBC和JDBC等多种数据库连接途径
14.表和视图的区别?
15.Oracle的数据类型?
16.数据库函数?[德邦]
sum avg count max min 17.去除重复值?[德邦 平安]
18.备份还原[德邦]
19.MySQL使用的版本?[德邦]
20.union和union all的区别?[中软] 合并两个结果集
21.索引为什么快?用了什么数据结构?画出数据结构?[平安] b+tree 倒排索引 22.sqlserver和mysql的区别?[电话面试]
23.MySQL行锁是否会有死锁的情况?表级别锁,行级别锁? 测试环境的mysql死锁?
24.case when: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
SELECT id, name, cj, (CASE WHEN cj < 60 THEN '不及格' WHEN cj BETWEEN 60 AND 90 THEN '良好' WHEN cj > 90 THEN '优秀' END) AS 状态 FROM stud
25.explain id:SQL执行的顺序的标识,SQL从大到小的执行
- id相同时,执行顺序由上至下
- 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 3.id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
select_type:查询中每个select子句的类型 A.SIMPLE(简单SELECT,不使用UNION或子查询等) B.PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY) C.UNION(UNION中的第二个或后面的SELECT语句) D.DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询) E.UNION RESULT(UNION的结果) F.SUBQUERY(子查询中的第一个SELECT) G.DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询) H.DERIVED(派生表的SELECT, FROM子句的子查询) I.UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
table:表
type:MySQL在表中找到所需行的方式,又称“访问类型” ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行 index: Full Index Scan,index与ALL区别为index类型只遍历索引树 range:只检索给定范围的行,使用一个索引来选择行 ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件 const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。
ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
Key:key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX
rows:表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
26.数据库插入字段和修改字段?[大全智能2017] alter table 表名 add 字段名 数据类型 alter table 表名 字段名称 字段类型 [完整性约束条件] alter table 表名 drop 字段名
27.数据库题,sql语句,stu表有学生,科目,成绩3个字段[秀驿国际] a.每个学生的总成绩 b.查询总成绩大于600分的学生
28.表连接查询时 大表在前小表在后?[中软国际] 大表在前,表连接查询时后面的表必然会进行全表扫描,所以数据少的放后面,提高sql语句的执行效率
29.为什么mongodb的索引用了B树,而mysql用B+树?
30.知道mysql的索引算法么?
31.用mysql过程中,有遇到什么问题么?
32.如何保证数据库主从一致性?
33.你们数据库的高可用架构是怎么样的?
34.关系与非关系型数据库
关系型数据库的优点: 1 支持事务处理,事务特性:原子性、一致性、隔离性、持久性。 2 数据结构清晰,便于理解,可读性高。 3 使用方便,有标准的sql语法。
关系型数据库的缺点: 1 读写性能相对较差,为保证事务的一致性,需要一定的开销。在高并发下表现的尤为突出。 2 表结构固定,不易于表后期的扩展,所以前期对表的设计要求较高。
非关系型数据库的优点: 1 读写性能高,没有保障数据的一致性。 2 表结构灵活,表结构并不是固定的,通过key-value存储数据,value又可以存储其他格式的数据。
两者的优缺点其实是相反的,一件事物不会凭空出现,都是在原有的基础上做了补充和优化,两者的侧重点各有不同。就像MySQL保障了数据的一致性,却影响了读写的性能。MongoDB放弃数据的强一致性,保障了读写的效率。在合适的场景使用合适的数据库,是需要我们考虑的。 1 对于需要高度事务特性的系统,比如和钱有关的,银行系统,金融系统。我们要考虑使用关系型数据库,确保数据的一致性和持久性。 2 对于那些数据并不是很重要,访问量又很大的系统,比如电商平台的商品信息。我们可以使用非关系型数据库来做缓存,充分提高了系统查询的性能
缓存
String:缓存、计数器、分布式锁等。
List:链表、队列、微博关注人时间轴列表等。
Hash:用户信息、Hash 表等。
Set:去重、赞、踩、共同好友等。
Zset:访问量排行榜、点击量排行榜等
线程是充分利用CPU,redis基于内存,避免线程上下文调度
Redis高并发快的原因?一文揭秘单线程的Redis为什么这么快? 纯内存操作 单线程 高效的数据结构 合理的数据编码 其他方面的优化
前端 1.JSON是什么?特点? json是一种跨平台的数据交互格式,格式简单轻量,无需象xml文件那样解析,因为它本身就是结果
JSONP实现跨域的原理?[深圳市海魅蓝科技] 伪函数欺骗浏览器 2.xml是什么?说说关于xml解析的4种方式 ?各有什么特点? xml : 超文本标记语言,用来存放程序配置信息。 解析xml方式 : 1.dom4j 2.sax 3.w3c 4.ext 3.XML和JSON的区别 相同点 : 都是数据交互格式,都易读。 不同点 : json 没有结束标签 相同数据量下json占用字符长度更短 json解析更快 json可以使用数组以及对象 4.你在公司是怎么用jquery的? 答:在项目中是怎么用的是看看你有没有项目经验(根据自己的实际情况来回答) 你用过的选择器啊,复选框啊,表单啊,ajax啊,事件等配置Jquery环境 下载jquery类库在页面引用jquery类库即可 script type="text/javascript" src="jquery/jquery-1.7.2.min.js"/> 接下来通过在<script>$(function(){代码});</script> 5.你为什么要使用jquery(jquery好处)? 1.因为jQuery是轻量级的框架,大小不到30kb,它有强大的选择器, 2.出色的DOM操作的封装,有可靠的事件处理机制(jQuery在处理事件绑定的时候相当的可靠), 3.完善的ajax(它的ajax封装的非常的好,不需要考虑复杂浏览器的兼容性和XMLHttpRequest对象的创建和使用的问题。) 出色的浏览器的兼容性。 4.而且支持链式操作,隐式迭代。 5.行为层和结构层的分离,还支持丰富的插件,jquery的文档也非常的丰富。
[模拟面试 +2]
dom封装 跨平台 轻量级
6.你使用jquery遇到过哪些问题,你是怎么解决的? 例 前台拿不到值,JSON 可是出现的错误(多了一个空格等)这编译是不会报错的jquery库与其他库冲突: 1>如果其他库在jquery库之前导入的话 1.我们可以通过jquery.noconflict()将变量的$的控制权过度给其他库 2.自定义快捷键,用一个变量接住jquery.noconflict() 3.通过函数传参 2>如果jquery库在其他库之前导入就直接使用jquery 今天在处理一个数据问题时,发现jQuery.ajax()方法返回的值一直有问题,清除缓存后数据无误, 多次测试后发现返回的值都是之前的值,并且一直未执行url(后台为JAVA,设置断点一直未进入)。在网上查找下,发现是未设置type的原因。 如果没设置jQuery.ajax的type="Post",那么ajax就会默认type="Get",这就会导致之前数据被缓存起来。加上type="Post",问题解决!
7.jquery中的选择器?[文思海辉电话面试] jQuery中的选择器大致分为:基本选择器,层次选择器,过滤选择器,表单选择器
8.jquery中的选择器 和 css中的选择器有区别吗? 1.jQuery选择器支持CSS里的选择器, 2.jQuery选择器可用来添加样式和添加相应的行为 3.CSS 中的选择器是只能添加相应的样式 9.你觉得jquery中的选择器有什么优势? 简单的写法 $('ID') 来代替 document.getElementById()函数 支持CSS1 到CSS3 选择器 完善的处理机制(就算写错了id也不会报错)
10.你在使用选择器的时候有有没有什么觉得要注意的地方? 1.选择器中含有".","#","[" 等特殊字符的时候需要进行转译 2.属性选择器的引号问题 3.选择器中含有空格的注意事项
11.jquery对象和dom对象是怎样转换的? 1.Jquery转DOM对象:jQuery 对象是一个数组对象,可以通过[index]的丰富得到相应的DOM对象还可以通过get[index]去得到相应的DOM对象。 2.DOM对象转jQuery对象:$(DOM对象)
12.你是如何使用jquery中的ajax的? 如果是一些常规的ajax程序的话,使用load(),$.get(),$.post(),就可以搞定了, 一般我会使用的是$.post() 方法。 如果需要设定beforeSend(提交前回调函数),error(失败后处理),success(成功后处理)及complete(请求完成后处理)回调函数等,这个时候我会使用$.ajax()
13.你觉得jquery中的ajax好用吗,为什么? 好用的。 因为jQuery提供了一些日常开发中夙瑶的快捷操作,例 load,ajax,get,post等等, 所以使用jQuery开发ajax将变得极其简单,我们就可以集中精力在业务和用户的体验上,不需要去理会那些繁琐的XMLHttpRequest对象了。
14.jquery中$.get()提交和$.post()提交有区别吗? a.$.get() 方法使用GET方法来进行异步请求的。 $.post() 方法使用POST方法来进行异步请求的。 b.get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体 内容发送给Web服务器的,这种传递是对用户不可见的。 c.get方式传输的数据大小不能超过2KB 而POST要大的多 d.GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。
15.jquery中的load方法一般怎么用的? load方法一般在 载入远程HTML 代码并插入到DOM中的时候用 通常用来从Web服务器上获取静态的数据文件。 如果要传递参数的话,可以使用$.get() 或 $.post()
16.在jquery中你是如何去操作样式的? addClass() 来追加样式 removeClass() 来删除样式 toggle() 来切换样式
17.简单的讲叙一下jquery是怎么处理事件的,你用过哪些事件? 首先去装载文档,在页面加载完毕后,浏览器会通过javascript 为DOM元素添加事件。
18.你使用过jquery中的动画吗,是怎样用的? 使用过。 hide() 和 show() 同时修改多个样式属性。像高度,宽度,不透明度。 fadeIn() 和fadeOut() fadeTo() 只改变不透明度 slideUp() 和 slideDown() slideToggle() 只改变高度 animate() 属于自定义动画的方法.
19.你使用过jquery中的插件吗? 分页插件(jQuery Pagination),验证插件(jQuery formValidator表单验证插件)
20.你一般用什么去提交数据,为什么? 一般我会使用的是$.post() 方法。 如果需要设定beforeSend(提交前回调函数),error(失败后处理),success(成功后处理)及complete(请求完成后处理)回调函数等,这个时候我会使用$.ajax()
21.在jquery中引入css有几种方式? 行内式,内嵌式,导入式,链接式
22.你在jquery中使用过哪些插入节点的方法,它们的区别是什么? a.append(),appendTo(),prepend(),prependTo(),after(),insertAfter(),before(),insertBefore() b.大致可以分为 内部追加和外部追加 append() 表式向每个元素内部追加内容。 appendTo() 表示 讲所有的元素追加到指定的元素中。 例$(A)appendTo(B) 是将A追加到B中
23.你使用过包裹节点的方法吗,包裹节点有方法有什么好处? wrapAll(),wrap(), wrapInner() 需要在文档中插入额外的结构化标记的时候可以使用这些包裹的方法 应为它不会帛画原始文档的语义
24.query中如何来获取或和设置属性? jQuery中可以用attr()方法来获取和设置元素属性 removeAttr() 方法来删除元素属性
25.如何来设置和获取HTML 和文本的值? html()方法 类似于innerHTML属性 可以用来读取或者设置某个元素中的HTML内容 注意:html() 可以用于xhtml文档 不能用于xml文档 text() 类似于innerText属性 可以用来读取或设置某个元素中文本内容。 val() 可以用来设置和获取元素的值
26.你jquery中有哪些方法可以遍历节点? children() 取得匹配元素的子元素集合,只考虑子元素不考虑后代元素 next() 取得匹配元素后面紧邻的同辈元素 prev() 取得匹配元素前面紧邻的同辈元素 siblings() 取得匹配元素前后的所有同辈元素 closest() 取得最近的匹配元素 find() 取得匹配元素中的元素集合 包括子代和后代
27.子元素选择器 和后代选择器元素有什么区别? 子代元素是找子节点下的所有元素,后代元素是找子节点或子节点的子节点中的元素
28.在jquery中可以替换节点吗? 可以 在jQuery中有两者替换节点的方式,replaceWith() 和 replaceAll()
29.你觉得beforeSend方法有什么用? 发送请求前可以修改XMLHttpRequest对象的函数,在beforeSend中 如果返回false 可以取消本次的Ajax请求。XMLHttpRequest对象是唯一的参数 所以在这个方法里可以做验证
30.siblings() 方法 和 $('prevdiv')选择器是一样的嘛?
$('prevdiv') 只能选择'#prev'元素后面的同辈
31.你在ajax中使用过JSON吗,你是如何用的? 使用过,在$.getJSON() 方法的时候就是。因为 $.getJSON() 就是用于加载JSON文件的
32.有哪些查询节点的选择器? first 查询第一个,:last 查询最后一个,:odd查询奇数但是索引从0开始
jquery的属性?[秀驿国际2017]
jquery的html val text attr prop的作用?[秀驿国际2017]
prop:元素的属性值
jqueryscript所对应的属性值
innerhtml
js显示和隐藏?[软通动力2017]
toggle hide() show() css属性 display none隐藏 block显示inline $("p").toggle( function(){ $("p").hide(); }, function(){ $("p").show(); } );
正则表达式[上海科江电子]
ajax的原理?[诚泰财产]
ajax的dwr的区别?[汇付科技 上海友驻]
load和ready页面加载的区别?[汇付科技]
json格式?[上海友驻]
EasyUI的组件?[重点][平安科技 中国电信理想 上海弘昊化工]
******Servlet ☆1.转发与重定向区别: 转发: 重定向: 服务器端跳转; 客户端跳转; 地址栏不改变, 地址栏会改变, 能传递请求, 是新的请求, 不能跳转到其他web工程 能跳转到任意web站点 会发生重复提交的问题 可以避免重复提交
2.session和cookie的区别 session cookie 存储位置:服务器 客户端(1、浏览器缓存,2、客户端硬盘) 存储内容:任何类型(无限制) 文本(4k) 两种方式实现(cookie或url重写) 两种类型(内存和硬盘) 时间 默认时间30分钟 setMaxAge(秒)
设置cookid过期:通过document.cookie 获取本网页cookie,获取的cookie是字符串,将其分割取出expire字段,将其时间改成空,或者改成比当前系统时间小的值。
4.Servlet: 1)Servlet是sun公司基于java技术的一种开发动态资源的规范,以接口的形式出现,最终的实现类和服务器有关.运行在服务器端,由web容器管理。 2)Servlet是一个特殊的java类,编写一个serlet实际上就是按照servlet规范编写一个java类,可以接受客户端请求并响应,遵循http协议.
Servlet开发: 1)实现servlet接口+web.xml配置文件 2)继承GenericServlet类+web.xml配置文件 3)继承HttpServlet类+web.xml配置文件
☆5.jsp工作原理? 客户端->.jsp->_jsp.java->*_jsp.class->执行->客户端 第二次访问:执行class->客户端
6.servlet生命周期? 实例化->初始化(init)->服务(service)->doGet|doPost->销毁(destroy)
a.第一次浏览器访问servlet时,服务器会根据浏览器的路径,在web.xml文件中查找到该servlet的全路径和名称.并反射产生对象 b.调用Init()为servlet做初始化工作(每个servlet只会调用一次init方法) c.调用doGet或者doPost方法为浏览器响应(通过service方法分配) d.如果地二次再访问该相同的servlet,直接从服务端servle实例集合中取得对应的对象。 e.同一个servlet实例,在服务器端只有一个 f.在服务器重新部署时,在销毁servlet实例前调用destroy方法.
7.cs/bs和区别? 客户端要求 软件升级和维护 安全性 cs:Client/Server 客户/服务器 无需客户端 零维护和扩展方便 趋势 面向相对固定的用户群,安全性高 bs:Brower/Server 浏览器/服务器 需客户端 界面丰富,维护成本高 安全性低
8.JSP7大内置对象? 输出:out response 作用域:pageContext request session application 其他:config page(this) exception
9.GET和POST的区别? 1.安全性:get安全性非常低,post安全性较高。但是执行效率却比Post方法好 2. get是从服务器上获取数据,post是向服务器传送数据。 3.get是把参数数据队列附加到url,post将表单数据防止在html
10.什么情况下调用doGet()和doPost()? Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。
11.5种jsp标准动作 JSP页面可使用JSP标准动作来调用JavaBean的方法,JSP标准动作在浏览器请求JSP页面时执行 <jsp:useBean /> <jsp:setProperty /> <jsp:getProperty /> <jsp:forward /> <jsp:include /> 12.Servlet 跟 JSP 的区别? Servlet专注于后台业务代码,而Jsp一般都是前台显示 jsp是一个特殊的servlet,由web容器进行翻译和编译
13.在Servlet中,如果客户端禁用cookie,如何使用Session,说说你的解决方案. ①session.setMaxInactiveInterval(0或者-1); ②web.xml配置文件(单位为分钟) 5 ③在tomcat服务器中设置conf->web.xml 30
14.web容器对servlet的处理有什么特点? 两者是如何交互数据的?
15.如何销毁session,请用三种方式实现? a.session.invalidate() b.设置session过期时间.session.setMaxInactiveInterval(0或者-1) c.web.xml配置文件(单位为分钟) 5 d.在tomcat服务器中设置conf->web.xml 30 16.简述逻辑操作(&,|,^)与条件操作(&&,||)的区别 a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型 b.逻辑操作不会产生短路
17.什么是JSTL? JSTL有哪些标签库? Jstl是自定义标签库,在JSTL标签中有: core核心库 fmt格式化库 functions函数库 xml超文本标记语言库 sql结构化查询语言库
18.你常用的J2EE设计模式,谈谈对设计模式的看法 面向对象设计模式解决的是“类与相互通信的对象之间的组织关系” 面向对象设计模式是“好的面向对象设计”,所谓好的就是那些可以满足“应对变化,提高复用的设计”。
缓存框架***************************** 1.OSCache 一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何 java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存, 甚至能让应用重启。支持集群集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时) 2.JSC(Java Caching system) 是一个用分布式的缓存系统,是基于服务器的java应用程序。它是通过提供管理各种动态缓存数据来加速动态web应用。 JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。动 态内容和报表系 统能够获得更好的性能。如果一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),被重复搜索出相同结果的,就能够通过执行缓存方式改 其性能和伸缩性
3.EHCache EHCache 是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的 文档和测试 4.JCache JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上 5.ShiftOne ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架 6.SwarmCache SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。 SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。 SwarmCache使用JavaGroups来管理从属关系和分布式缓存的通讯意思是面向方面编程 7.WhirlyCache Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过缓存对象来加快网站或应用程序的速度,否则就必须通过查询数据库或其他代价较高的处理程序来建立。
服务器 Tomcat相关面试题,看这篇就够了!保证能让面试官颤抖
1.Tomcat的优化经验 去掉对web.xml的监视,把jsp提前编辑成Servlet。 有富余物理内存的情况,加大tomcat使用的jvm的内存
2.Tomcat、Weblogic的区别 Tomcat是一个免费开源的web应用服务器,是Apache软件基金会的Jakarta Sun和其他一些公司及个人共同开发而成 WebLogic是美国Bean公司出品的一个application server,确切的说是一个基于jvaee架构的中间件,纯java开发 相同点: WeLogic和Tomcat都是基于java的基础架构来满足实时处理需求,都基于servlet来实现 不同点: 功能性 WebLogic更加强大.webLogic是javaee的应用服务器,包括ejb,hsp,servlet,jms等等,是一个综合的开发及运行环境 Tomcat是Web Container,官方执行的JSP&Servlett容器,不支持EJB 扩展性 WebLogic拥有处理关键Web应用系统问题所需的性能 可扩展性和高可用性 Tomcat扩展性差 费用 Tomcat开源免费 WebLogic不开源不免费
3.weblogic中的密码丢失
4.应用服务器有那些? BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
5.EJB的几种类型 会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean 会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种 实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种
6.如何给weblogic指定大小的内存? 在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M
weblogic配置数据源?
服务器*********************************** HTTP http怎么保证数据的安全性,https慢如何解决?https请求的一个完整流程?[深圳市鼎游天下2017] HTTP状态码,301和302?
Nginx 负载均衡是是什么,怎么实现 将请求分摊到多个操作单元上进行执行
负载均衡和反向代理的区别? 负载均衡: 负载均衡设备将请求根据负载均衡算法,将流量均衡的分配给后台服务器以平衡各个服务器的负载压力 反向代理: 外网用户通过代理设备访问内网,因此称之为反向代理
①简介: nginx是一个高性能的HTTP服务器和反向代理服务器,支持多种操作系统,可实现负载均衡 ②配置:
server{
listen 80;#监听的端口
server_name manage.taotao.com;#请求的域名
#设置请求头信息
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X_Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#地址,/--所有请求
location /{
#代理转发
proxy_pass http://127.0.1:8081;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
# 配置静态的资源
location{
root URL;
}
③Nginx负载均衡策略? 负载均衡算法:轮询法 随机法 源地址哈希法 加权轮询法 加权随机法 最小连接数 ④Nginx负载均衡的配置?
#设定负载均衡的服务器列表
#http节点添加:
#weigth参数表示权值,权值越高被分配到的几率越大
upstream taotao-manage{
server 192.168.68.43:8080 weight=1;
server 192.168.68.45:8080 weight=1;
}
#修改代理指向upstream
proxy_pass http://taotao-manage;
⑤nginx命令 cd usr/local/nginx/sbin
重启 ./nginx -s reload || nginx.exe -s reload 启动 ./nginx || start nginx.exe 停止 ./nginx -s reload || nginx.exe -s stop
⑥Nginx资源过滤 正则表达式
⑦Nginx和其他负载均衡框架对比过,如nginx和zuul? Nginx与Zuul的区别
相同点:Zuul和Nginx都可以实现负载均衡、反向代理(隐藏真实ip地址),过滤请求,实现网关的效果
不同点:Nginx--c语言开发 Zuul--java语言开发
Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡 Nginx负载均衡实现:采用服务器实现负载均衡
Nginx相比zuul功能会更加强大,因为Nginx整合一些脚本语言(Nginx+lua)
Nginx适合于服务器端负载均衡 Zuul适合微服务中实现网关
⑧Nginx常用的状态码?(UC) 200:服务器成功返回网页 403:服务器拒绝请求。 404:请求的网页不存在 499:客户端主动断开了连接。 500:服务器遇到错误,无法完成请求。 502:服务器作为网关或代理,从上游服务器收到无效响应。502 Bad Gateway 503 - 服务不可用。 504:服务器作为网关或代理,但是没有及时从上游服务器收到请求
HTTP状态码分类 100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 (自己电脑这边的问题) 500-599 用于支持服务器错误。 (对方的问题)
-
BIO、NIO和AIO的区别? BIO,NIO,AIO 总结
-
NIO的组成?
-
Netty的特点?
-
Netty的线程模型?[阿里巴巴]
-
TCP 粘包/拆包的原因及解决方法?[阿里巴巴]
-
了解哪几种序列化协议?
-
如何选择序列化协议?
-
Netty的零拷贝实现?[阿里巴巴]
-
Netty的高性能表现在哪些方面?
-
NIOEventLoopGroup源码?
-
Netty 的认识,为什么要用。说说业务中,Netty 的使用场景。[阿里巴巴]
-
Dubbo 在使用 Netty 作为网络通讯时候是如何避免粘包与半包问题?[阿里巴巴]
设计模式********************************* Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), Observer(观察者模式), State(状态模式), Strategy(策略模式), 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例, 通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。 然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例
能画出常用设计模式的UML图? 23种经典设计模式UML类图汇总
单例的理解,在哪里用到?[大全智能2017] 类只有一个实例存在,这个实例有一个全局唯一的访问点。 全局的 保证在Java应用程序中,一个类Class只有一个实例存在
手写单例类[中软2017]
private Singletion{
//懒汉模式
privarte Singletion(){}//构造函数私有
private static Singletion instance=new Singletion();
//静态方法
public static Singletion getInstance(){
return instance;
}
}
//饥汉模式
public class Singletion{
private static Singletion instance=null;
public static synchronized Singletion getInstance();
if(instance==null){
instance=new Singletion();
return instance;
}
}
手写观察者模式
UML************************************** 1.UML 标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图 2.工具 powerdesigner
3.uml和表的设计? 笔试题,用uml表示表的关系 A.关联:普通箭头的实心线,指向被拥有者 学生->课程
B.聚合:整合和部分关系。带空心菱形的实心线,菱形指向整体 引擎<> 汽车 汽车<>
C. 版本控制工具******************************* svn:版本控制工具+服务器 分支 svn冲突解决的办法?[中国电信理想] 编辑冲突 git: 原理? 常用命令? git和svn的区别?[深圳阿尔法2017] A.GIT是分布式的,SVN不是 B.GIT把内容按元数据方式存储,而SVN是按文件 C.GIT分支和SVN的分支不同 D.GIT没有一个全局的版本号,而SVN有 E.GIT的内容完整性要优于SVN git、gitlab、github? 自动化构建,gitlab+jenkins 版本分支管理? dev、rel、master
jar管理工具***************************************
什么是Maven?[中国电信理想公司]
基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
maven先从本地仓库找,然后到私服找,最后到中央仓库找
修改setting.xml指定本地路径<localRepository...>,默认本地仓库在用户目录->.m2->repository
maven的结构[中软国际2017] pom.xml: groupId:项目名称 artifactId:模块名称 version:版本 自动加入junit依赖
源代码位置:src/main/java 测试代码: src/test/java
如何使用Maven?[中国电信理想公司 中软国际2017] maven命令: mvn -clean 清理操作,默认清理target文件夹 mvn -clean compile 清理之后运行编译 mvn -clean test 运行清理和测试 mvn -clean install 运行清理和安装,以便其他项目调用 mvn -clean package 运行清理和打包 mvn -clean deploy 运行清理和发布 mvn archetype:generate 构建骨架,Eclipse创建工程直接构建骨架 mvn package -Dmaven.test.skip=ture 打包时跳过测试
RPC框架*****************************
有没有自己写过rpc框架
你用过哪些RPC框架,讲讲他们优缺点
①webService总结的作用? Web service是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以交互操作。 Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序, 用于开发分布式的互操作的应用程序
②核心定义: 1.SOAP一个基于XML的可扩展消息信封格式,需同时绑定一个传输用协议。 2.WSDL一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。 3.UDDI一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。
①理解: 分布式服务框架,资源调度和治理中心的管理工具,实现线程之间通信,可以统计系统之间的调用关系和调用次数。
②架构:[重点] 服务的提供者(例如查询商品的服务) 服务的消费者, 注册中心(使用zookeeper实现,相当于房产中介) 监控中心 启动时,服务的提供方,注册服务到注册中心,消费者(客户端)通过注册中心查找对应的服务,查询到后,调用服务。监控中心异步统计调用服务的次数和时间,根据次数作出下一步判断。 比传统的多个查询,有利于管理调用之间的关系。
③dubbbo软负载均衡算法有哪几种?[深圳市海魅蓝科技] Random LoadBalanc:随机,按权重设置随机概率 RoundRobin LoadBalance:轮循,按公约后的权重设置轮循比率 LeastActive LoadBalance:最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差 ConsistentHash LoadBalance:一致性Hash,相同参数的请求总是发到同一提供者
④dubbo的实现原理?注册中心挂了可以继续通信吗? 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者在启动时,向注册中心订阅自己所需的服务。 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。 dubbo 架构具的特点,连通性、健壮性、伸缩性、向未来架构的升级性。
可以继续通信,dubboo有健壮性(注册中心对等集群,任意一台宕掉后,将自动切换到另一台 注册中心全部宕掉后,服务提供者和服务消费者任能通过本地缓存通讯)
⑤dubbo支持哪些序列化协议?hessian协议的理解呢?说一下hessian的数据结构?pb知道吗?为什么pb效率是最高? 序列化协议:Dubbo协议 Hessian协议 HTTP协议 RMI协议 WebService协议 Thrift协议 Memcached协议 Redis协议 hessian协议的理解:Hessian协议和webservice常用的SOAP协议类似,也是将协议报文封装在HTTP封包中,通过HTTP信道进行传输的. 因此传输同样的对象Hessian协议传输的数据量比SOAP协议低一个数量级 hession的数据结构:b-tree b+tree PB:ProtocolBuff 是 google 提出的的一种数据交换格式,跨语言,跨平台,可扩展。基于这种特性广泛的用于网络数据通信
⑥为什么要进行系统拆分,拆分不用dubbo可以吗?dubbo和thift什么区别?
谈单体架构的缺点
可以不用dubbo,用其他rpc框架(hession),dubbo拆分成服务调用者和服务消费者
可扩展的跨语言的rpc框架,facebook,dubbo支持thift协议
⑦Dubbo超时重试;Dubbo超时时间设置[京东] 集群容错模式 1).Dubbo消费端,全局超时配置
<dubbo:consumer timeout="5000" />
指定接口以及特定方法超时配置
<dubbo:reference interface="com.foo.BarService" timeout="2000">
<dubbo:method name="sayHello" timeout="3000" />
</dubbo:reference>
2).Dubbo服务端,全局超时配置
<dubbo:provider timeout="5000" />
指定接口以及特定方法超时配置
<dubbo:provider interface="com.foo.BarService" timeout="2000">
<dubbo:method name="sayHello" timeout="3000" />
</dubbo:provider>
dubbo和springBoot集成方式?
dubbo-spring-boot
⑧dubbo 在 Zookeeper 存储了哪些信息?
Consumers、Providers、Routers、Configrators、权重
⑨zk节点类型有哪几种?[深圳市海魅蓝科技]
持久节点(PERSISTENT)
持久顺序节点(PERSISTENT_SEQUENTIAL)
临时节点(EPHEMERAL)
临时顺序节点(EPHEMERAL_SEQUENTIAL)
⑩zk原理?做什么?paxos算法是什么,原理和实现?
A、Zookeeper是一个分布式协调服务,是一个中间件。 B、能提供主从协调、服务器节点控制、统一配置管理、分布式共享锁、统一名称服务等功能,比较有名的是大数据以及dubbo中服务的注册以及发现。 C、本质上只是管理、读取用户提交的数据,并为数据提供监听服务
场景: A、命名服务(HDFS) B、数据发布与订阅(配置中心) C、分布式通知/协调 D、分布式锁
消息队列
①消息队列模式:
订阅式和点对点
1.1).点对点 生产端发送一条消息通过路由投递到Queue,只有一个消费者能消费到。 1.2).多订阅 RabbitMQ需要支持多订阅时,发布者发送的消息通过路由同时写到多个Queue,不同订阅组消费不同的Queue。所以支持多订阅时,消息会多个拷贝
②消息队列好处: 一网打尽消息队列在大型分布式系统中的实战精髓 异步处理 消息通讯 流量削峰 应用接口 日志处理
项目中使用场景:一人一档中,将档案,由A服务发送到B服务
③消息队列和http的区别?
消息队列:异步
http:同步
④MQ的对比?
kafka是一种高吞吐量,广泛应用大数据领域 rabbitMQ功能完善
中华石杉 面试官:如果让你设计一个消息中间件,如何将其网络通信性能优化10倍以上
⑥消息中间件如何实现每秒几十万的高并发写入?
页缓存技术 + 磁盘顺序写+零拷贝(拷贝描述符)
1、顺序写磁盘
顺序写磁盘的性能是随机写入的性能的6000倍的提升,媲美内存随机访问的性能,磁盘不再是瓶颈点。
2、Page Cache
为了优化读写性能,Kafka利用了操作系统本身的Page Cache,就是利用操作系统自身的内存而不是JVM空间内存。通过操作系统的Page Cache,Kafka的读写操作基本上是基于内存的,读写速度得到了极大的提升。
3、零拷贝技术
零拷贝技术,可以有效的减少上下文切换和拷贝次数
①rabbitmq的配置
#rabbitmq
rabbit.host=192.168.1.75
rabbit.username=rabbitmq
rabbit.password=123456
rabbit.port=5672
rabbit.exchange=mq-exchange
②spring整合rabbitmq
connection-factory(连接工厂)、admin(MQ的管理,包括队列和交换器等)、queue(队列)、binding queue(定义交换机 topic~exchange,手动绑队列)
1.定义连接工厂2. 定义队列 3.定义交换机并完成队列的绑定 4.定义模板5. 定义消费者的监听 6.MQ的管理,负责创建创建队列和交换机
@Autowired
private RabbitTemplate rabbitTemplate;
rabbitTemplate.convertAndSend(topic,message);
1).kafka重复消费? 原因:已经消费了数据,但是offset没提交 解决办法:维护offset(手动提交)、数据缓存+维护offset(记录已读取和已提交的偏移量) 2).kafka丢失数据 生产者、消费者、broker https://www.cnblogs.com/Alex-zqzy/p/9774706.html
-
Kafka的用途有哪些?使用场景如何? 总结下来就几个字:异步处理、日常系统解耦、削峰、提速、广播 如果再说具体一点例如:消息,网站活动追踪,监测指标,日志聚合,流处理,事件采集,提交日志等
-
Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么 ISR:In-Sync Replicas 副本同步队列 AR:Assigned Replicas 所有副本 ISR是由leader维护,follower从leader同步数据有一些延迟(包括延迟时间replica.lag.time.max.ms和延迟条数replica.lag.max.messages两个维度, 当前最新的版本0.10.x中只支持replica.lag.time.max.ms这个维度),任意一个超过阈值都会把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。
-
Kafka中的HW、LEO、LSO、LW等分别代表什么? HW:High Watermark 高水位,取一个partition对应的ISR中最小的LEO作为HW,consumer最多只能消费到HW所在的位置上一条信息。 LEO:LogEndOffset 当前日志文件中下一条待写信息的offset HW/LEO这两个都是指最后一条的下一条的位置而不是指最后一条的位置。 LSO:Last Stable Offset 对未完成的事务而言,LSO 的值等于事务中第一条消息的位置(firstUnstableOffset),对已完成的事务而言,它的值同 HW 相同 LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值
-
Kafka中是怎么体现消息顺序性的? kafka每个partition中的消息在写入时都是有序的,消费时,每个partition只能被每一个group中的一个消费者消费,保证了消费时也是有序的。 整个topic不保证有序。如果为了保证topic整个有序,那么将partition调整为1.
-
Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么? 拦截器->序列化器->分区器
-
Kafka生产者客户端的整体结构是什么样子的?
-
Kafka生产者客户端中使用了几个线程来处理?分别是什么? 2个,主线程和Sender线程。主线程负责创建消息,然后通过分区器、序列化器、拦截器作用之后缓存到累加器RecordAccumulator中。Sender线程负责将RecordAccumulator中消息发送到kafka中.
-
Kafka的旧版Scala的消费者客户端的设计有什么缺陷? 不正确
-
“消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?如果不正确,那么有没有什么hack的手段?
-
消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1? offset+1
-
有哪些情形会造成重复消费? 消费者消费后没有commit offset(程序崩溃/强行kill/消费耗时/自动提交偏移情况下unscrible)
-
哪些情景下会造成消息漏消费?(如何保证消息不丢失) 消费者没有处理完消息 提交offset(自动提交偏移 未处理情况下程序异常结束)
1、ACK 机制
通过 ACK 机制保证消息送达。Kafka 采用的是至少一次(At least once),消息不会丢,但是可能会重复传输。2、发送消息
为了得到更好的性能,Kafka 支持在生产者一侧进行本地buffer,也就是累积到一定的条数才发送,如果这里设置不当是会丢消息的。 生产者端设置 producer.type=async, sync,默认是 sync。 当设置为 async,会大幅提升性能,因为生产者会在本地缓冲消息,并适时批量发送。 如果对可靠性要求高,那么这里可以设置为 sync 同步发送。3、消费消息
如果更注重可靠性,则需要显示提交 Offset,也就是当所有业务都处理完成的时候,再提交 Offset。这样会导致重复消费,需要提供幂等性接口 -
KafkaConsumer是非线程安全的,那么怎么样实现多线程消费? 1.在每个线程中新建一个KafkaConsumer 2.单线程创建KafkaConsumer,多个处理线程处理消息(难点在于是否要考虑消息顺序性,offset的提交方式)
-
简述消费者与消费组之间的关系 消费者从属与消费组,消费偏移以消费组为单位。每个消费组可以独立消费主题的所有数据,同一消费组内消费者共同消费主题数据,每个分区只能被同一消费组内一个消费者消费。
-
当你使用kafka-topics.sh创建(删除)了一个topic之后,Kafka背后会执行什么逻辑? 创建:在zk上/brokers/topics/下节点 kafkabroker会监听节点变化创建主题 删除:调用脚本删除topic会在zk上将topic设置待删除标志,kafka后台有定时的线程会扫描所有需要删除的topic进行删除
-
topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么? 可以
-
topic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么? 不可以
-
创建topic时如何选择合适的分区数? 根据集群的机器数量和需要的吞吐量来决定适合的分区数
-
Kafka目前有那些内部topic,它们都有什么特征?各自的作用又是什么? __consumer_offsets 以下划线开头,保存消费组的偏移
-
优先副本是什么?它有什么特殊的作用? 优先副本 会是默认的leader副本 发生leader变化时重选举会优先选择优先副本作为leader
-
Kafka有哪几处地方有分区分配的概念?简述大致的过程及原理 创建主题时 如果不手动指定分配方式 有两种分配方式 消费组内分配
-
简述Kafka的日志目录结构 每个partition一个文件夹,包含四类文件.index .log .timeindex leader-epoch-checkpoint .index .log .timeindex 三个文件成对出现 前缀为上一个segment的最后一个消息的偏移 log文件中保存了所有的消息 index文件中保存了稀疏的相对偏移的索引 timeindex保存的则是时间索引 leader-epoch-checkpoint中保存了每一任leader开始写入消息时的offset 会定时更新 follower被选为leader时会根据这个确定哪些消息可用
-
Kafka中有那些索引文件? 1.通过文件名前缀数字x找到该绝对offset 对应消息所在文件 2.offset-x为在文件中的相对偏移 3.通过index文件中记录的索引找到最近的消息的位置 4.从最近位置开始逐条寻找
-
如果我指定了一个offset,Kafka怎么查找到对应的消息? 原理同上 但是时间的因为消息体中不带有时间戳 所以不精确
-
如果我指定了一个timestamp,Kafka怎么查找到对应的消息? kafka留存策略包括 删除和压缩两种 删除: 根据时间和大小两个方式进行删除 大小是整个partition日志文件的大小 超过的会从老到新依次删除 时间指日志文件中的最大时间戳而非文件的最后修改时间 压缩: 相同key的value只保存一个 压缩过的是clean 未压缩的dirty 压缩之后的偏移量不连续 未压缩时连续
-
聊一聊你对Kafka的Log Retention的理解
-
聊一聊你对Kafka的Log Compaction的理解
-
聊一聊你对Kafka底层存储的理解(页缓存、内核层、块层、设备层)
-
聊一聊Kafka的延时操作的原理
-
聊一聊Kafka控制器的作用
-
消费再均衡的原理是什么?(提示:消费者协调器和消费组协调器)
-
Kafka中的幂等是怎么实现的 PID 和 Sequence Number PID。每个新的Producer在初始化的时候会被分配一个唯一的PID,这个PID对用户是不可见的。 Sequence Numbler。(对于每个PID,该Producer发送数据的每个<Topic, Partition>都对应一个从0开始单调递增的Sequence Number
-
Kafka中的事务是怎么实现的(这题我去面试6家被问4次,照着答案念也要念十几分钟,面试官简直凑不要脸。实在记不住的话...只要简历上不写精通Kafka一般不会问到,我简历上写的是“熟悉Kafka,了解RabbitMQ....”)
-
Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?
-
失效副本是指什么?有那些应对措施? follower副本进程卡住,在一段时间内根本没有向leader副本发起同步请求,比如频繁的Full GC。 follower副本进程同步过慢,在一段时间内都无法追赶上leader副本,比如IO开销过大 Kafka解析之失效副本
-
多副本下,各个副本中的HW和LEO的演变过程
-
为什么Kafka不支持读写分离?
-
Kafka在可靠性方面做了哪些改进?(HW, LeaderEpoch)
-
Kafka中怎么实现死信队列和重试队列?
-
Kafka中的延迟队列怎么实现(这题被问的比事务那题还要多!!!听说你会Kafka,那你说说延迟队列怎么实现?)
-
Kafka中怎么做消息审计?
-
Kafka中怎么做消息轨迹?
-
Kafka中有那些配置参数比较有意思?聊一聊你的看法
-
Kafka中有那些命名比较有意思?聊一聊你的看法
-
Kafka有哪些指标需要着重关注? ProducerRequest Count :生产者请求总数量 ProducerRequest EventType:生产者请求事件类型 ProducerRequestRateAndTimeMs 50thPercentile :生产者请求速率耗时(50%) ProducerRequestRateAndTimeMs 75thPercentile :生产者请求速率耗时(75%) ProducerRequestRateAndTimeMs 95thPercentile :生产者请求速率耗时(95%) ProducerRequestRateAndTimeMs Max:生产者请求耗时最大值 ProducerRequestRateAndTimeMs Mean:生产者平均请求字节数 ProducerRequestRateAndTimeMs MeanRate:生产者平均请求速率 ProducerRequestRateAndTimeMs Min:生产者请求耗时最小值 ProducerRequestRateAndTimeMs StdDev:不理解 ProducerRequestRate FifteenMinuteRate :生产者15分钟内平均请求速率 ProducerRequestRate FiveMinuteRate:生产者5分钟内平均请求速率 ProducerRequestRate OneMinuteRate:生产者1分钟内平均请求速率
-
怎么计算Lag?(注意read_uncommitted和read_committed状态下的不同)
-
Kafka的那些设计让它有如此高的性能?
高吞吐: ①分区; ②网络传输上减少开销; ③顺序读写: ④零拷贝技术; ⑤优秀的文件存储机制;
-
Kafka有什么优缺点? 解耦 冗余 扩展性 灵活性 & 峰值处理能力 可恢复性 顺序保证 缓冲 异步通信
-
还用过什么同质类的其它产品,与Kafka相比有什么优缺点?
-
为什么选择Kafka? 为什么使用kafka
-
在使用Kafka的过程中遇到过什么困难?怎么解决的?
-
怎么样才能确保Kafka极大程度上的可靠性?
-
聊一聊你对Kafka生态的理解 confluent全家桶(connect/kafka stream/ksql/center/rest proxy等),开源监控管理工具kafka-manager,kmanager等
报表工具
1.什么是JFreeChart? JFreeChart 是一套免费开放源代码的报表框架,主要是 SourceForge.net 站点上的一个 JAVA 项目。
2.JFreeChart的作用? JFreeChart 功能强大、灵活易用的 Java 绘图 API,使用它可以生成多 种通用性的报表,包括柱状图、饼图、 曲线图、甘特图等,这些不同式样的图表基本上可以满足目前的要求。
poi、jxl
excel:
阿里easyexcel,避免OOM
模板***************************** FreeMarker:
是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,
它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等
常用指令[面试题] compress import include function, return global 全局变量 if, else, elseif
thymeleaf:
Linux***********************************
1.如何查看当前的Linux服务器的运行级别? ‘who -r’ 和 ‘runlevel’
2.如何查看Linux的默认网关? “route -n” 和 “netstat -nr”
3.如何在Linux上重建初始化内存盘镜像文件? # mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)
4.cpio命令是什么? cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表,还可以从中提取文件
5.patch命令是什么?如何使用? patch命令就是用来将修改(或补丁)写进文本文件里 # diff -Naur old_file new_file > diff_file
6.aspell有什么用 ?
aspell就是Linux操作系统上的一款交互式拼写检查器
7.查看域SPF记录:
linuxtechi@localhost:~$ dig -t TXT google.com
8.识别Linux系统中指定文件(/etc/fstab)的关联包
- cat /proc/net/bonding/bond0:查看bond0的状态
10./proc文件系统 作用:基于内存的文件系统,维护着关于当前正在运行的内核状态信息
- 在/usr目录下找出大小超过10MB的文件 find /usr -size +10M:
12.在/home目录下找出120天之前被修改过的文件 find /home -mtime +120:
13.在/var目录下找出90天之内未被访问过的文件 find /var ! -atime -90:
14.查找和直接删除文件"core" find / -name core -exec rm {} \
15.strings:提取和显示非文本文件中的文本字符串
16.tee 过滤器作用:向多个目标发送输出内容
17.更改登录提示符来显示用户名、本机名和当前工作目录:export PS1 = ”$LOGNAME@hostname:$PWD
18.ll | awk ‘{print $3,”owns”,$9}’:文件的文件名和它们的拥有者
19.at:安排一个程序在未来的做一次一次性执行
20.lspci:显示你的系统上PCI总线和附加设备的信息
- Linux 统计top10 IP访问日志 cat test.log|awk -F" " '{print $2}'|sort|uniq -c|sort -nrk 1 -t' '|awk -F" " '{print $2}'|head -10
rz、sz、cd、find、wget、chmod、netstat
scp
tomcat部署?
调优*****************************
工作中技术优化过哪些?JVM、MySQL、代码等都谈谈
架构
负载均衡架构:使用lvs+nginx实现负载均衡
高可用架构一:keepalived+nginx实现双主热备
高可用架构二:keepalived+nginx实现主备
设计一个对外服务的接口实现类,在 1,2,3这三个主机(对应不同IP)上实现 负载均衡和顺序轮询机制(考虑并发)[美团]
分布式session设置 [京东] tomcat广播、redis+session
执行某操作,前50次成功,第51次失败a 全部回滚b前50次提交第51次抛异常,ab场景分别如何设置Spring (传播特性)[京东]
分布式接口的幂等性设计「不能重复扣款」[京东]
如果让你来设计一个春晚抢红包架构,你会怎么设计?
架构
**分布式/微服务
分布式服务中如何保证数据的正确性? [深圳阿尔法2017] https://blog.csdn.net/g1607058603/article/details/81462162
微服务间数据一致性问题,是如何解决的?
项目中微服务是怎么划分的,划分粒度怎么确定?
在实践微服务架构中,有遇到什么问题么?
你们在微服务中用RPC通信还是REST?
RPC和HTTP的关系是什么?
谈谈什么是HTTP的长连接和短连接?
TCP的三次握手和四次挥手,以及为什么要三次握手,而不是二次?
TCP 有哪些状态,相应状态的含义
**********SpringCloud sentinel和hystrix的区别?限流的一些参数怎么设置,依据是什么?熔断降级有没有做过?[拼多多][京东]
| Sentinel | Hystrix | resilience4j | |
|---|---|---|---|
| 隔离策略 | 信号量隔离(并发线程数限流) | 线程池隔离/信号量隔离 | 信号量隔离 |
| 熔断降级策略 | 基于响应时间、异常比率、异常数 | 基于异常比率 | 基于异常比率、响应时间 |
| 实时统计实现 | 滑动窗口(LeapArray) | 滑动窗口(基于 RxJava) | Ring Bit Buffer |
| 动态规则配置 | 支持多种数据源 | 支持多种数据源 | 有限支持 |
| 扩展性 | 多个扩展点 | 插件的形式 | 接口的形式 |
| 基于注解的支持 | 支持 | 支持 | 支持 |
| 限流 | 基于 QPS,支持基于调用关系的限流 | 有限的支持 | Rate Limiter |
| 流量整形 | 支持预热模式、匀速器模式、预热排队模式 | 不支持 | 简单的 Rate Limiter 模式 |
| 系统自适应保护 | 支持 | 不支持 | 不支持 |
| 控制台 | 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 | 简单的监控查看 | 不提供控制台,可对接其它监控系统 |
设计一个高并发系统,从哪些方面考虑[拼多多]
分布式
1、分布式事务了解吗?
2、你们是如何解决分布式事务问题的?
- XA 方案
- TCC 方案
- 本地消息表
- 可靠消息最终一致性方案
- 最大努力通知方案
订单对事务要求严格,使用seata的TCC模式,其他的使用AT模式
Seata 会有 4 种分布式事务解决方案,分别是 AT 模式、TCC 模式、Saga 模式和 XA 模式
AT 模式是一种无侵入的分布式事务解决方案。在 AT 模式下,用户只需关注自己的“业务 SQL”,用户的 “业务 SQL” 作为一阶段,Seata 框架会自动生成事务的二阶段提交和回滚操作
在 Seata 中,分布式事务的执行流程
TM 开启分布式事务(TM 向 TC 注册全局事务记录);
按业务场景,编排数据库、服务等事务内资源(RM 向 TC 汇报资源准备状态 );
TM 结束分布式事务,事务一阶段结束(TM 通知 TC 提交/回滚分布式事务);
TC 汇总事务信息,决定分布式事务是提交还是回滚;
TC 通知所有 RM 提交/回滚 资源,事务二阶段结束
**容器 用过docker么,对容器了解多少 **容器
搜索 BAT等一线大厂 Elasticsearch面试题解读
搜索
项目 项目描述? 项目难点: 1).智慧楼宇,访客授权,到授权时间开始才能写入,授权结束删除,必须万无一失,否则会影响设备端 当时技术选型:RabbitMQ的延迟队列、job定时扫描、redis设置过期时间并监听 最终选择redis,原因mq网上资源少、不精通、已经选型kafka;job定时扫描,频繁查询数据库,性能差
解决办法: 1.因为监听redis,只能拿到key,无法拿到值,直接写数据库,加个授权状态,设备端根据授权状态拉取 2.先写入一次授权开始的redis,过期后,再写授权的结束的redis 避免缓存穿透,过期时间会打散 3.保证高可用,部署三台redis,每天凌晨跑一次job扫描昨天的数据,修改异常数据
redis热key: 20万用户同时访问一个热点缓存? redis cluster 感知,zookeeper指定的热点缓存对应的znode进行监听 自动加载为JVM本地缓存(ehcache),无需走缓存集群 限流熔断
redis缓存穿透
2).一人一档的个人事件流?
公交分局,日均采集量600万,磁盘6T(1年存储),gp(6个节点),CPU512G,GPU512G
支持接入多种方式数据源(kafka、API、DB),如何根据创建时间shuffle,数据倾斜大
Spark如何进行清洗?
①海量数据如何存储?
选型:
es+hbase
mysql+mycat分表
greenplum号称海量数据处理利器,简称GBDB 特性:
- 支持海量数据存储和处理
- 支持分布式事务
- 分布式数据库,良好扩展能力,国内外有上百个物理节点集群
- 企业级数据库,基于PostgreSQL 8.2
② 随着数据量增长,查询越来越慢?
-
默认展示每天的20张图片,点击查看更多,每次展示20张
-
使用冷热分离架构,前20张放到mysql,加索引;点击查看更多,才查询greenplum
3). 商品 商品快照 所有涉及到商品域属性变更都会生成快照,造成数据量暴增 详情页的设计,怎么做的缓存设计?(比如从不同的业务纬度拆分key,更新频率拆分key)
订单 下单要建几张表? 订单主表,订单条目表(有的场景下,订单条目会创建很多条) 针对创建的订单条目太多的问题,如何优化
4). 权限控制如何实现? 用户表 角色表 权限表 数据权限和功能权限 权限框架Apache Shiro 权限读取 权限校验 功能权限 url用filter拦截,按钮和菜单用Shiro标签控制 数据权限,返回可视范围对数据列表进行过滤 资源设计( party管理的资源a.新增子节点b.删除节点及其子节点c.修改节点d.移动节点 权限分配的资源a.分配资源权限b.分配可视范围c.分配用户party关联的资源a.新增关联b.修改关联c.删除关联 用户管理的资源a.新增用户 b.修改用户c.删除用户d.修改用户e.查询用户 资源管理的资源a.新增资源b.修改资源 c.删除资源d.移动资源 表单管理的资源a.新增表单b.修改表单c.删除表单)
单点登录如何实现? 用户输入用户名和密码登录,请求发送到单点登录系统,通过Service校验,校验不通过返回, 校验通过将用户信息保存到Redis,key为token,value为用户信息,token写入到cookie中,下次根据key去redis查询用户信息
单点登录redis保存用户信息的多长时间,cookie保存的时间?
怎么生成token?(南方航空) 利用jwt生成,包含exprie过期时间,userId用户id,使用base64编码的加密秘钥对
api接口安全如何保证,签名的实现流程? 需使用https协议,https是在http超文本传输协议加入SSL层,它在网络间通信是加密的,所以需要加密证书ca证书,一般需要交费 实现流程:
- api请求客户端想服务器端一次发送用用户认证信息(用户名和密码),服务器端请求到改请求后,验证用户信息是否正确。 如果正确:则返回一个唯一不重复的字符串(一般为UUID),然后在Redis(任意缓存服务器)中维护Token----Uid的用户信息关系,以便其他api对token的校验。 如果错误:则返回错误码。 2.服务器设计一个url请求拦截规则 (1)判断是否包含timestamp,token,sign参数,如果不含有返回错误码。 (2)判断服务器接到请求的时间和参数中的时间戳是否相差很长一段时间(时间自定义如半个小时),如果超过则说明该 url已经过期(如果url被盗,他改变了时间戳,但是会导致sign签名不相等)。 (3)判断token是否有效,根据请求过来的token,查询redis缓存中的uid,如果获取不到这说明该token已过期。 (4)根据用户请求的url参数,服务器端按照同样的规则生成sign签名,对比签名看是否相等,相等则放行。(自然url签名 也无法100%保证其安全,也可以通过公钥AES对数据和url加密,但这样如果无法确保公钥丢失,所以签名只是很大程 度上保证安全)。 (5)此url拦截只需对获取身份认证的url放行(如登陆url),剩余所有的url都需拦截。 3.Token和Uid关系维护 对于用户登录我们需要创建token--uid的关系,用户退出时需要需删除token--uid的关系。
希望写技术博客、参与优秀开源项目,重点研究一门技术,使其成为自己的优势。
项目
java基础重要(集合 多线程 ) 数据库(SQL语句 存储过程 分页 事务 数据库优化) 框架(各个框架的原理和执行流程 ssh整合 框架的区别<hibernate和Mybatis>)
--
做能敲碎键盘的程序猿
用战略的眼光观察APP市场
用最快的速度读懂需求,跟项目死磕到底
每天用比机械还快的手指敲击键盘
KO所有跟技术有关的难题
比测试火箭还要谨慎的测试我们的产品
除了热爱键盘,也热爱生活

