Java面试题。格式不好

Spring是什么
Spring是一个开源的业务层框架,分模块,一站式框架,它能够整合各种其他主流框架.
他的核心实现技术为ioc和aop
IoC(控制反转)
将组件对象的控制权从代码本身转移到外部容器
AOP(面向切面编程)
针对业务处理过程中的公共功能进行切面式提取
将公共功能 和核心功能分离开来

Spring mvc 是什么
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架

mvc的工作原理
首先用户发送请求被中央处理器捕获,中央处理器对URL进行解析得到请求资源标识符,
根据请求资源标识符调用映射处理器,将请求发送给指定的控制器,控制器执行完成后,
将返回的数据信息封装到模型和视图对象中,最后通过视图分解器选择一个合适的view返回界面

什么是Mybatis?
Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,
Mybaits的优点:
基于SQL语句编程,相当灵活,
与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,
很好的与各种数据库兼容
能够与Spring很好的集成
MyBatis框架的缺点:
对SQL语句依赖程度很高,不能随意更换数据库
SQL语句的编写工作量较大,尤其是字段多、关联表多时

缓存
1级 是在SqlSession层面进行缓存的
2级 二级缓存有可能出现并发问题 线程不安全
默认一级

什么是SpringBoot
Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目。
SpringBoot核心功能:
独立运行Spring项目,内嵌servlet容器,简化Maven配置,自动装配Spring,无代码生产和xml配置
SpringBoot优点:
快速构建项目。
对主流开发框架的无配置集成。
项目可独立运行,无须外部依赖Servlet容器。
极大的提高了开发、部署效率。

java反射概述
反射就是根据字节码文件, 获得类的信息,字段信息,方法信息等内容, 创建实例,调用方法的技术

AJAX的生命周期

  1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象
  2. 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
  3. 设置响应HTTP请求状态变化的函数
  4. 发送HTTP请求
  5. 获取异步调用返回的数据
  6. 使用JavaScript和DOM实现局部刷新

开发模式

什么是单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式也分两种饿汉式和懒汉式,
饿汉式优点:支持线程安全不需要加锁,执行效率快。
缺点:类加载时就初始化,浪费内存。
懒汉式优点:有第一次调用才初始化,避免内存浪费。
缺点是:本身不支持线程安全可以加锁达到线程安全但是会影响执行效率
单例模式的优点:在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
缺点的话,没有接口,不能继承,与单一职责原则冲突,
什么是单一职责原则
一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

什么是工厂模式,工厂模式的作用,为什么要使用工厂模式?

什么是工厂模式
工厂模式是 Java 中最常用的设计模式之一。
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

工厂模式的作用,为什么要使用工厂模式
首先,工厂模式是为了解耦:把对象的创建和使用的过程分开。
其次,工厂模式可以降低代码重复
另外,因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。

JAVA基础

String,StringBuffer与StringBuilder的区别
首先从运行效率排序为:String Bilder -> String Buffer -> String
其次少量的数据用 String,多线程下操作大量数据用StringBuffer,单线程下操作大量数据用String Bilder

final、finally与finalize的区别
在java中,final可以用来修饰类,方法和变量
用final修饰类的时,表明该类不能被其他类所继承。
用final修饰方法时,方法锁定以防止继承类对其进行更改。
用final修饰成员变量时表示为常量,只能被赋值一次,赋值后其值不再改变。
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,这个语法块不管是否异常都会执行。
finalize是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。
这个方法在gc启动,该对象被回收的时候被调用。

hashCode()和equals()方法的重要性体现在什么地方?
Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

集合框架:
Java集合类框架的基本接口有哪些?
Java集合类里面最基本的接口有:
Collection:代表一组对象,每一个对象都是它的子元素。
Set:不包含重复元素的Collection。
List:有顺序的collection,并且可以包含重复元素。
Map:可以把键(key)映射到值(value)的对象,键不能重复。

什么是迭代器(Iterator)?
迭代器接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。
迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object Obj)删除,可以通过迭代器的remove()方法删除。

数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

List,Set,Map三者的区别?
List:有序的,可以包含重复元素
Set:无序的,不可以包含重复元素。
Map:可以把键(key)映射到值(value)的对象,键不能重复;

HashMap、Hashtable、ConcurrentHashMap的区别
HashMap不是线程安全的,但是执行效率快,允许null作为key;
Hashtable是线程安全的,能绝对保证数据的一致性,但是性能存在问题,并发线程越多,性能越差,不允许null作为key
ConcurrentHashMap也是线程安全的,使用分离锁和volatile等方法,极大地提高了读写性能.

ArrayList、LinkedList、Vector的区别
Arraylist和Vector是采用动态数组的数据结构,LinkedList基于链表的数据结构
对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。
对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。
Vector使用了synchronized方法使线程安全,性能上比ArrayList差一点

简单说说reids

Redis支持的数据类型?
redis支持的数据类型一共有五种,分别是String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)

什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供了两种持久化方式:RDB(默认) 和AOF

RDB和AOF的比较
aof文件比rdb更新频率高
aof比rdb更安全也更大
rdb性能比aof好
如果两个都配了优先加载AOF

简单说说哨兵模式
哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下:
集群监控,负责监控redis master(主人)和slave(仆人)进程是否正常工作
消息通知,如果某个redis实例故障,哨兵负责发送消息通知给管理员
故障转移,如果master node 挂掉了,会自动转移slave node
配置中心,如果故障转移发生了,通知client客户端新的master地址

WebSocket
为什么你们项目组中使用WebSocket技术
当我们在处理页面数据自动更新的时候,在使用js不断的请求服务器,查看是否有新数据,如果有就获取到新数据,进行对页面信息的跟新,但是当页面长时间没有更新数据时,这样就会存在资源浪费的情况,所以才会使用WebSocket来解决。

UDP和TCP协议的概念
TCP是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

什么是WebSocket?
WebSocket是HTML5一种新的协议,WebSocket是真正实现了全双工通信的服务器向客户端推的互联网技术,是一种在单个TCP连接上进行全双工通讯协议。

WebSocket和Socket的区别是什么?
Socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。而WebSocket则不同,它是一个完整的应用层协议,包含一套标准的API。

Http与WebSocket的区别?
http协议是短链接,因为请求之后,都会关闭连接,下次重新请求数据,需要再次打开连接。WebSocket协议是一种长连接,只需要通过一次请求来初始化链接,然后所有的请求和响应都是通过这个TCP链接进行通信。

多线程
多线程有什么用?
发挥多核CPU的优势,防止阻塞,便于建模

创建线程的方式
继承Thread类,实现Runnable接口
至于哪个好,不用说肯定是后者好,因为实现接口的方式比继承类的方式更灵活,也能减少程序之间的耦合度,面向接口编程也是设计模式6大原则的核心。

start()方法和run()方法的区别
只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码。

什么是线程安全
如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。

sleep方法和wait方法有什么区别
sleep方法和wait方法都可以用来放弃CPU一定的时间,不同点在于如果线程持有某个对象的监视器,sleep方法不会放弃这个对象的监视器,wait方法会放弃这个对象的监视器

为什么要使用线程池
避免频繁地创建和销毁线程,达到线程对象的重用。

公司真题

数据库的索引有哪些
普通索引(它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找)
唯一索引(在创建唯一索引时要不能给具有相同的索引值)
聚集索引(我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引)
主键索引(在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的)
全文索引(它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询)

使用索引的优缺点?
优点:
提高数据的搜索速度,加快表与表之间的连接速度
在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。
缺点:
在我们建立数据库的时候,需要花费的时间去建立和维护索引,而且随着数据量的增加,需要维护它的时间也会增加。
在创建索引的时候会占用存储空间。
在我们需要修改表中的数据时,索引还需要进行动态的维护,所以对数据库的维护带来了一定的麻烦。

说说对视图的理解
数据库视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。
因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。

数据库视图的优点:
数据库视图允许简化复杂查询
数据库视图有助于限制对特定用户的数据访问
数据库视图提供额外的安全层
数据库视图启用计算列
数据库视图实现向后兼容
数据库视图的缺点
性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图。

说一下mysql的行锁和表锁
表锁特点:
偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行锁特点:
偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

Mysql问题排查的手段有哪些
使用 show processlist 命令查看当前所有连接信息。
使用 explain 命令查询 SQL 语句执行计划。
开启慢查询日志,查看慢查询的 SQL。

如何做到mysql性能优化
为搜索字段创建索引。
避免使用 select *,列出需要查询的字段。
垂直分割分表。
选择正确的存储引擎。

什么是线程连接池,创建线程连接池的方式(没找到)

Jdk8的新特性
Lambda表达式和函数式接口
接口的默认方法和静态方法
方法引用
重复注解
更好的类型推断
拓宽注解的应用场景

常见的设计模式,简单工厂和抽象工厂有了解过吗,他们的区别是什么
常见的设计模式有:单例模式,工厂模式,代理模式,策略模式,观察者模式,装饰模式,适配器模式,命令行模式, 组合模式,模板方法模式
其中我熟练掌握的有单例模式,工厂模式,代理模式

Controller是单例还是多例,如何将一个单例变为多例
Spring controller默认下是单例,类上面加上注解@Scope(“prototype”)即可变为多例模式

Redis支持的Java客户端有哪些
Redisson、Jedis、lettuce等等,官方推荐使用Redisson。
Redisson好处:
基于Netty实现,采用非阻塞IO,性能高
支持异步请求
支持连接池
支持pipelining、LUA Scripting、Redis Sentinel、Redis Cluster
不支持事务,官方建议以LUA Scripting代替事务
支持在Redis Cluster架构下使用pipelining
支持读写分离,支持读负载均衡,在主从复制和Redis Cluster架构下都可以使用
内建Tomcat Session Manager,为Tomcat 6/7/8提供了会话共享功能
可以与Spring Session集成,实现基于Redis的会话共享
文档较丰富,有中文文档

HashMap和TreeMap你觉得用哪个好
我比较喜欢使用HashMap因为HashMap根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度.

Hashset有了解过吗,能说说HashSet的实现原理吗
HashSet是基于HashMap来实现的,操作很简单,更像是对HashMap做了一次“封装”,而且只使用了HashMap的key来实现各种特性.

你觉得应该怎样可以保证一个集合不被修改
采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的,但是他会报错。

多线程里面Syncronize是怎么实现的(超纲)

解释一下什么是线程,什么是进程
进程是系统中正在运行的一个程序,程序一旦运行就是进程。
线程是进程的一个实体,是进程的一条执行路径。

线程池是什么,他有哪些状态
RUNNING(接受新的任务,处理等待队列中的任务)
SHUTDOWN(不接受新的任务提交,但是会继续处理等待队列中的任务)
STOP(不接受新的任务提交,不再处理等待队列中的任务)
TIDYING(所有的任务都销毁了)
TERMINATED(线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED)

什么是死锁,如何防止
什么是死锁:
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去
如何防止:
避免多次锁定。尽量避免同一个线程对多个 Lock 进行锁定。
具有相同的加锁顺序。如果多个线程需要对多个 Lock 进行锁定,则应该保证它们以相同的顺序请求加锁
使用定时锁。程序在调用 acquire() 方法加锁时可指定 timeout 参数,该参数指定超过 timeout 秒后会自动释放对 Lock 的锁定
死锁检测。死锁检测是一种依靠算法机制来实现的死锁预防机制,它主要是针对那些不可能实现按序加锁,也不能使用定时锁的场景的。

Session和cookie的区别能说一下吗
cookie数据存放在客户端,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑性能应当使用cookie。
不同浏览器对cookie的数据大小限制不同,个数限制也不相同。
可以考虑将登陆信息等重要信息存放为session,不重要的信息可以放在cookie中。

常见的异常有哪些
Java.lang.NullPointerException(空指针)
java.lang.ClassNotFoundException (指定类不存在)
java.lang.ArithmeticException(数学运算异常)
java.lang.ArrayIndexOutOfBoundsException(数组下标越界)

跨域了解过吗,如何实现跨域
jsonp
利用了 script 不受同源策略的限制
缺点:只能 get 方式,易受到 XSS攻击
代理跨域请求
前端向发送请求,经过代理,请求需要的服务器资源
缺点:需要额外的代理服务器
基于 Html5 websocket 协议
websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求
缺点:浏览器一定版本要求,服务器需要支持 websocket 协议

什么是声明式事务
管理建立在AOP基础上,本质是对方法前后进行拦截

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值