中软国际(无锡诺威特分公司)
1.事务和锁
-锁:对数据库中数据对象进行加锁,防止并发或者多用户操作破坏数据库数据的不一致性。因为可能存在多个事务同时存取同一数据的情况。
- 事务:事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
1
2
3
4原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。
2.servlet 与jsp
- servlet:服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序
- jsp:(Java Server Page)则是一个页面, 由JSP容器负责执行。
- JSP便于输出,而Servlet便于进行逻辑处理。
1 | 用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP。 Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序。而JSP(Java Server Page)则是一个页面, 由JSP容器负责执行。 |
3.html和jsp
- jsp=html+java
4.mysql 如何实现分页
- MySql数据库提供了分页的函数limit m,n,
- 查询第20条到第30条的数据的sql是:select from table limit 20,30; ->对应我们的需求就是查询第三页的数据:select from table limit (3-1)*10,10;
- 分页sql格式是:select from table limit (start-1)limit,limit; 其中start是页码,limit是每页显示的条数。
5.简诉ssm
- Spring+SpringMVC+MyBatis
- 存储层:MyBatis
- 控制层:
6.转发和重定向
- 重定向:其实是两次request
- 转发:转发是服务器行为,重定向是客户端行为。
1 | 第一次,客户端request?? A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。 |
粤嵌公司
1.maven是什么?
- 我答 包管理工具
- 正确答案:包管理工具+(相同的目录结构)Java项目管理(构建 文档 生成报告 依赖 SCMs 发布 分发 邮件列表)
1 | 总的来说,Maven 简化了工程的构建过程,并对其标准化。它无缝衔接了编译、发布、 |
2.springMVC 前端控制器是哪个类
- 正确答案:DispatcherServlet
- springMVC:前端控制器 视图解析器 分发器/控制器
3.分页怎么实现的?
- 我答 limit函数 /springboot框架的Page对象
- 正确答案:有20,30种 通常自己写工具类。
- 还可以用插件pageHelper
擎动公司
1.tcp 三次握手
- 客户端发送位码SYN=1到服务器 随机产生seq客
- 服务器收到 返回SYN=1+ACK=1 产生seq服
- 客户端收到 确认 ack=1 且得到的seq=原seq客+1 正确发送ack+seq 服务器收到确认seq服=seq服+1 ack=1 连接建立成功
-1
2
3
4
5
6
7
8
9IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1
第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;
第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;
第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。
2.有10条数据 计算数据库消费表最近3个月的消费总额。(前提要有时间字段)
1 | SELECT * FROM product where DATE_SUB(CURDATE(), INTERVAL 90 DAY) <= date("creatDate"); |
3.单例模式
1 | public class SingleObject { |
连接池写成单例模式
1 | package com.esen.study.util; |
武汉百胜睿迪有限公司
mysql数据库去重问题
- 删除表中多余的重复记录(多个字段),只留有id最小的记录
- distinct
JAVA理论知识点
1.StringBuffer/StringBuilder
- StringBuffer的方法都是有synchronized修饰的,StringBuffer就叫做线程安全的类 而StringBuilder就不是线程安全的类
- 线程安全(不会同时被多线程修改而变成脏数据)
2.基本数据类型
- 整型:byte 8位 -2^7~2^7-1 shrot int long
- 字符型:char 2byte
- 浮点型:float 4byte double 8byte
- 布尔型:Boolean 1位
3.final
- 准确的描述是 当一个变量被final修饰的时候,该变量只有一次赋值的机会
4.获取类对象的3种方法/synchronized修饰类/类方法 同步对象的区别
- Class c1=Class.forName()
- Class c2=hero.class;
- Class c3=new Hero().getClass();
- 在对象方法前,加上修饰符synchronized ,同步对象是当前实例。
- 在类前,加上修饰符synchronized ,同步对象是当前类对象。
5.反射机制
- 通过字符串结合配置文件达到构造类对象的目的
6.自定义注解 @interface eg:DButil类用注解 教程
- 1.设置存储信息
1 | public JDBCConfig { |
- 2.给属性赋值
1 | "127.0.0.1", database = "test", encoding = "UTF-8", loginName = "root", password = "admin") (ip = |
- 3.获得存储信息 通过反射,获取这个DBUtil这个类上的注解对象
1 | JDBCConfig config = DBUtil.class.getAnnotation(JDBCConfig.class); |
- 4.整合
1 | "127.0.0.1", database = "test", encoding = "UTF-8", loginName = "root", password = "admin") (ip = |
7.staic/final
- static修饰的成员变量和方法都属于类成员,可以通过类名直接调用
- final 不可修改
1 | private static SingleObject instance = new SingleObject(); |
8.ArrayList/LinkList/HashMap/hashSet/collection/collections/Arrays
1.collections/Arrays 工具类
1
2List<Integer> numbers = new ArrayList<>();
Collections.reverse(numbers);2.ArrayList vs hashSet
| 集合框架&区别 | 是否有序 | 内容是否可重复 |
| —— | —— | —— |
| ArrayList | Y | Y |
| HashSET | N | N |3.ArrayList/LinkList
- 插入&定位数据 ArrayList慢
- 这是因为表结构不同
9.类实例化顺序
- 1.类的实例化顺序:先静态再父子
- 2.父类静态变量->父类静态代码块->子类静态变量->子类静态代码块->父类非静态变量(父类实例成员变量)->父类构造函数->子类非静态变量(子类实例成员变量)->子类构造函数。
10.继承/聚合
- 聚合体现的是整体与部分 并不一定指类
- 继承 一个类继承另一个类 有父类属性方法 还可自定义方法。
11.抽象类/接口
- 1.实现类区别 抽象类由子类实现 接口由类(包括抽象类)实现
- 2.有无方法声明/实现区别 抽象类可以有方法声明/方法实现 接口类无方法实现。
- 3.有无抽象方法 抽象类可以没有 接口没有
- 4.多继承区别 接口可多继承接口 类只能单根继承。
12.把这几个方法封装一下 | 属性的封装就不说啦
- eg:封装System.out.println()方法
- 思路:新建一个类 定义一个静态方法(这样直接可以类名访问) 然后把需要封装的方法写进去
- 需要用 System.out.println() 时 直接调用该类的静态方法。
1 | public class Util{ |
13.把super换成父类名 就一目了然啦
1 | public class ADHero extends Hero{ |
14.4种内部类 详细教程
- 非静态内部类:可以访问私有方法
静态内部类:可以访问静态方法
匿名类:
- 本地类:有名字的匿名类
15.注解 how2j教程
- 元注解 @Target。。
- 自定义注解
- 第三方框架注解