附加简历学习:
Springcloud用户注册,
以及mq用户多线程,同时发短信,异步,解耦,削峰
⭐面试时记得录音,保留面试问的问题
蓝凌科技
Jq获取数据框以及数据读取后怎么展示下拉框
Java好处:https://www.cnblogs.com/yxj808/p/11936224.html
简单,跨平台,多线程,动态编译,gc垃圾回收机制,java类加载机制
Springmvc实现原理,
整个处理过程从一个HTTP请求开始:
1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息。
2.DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)。
3.调用相应处理器中的处理法,处理该请求后,会返回一个ModelAndView。
4.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。
aop的使用
日志处理,安全控制、事物处理、性能统计
实现原理jdk动态代理基于接口支持,以及实现cglib基于类多线程中
Spring数据如何传输的
HttpServletRequest和HttpServletResponse来进行参数的获取
@RequestParam(表单name名)
对象映射获取
域对象传递
ModelAndView传递
通过@ModelAttribute指定自定义参数名,指定之后不再通过默认名称获取
多线程实现方式以及启动
继承Thread、实现runnable、callable、启动start()方法
sleep和wait的区别有:
1,这两个方法来自不同的类分别是Thread和Object
2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
1、static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用。
2、static修饰的变量,在类加载时会被分配到数据区的方法区。类的实例可共享方法区中的变量。如果static修饰的变量发生改变,那么所有类实例引用的变量都会一起发生改变。
3、static修饰的方法中不能使用this或super,static修饰的方法属于类的方法,而this或super只是对象的方法。
4、static修饰的方法不能引用非static 修饰的变量, 在类加载过程中,当static修饰的方法加载完成时,非static修饰的变量还未加载,所以无法引用非static修饰的变量。
5、非static修饰的方法可以引用static 修饰的变量,在类加载过程中,static修饰的变量优先完成加载,所以当非static修饰的方法完成加载后可以引用static 修饰的变量。
Final是一个修饰符:
当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值
当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变 量的时候给它赋值
当final修饰方法时,该方法不能被重写
当final修饰类时,该类不能被继承
Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽 象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要)
Final不能修饰接口,因为接口中有需要其实现类来实现的方法
Finally:
Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行, 并且会在return,continue,break关键字之前执行
finalize:
Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC (garbage collector垃圾回收)运行机制的一部分,finalize()方法是在 GC清理它所从属的对象时被调用的
Sql语句,修改字段以及修改数据
ALTER TABLE 表名 MODIFY COLUMN 字段名...
ALTER TABLE 表名 ADD COLUMN 字段名 字段类型 DEFAULT NULL;
Update table set () where
Jvm内部结构以及优化
字节码执行引擎、类装载子系统、内存模型
ajax优缺点
优点:
1.异步请求,不妨碍用户浏览页面或者其他操作。
2.局部刷新,无需重新刷新页面。
3.界面与应用分离。有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率、也更加适用于现在的发布系统。
4.基于标准被广泛支持。
5.前端和后端负载平衡。最大程度的减少冗余请求和响应对服务器造成的负担,提升站点性能。
缺点
2.安全问题。易受到黑客攻击。
3.对搜索引擎支持较弱。
4.不能很好支持移动设备。
5.违背URL和资源定位的初衷。
Ajax实现原理
IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象
Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。
XMLHttprequest
浏览器请求->js调用->ajax引擎->http传输->web/xml服务器->数据处理逻辑层
数据处理逻辑层->web/xml服务器->xml数据->ajax引擎->返回html+css给客户端
Spring源码
Spring在代码中获取bean的几种方式,applicationContext.getbean()
Linux基本命令
目录切换 cd
目录查看 ls [-al]
创建目录【增】 mkdir
删除目录或文件【删】rm
目录修改【改】mv 和 cp
修改文件【改】 vi或vim
新建文件【增】touch
查程序进程 ps -ef
命令解压(tar)
查看日志 tail 或者cat
面试过程碰到的问题以及如何解决的
Mysql和Oracle区别
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
2. Oracle支持大并发,大访问量,是OLTP最好的工具。
3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
4.Oracle也Mysql操作上的一些区别
①主键
Mysql 一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将 序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
②单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
③翻页的SQL语句的处理
MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80
④ 长字符串的处理
长 字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长 度字段值都应该提出警告,返回上次操作。
⑤空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较
MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。
以及分页用法limit
oracle 分页
select * from (select t.*, rownum rn from (select * from menu order by id desc) t where rownum < 10) where rn >=5
2: mysql 分页
select * from music where id limit 5,5
select * from tableName limit i,n
# tableName:表名
# i:为查询结果的索引值(默认从0开始),当i=0时可省略i
# n:为查询结果返回的数量
# i与n之间使用英文逗号","隔开
数据库去重方法
distinct、group by 和 row_number() over
模糊查询
Like
Xx字 段 like ‘值%’ 否则全表查询
Instr
Instr(字段,‘值’)>0
Contains
需要另外模糊查询列建全文索引
内容少用like或者instr,模糊查询多用contains
Hibernate使用方法以及面试题
首先通过configuration去加载hibernate.cfg.xml这个配置文件,根据
配置文件的信息去创建sessionFactory,sessionFactory是线程安全的,
是一个session工厂,用来创建session,session是线程不安全的,相当于
jdbc的connection,最后通过session去进行数据库的各种操作,在进行操作
的时候通过transaction进行事务的控制。
单点登录原理以及实现方式
存储信任
验证信任
流程运行:
(1) 用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session;
(2) 用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页;
(3) 一般采用Cache中间件实现,建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息;
(4) 存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时;
结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话。
Redis缓存机制原理以及实现方式
百纳九州
基础笔试题:java特性,sql遇到问题,ajax原理,mvc原理,
Oracle和mysql区别、多线程启动方式、
2、索引的优点
1.创建唯一性索引,保证数据库表中每一行数据的唯一性
2.大大加快数据的检索速度,这也是创建索引的最主要的原因
3.减少磁盘IO(向字典一样可以直接定位)
3、索引的缺点
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
2.索引需要占用额外的物理空间
3.当对表中的数据进行增加、删除和修改的时候,
索引也要动态的维护,降低了数据的维护速度
准备面试题
线程池作用
1.newCachedThreadPool创建一个可缓存线程池程
2.newFixedThreadPool 创建一个定长线程池
3.newScheduledThreadPool 创建一个定长线程池
4.newSingleThreadExecutor 创建一个单线程化的线程池
1.减少了创建和销毁线程的次数,
每个线程都可以被重复利用,
可执行多个任务。
2.可以根据系统的承受能力,
调整线程池中线程的数目,
防止因为消耗过多的内存,
而导致服务器宕机
(每个线程需要大约1MB内存,线程开的越多,
消耗的内存也就越大,最后宕机)。
通常我们使用的线程池是实现了ExecutorService的
ThreadPoolExecutor。
抽象类和接口区别
1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
7、抽象类里可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口,但类只能单根继承。
Js面试题:
选择器:类,id,元素,通配符,
唯一索引、非唯一索引、主键索引和聚集索引。 尽管唯一索引有助于定位信息
1)怎么保证接口数据的传输安全?
1、对请求做身份认证(数据签名)
2、对敏感数据进行加密(数据加密)
3、session、token机制
4、HTTPS(数字证书机制)
2)你怎么理解 Spring 是一个容器?
3)Tomcat怎么做 Session 共享?
4)什么是松耦合?你们项目是怎么做的?
还有一些面试问多线程、锁、JVM调优、类的加载机制、时间和空间复杂度、还有写算法程序的,
1,异常
输入输出异常:IOException算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCastException操作数据库异常:SQLException文件未找到异常:FileNotFoundException数组负下标异常:NegativeArrayException数组下标越界异常:ArrayIndexOutOfBoundsException违背安全原则异常:SecturityException文件已结束异常:EOFException字符串转换为数字异常:NumberFormatException方法未找到异常:NoSuchMethodException
2,请问你对jsp 的看法
jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
什么是Java的反射?
在运行状态中,对于任意一个类,都能够知道这个类的属性和方法;
反射的作用?
如果给定一个类名,就可以通过反射机制来获取类的所有信息,也可以动态的创建对象和编译;
反射的原理?
Java语言在编译之后会生成一个class文件,反射就是通过字节码文件找到其类中的方法和属性等;
反射的实现主要借助以下四个类:
1、Class:类的对象;
2、Constructor:类的构造方法
3、Field:类中的属性对象
4、Method:类中的方法对象
- Spring框架都配置哪些内容?
- Spring Bean 的配置内容有哪些?
id、class、scope、property
3.Mysql数据库有什么特点?
1、可以处理拥有上千万条记录的大型数据;
2、支持常见的SQL语句规范;
3、可移植行高,安装简单小巧;
4、良好的运行效率,有丰富信息的网络支持;
5、调试、管理,优化简单(相对其他大型数据库)。
4.Mysql数据库联合索引遵循的是什么原则?
最左匹配原则
5.我看你精通Tomcat 等中间件,那你说下我Tomcat如何做调优呢?
1. 禁用AJP协议
2. 将BIO通讯模式修改为NIO通讯模式
3. 启用外部连接池,来满足高并发已经复用的请求
4. 优化连接器
5. 在tomcat中设置JVM参数
6.Spring Service层有很多业务代码,可能是100多行或更多,可读性非常差,读完它可能需要个把小时,那么你怎么去做让它的可能性提升呢 ?
我的答案是通过业务逻辑步骤进行方法的一个封装
7.你有过数据库性能调优经验,那么数据库的耗费都耗费在了哪里?
1、 减少数据访问(减少磁盘访问)
2、 返回更少数据(减少网络传输或磁盘访问)
3、 减少交互次数(减少网络传输)
4、 减少服务器CPU开销(减少CPU及内存开销)
5、 利用更多资源(增加资源)
二、索引类型
Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
1. FULLTEXT即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。
全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。
2. HASH
由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。
HASH索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效,对于范围查询、排序及组合索引仍然效率不高。
3. BTREE
BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。
4. RTREE
RTREE在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。
相对于BTREE,RTREE的优势在于范围查找。
三、索引种类
普通索引:仅加速查询
唯一索引:加速查询 + 列值唯一(可以有null)
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
全文索引:对文本的内容进行分词,进行搜索
原子性、一致性、隔离性、持久性
索引数据结构
1、二叉树:不合适,因为如果索引自增长的话,和逐表查询没有很大区别
jdk1.8之前hashmap就是一个数组加一个链表,如果链表长,性能也不高
内存ram查找比磁盘io查找快
树高度小(解决办法横向递增,从左往右),查找快,io性能就能得到优化
一次lode的io只能几十k
2、红黑树:二叉平衡树,层级太多都要平衡性能也不高
b-tree:没有叶子节点指针,范围查找每次都要从根节点查找
b+tree:多叉苹平衡树,叶子节点才存储data,叶子节点用指针连接,磁盘io并且lode到内存查找,叶子节点依次递增,双向指针
3、hash表:散列算法,效率高但是hash不支持范围查找
在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。
mysql存储引擎形容数据库表
myIsam:非聚集(索引+指针(值在myd里面)),索引文件数据文件分离,,frm表结构文件,myd我的数据(随机存放数据),myi我的索引(b+tree),如果有索引查询先myi文件,找到索引位置以及对应的指针,通过地址去找myd稳位置
innodb:聚集索引(索引+数据),frm和ibd(索引和数据)
innodb必须有主键自增长(主键索引如果没有主键索引,就自己找一个默认索引,如果找不到就建一个隐藏列索引,为什么要整型,整型比字符串比大小快,整型占用空间小,自增效率高)
分库分表
区别:聚集索引效率高
表数据默认存储在安装位置data
联合索引底层存储结构
data
最左前缀原理:where里面条件跳过了前面字段就不会用索引了,为什么呢?
explain select * from table
四种索引类型:唯一索引、非唯一索引、主键索引、聚集索引。 尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。
Tomcat的Session共享(复制)的几种实现方案
1、使用Tomcat内置的Session复制方案
2、使用Spring Session实现
Spring Session提供了多种方式来存储Session信息,包括redis、mongo、gemfire、hazelcast、jdbc等。这里用redis来举例说明,首先进行依赖添加,然后进行配置即可。
3、添加依赖(gradle)
如果使用了缓存,数据库的权限或角色信息更新了。如何保证缓存中的数据也同步刷新Cache Aside Pattern
一、对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存;更新时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)。
二、对于并发程度较高的,可采用异步队列的方式同步,可采用kafka等消息中间件处理消息生产和消费。
中软国际
1、Css引入方式
三种引入方式的优先级 内联式>嵌入式>外部式
2、Ajax原理
一、IE 浏览器使用 ActiveXObject
二、Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化
3、Spring原理以及实现方式IOC以及AOP
IoC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件
一、IOC
①、IOC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的
②、Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。
二、AOP
权限认证、日志、事务处理
①、Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:
4、sql数据类型
在 MySQL 中,有三种主要的类型:Text(char、varchar、text、longtext)、Number(int、float、bigint、double)和 Date/Time(date、time)类型。
5、数据库数据结构那些
Hash表、b+tree、rtree()
6、Hashmap原理和hashtable原理
一、hash表存储利用到了数组以及链表,当键值对数据传入时,系统先将key值取出,利用hash函数转换成hash值,再运用散列法(此处用除法散列法取余),得到需要存入数组的下标index;
二、hash表就是通过传入的键值对,通过hash算法指向一个连续的存储空间(数组存储),将键值对存入数组;对于指向相同的存储空间的hash值,再以链表方式存储;这样hashmap不仅具有了数据查询快速的特性,同时有了链表方便插入、删除的特性;因此hashMap对于数据的存储查询具有非常好的特性;
7、集合有那些,区别是什么,arraylist、linklist、set存储结构
一、Set和list,共同父类collection
二、arraylist存储结构:数组(查询速度会快)、linklist存储结构:链表(增删改快)、set:无序不可重复
三、1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。
2.List接口实现类有ArrayList,LinkedList,Vector。ArrayList和Vector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。
8、list如何去重?
一、通过List的contains()方法去重、
二、遍历、
三、利用HashSet去重
9、数据库优化
一、建立索引
二、选取最适合的字段属性
三、使用外键
四、优化查询语句(1、在相同类型的字段间进行比较的操作。2、在建有索引的字段上尽量不要使用函数进行操作。)
10、多线程
一、1、继承Thread类创建线程(单继承)
2、实现Runnable接口创建线程(多实现接口)
3、实现Callable接口通过FutureTask包装器来创建Thread线程
线程同步方法?
一、同步方法
二、同步代码块
三、wait与notify
四、使用特殊域变量(volatile)实现线程同步
五、使用重入锁实现线程同步
六、使用局部变量实现线程同步
七、使用阻塞队列实现线程同步
11、事物的隔离级别
一、特性:原子性、一致性、持久性、隔离性
二、数据库事务的隔离级别有4种,由低到高分别为未提交读(Read uncommitted) 、已提交读(Read committed)、可重复读(Repeatable read) 、串行化(Serializable。
1、怎么保证APP接口传数据的安全性
第一种方案: 用户登录时传给服务器一个用户的唯一标识(比如token),之后用户在做每一个操作时都必须带上token。来确保数据传输的安全性。
第二种方案: 用ssl(SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。)做双端验证。用Https协议做通信。
2、使用obpm流程架构
一、根据公司架构师提供的api文档进行用的、
二、轻量级的BPM系统。它的目标是让非IT人员无需任何编码,也可以轻松构建IT业务处理流程。OBPM内建工作流引擎(Workflow Engine), Form构建器,Report设计器。OBPM支持浏览器(IE/Firefox)做为客户端,同时还提供了强大的图形客户端
3、代办事物的提醒
4、websocket消息通讯
一、比传统的web请求来说减少资源,基于Flash,AdobeFlash通过自己的Socket实现完成数据交换,再利用Flash暴露出相应的接口给JavaScript调用,从而达到实时传输目的
二、可以直接跟接线员建立持久连接(相对于传统HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket是类似Socket的TCP长连接通讯模式)
三、WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样;
WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信
HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低
6、使用Redis定时提醒任务
使用Redis队列
7、为什么用redis缓存而不用session
一、主要区别还是在分布式时,对于session共享的解决上。redis更方便点
二、原生session在服务器端存储具有更高的可靠性,可以存储在文件、数据库、内存中。使用Session维护用户登录转态的过程:
用户进行登录时,提交的登录表单,放入request;
服务器端校验用户名和密码;
通过后将用户信息存储到Redis中,在数据库中的key为session_id;
服务器返回的response中的set-cookie字段包含该session_id,客户端收到后将其值存入浏览器中;
客户端之后的操作的request中都包含session_id,服务器收到后提取出并在Redis中拿到该session,完成业务操作;
使用Redis来实现session的共享和存储,必须要保证session_id,不会被轻易获取和破解,并设置合理的失效时间,对敏感操作必须再次校验用户。
8、项目中用到什么加密算法
Md5、RSA定义、rsa算法举例(ssh口令登录、ssh公钥登录)
一个应用或者说一个服务突然变得很慢
一、先看日志,排除了磁盘满了,
二、看网络慢问题,然后看进程,具体到当时几个线程,堵在哪儿
三、、看监控、网络,系统,应用。任何一个环节都有可能有问题,首先看网络监控情况,然后看系统(内存,cpu,负载 )情况
冒泡排序的最好情况的时间复杂是是O(n)
冒泡排序算法的空间复杂度是O(1)
PowerDesigner是一款非常优秀的数据库建模工具,熟练的使用该工具进行数据库建模,对软件系统
Rose是用来作为设计和建模的工具
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
四大作用域:pageContext request session application 可以通过jstl从四大作用域中取值.
Jsp传递值request session application cookie也能传值
懒汉式:你要用才创建对象、不用不创建对象、
饿汉式:一开始就创建对象
中科软面试题:
https://www.kanzhun.com/gsm61623c49.html?ka=interview_list_choice_city
0.简单介绍一下自己和项目
- mysql索引是做什么的?sql优化?表结构优化?
- 关系型数据库和非关系型数据库的区别?
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
非关系型数据库的分类和比较:
1、文档型
2、key-value型
3、列式数据库
4、图形数据库
- Redis你们用来做什么了?
- 讲讲怎么处理并发的?
- 讲讲分布式锁?你是怎么实现分布式锁的?
- 怎么调入支付接口的?
- 微信支付有什么接口?
- 反射是什么?
- 反射实例化类的3个常用方法?
通过forName()方法、类.class、对象.getClass()
12.String、StringBuild、StringBuffer
13.Io和Nio,多线程、集合
Io面向流,阻塞io,
Nio面向缓冲,非阻塞io,有选择器(允许一个单独的线程来监视多个输入通道)
答在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。 小结: (1)如果要操作少量的数据用 String; (2)多线程操作字符串缓冲区下操作大量数据 StringBuffer; (3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。 --------- StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。 高端点说:动态加载一个类对象,然后得到这个类对象的公私有方法、字段。那么问题是怎么加载这个类对象?所以就要用到反射的实例方法,
内含多表联查
来源:https://www.cnblogs.com/SmallStrange/p/12570534.html