一、浩鲸科技实习
一面: 面试问了暑期实习实现的连续签到,建议本人多从数据库方面入手;
二面: HR面主要闲聊
实习不招
面后复习:
数据库设计时尽量少用text和blob字段
数据库字段大小值范围与实际相当
二、中电福富校招
笔试:Java基础+Json字符串解析编程题
技术面:锁的分类,应用场景;数据库中索引、底层实现原理;事务;虚拟机操作指令
面后复习:
锁有悲观锁和乐观锁、公平锁和非公平锁、
悲观锁 Java中大部分利用锁的都是悲观锁
乐观锁 Java中典型的有Atomic类
公平锁是指多个线程按照申请锁的顺序来获取锁
非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。对于Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。
索引的分类:
单列索引(普通索引,唯一索引,主键索引)
普通索引:没什么限制,允许插入空值和重复值
唯一索引:不允许重复值,允许空值
主键索引:不允许空值,不允许重复值
组合索引(联合索引)
遵循最左前缀原则
eg:(a,b,c)创建索引,共有(a),(a,b),(a,b,c)三种索引
全文索引
InnoDB,MyISAM引擎都能用,只能在CHAR,VARCHAR,TEXT类型的字段上加该索引。主要用来查找文本中的关键字,而不是直接与字段值进行比较,全文索引需要配合match against使用,而不是一般的where like…
空间索引
是对空间数据类型的字段建立的索引,空间索引的列必须不为null,只有MyISAM支持该索引
索引失效:
-
组合索引没有遵循最左前缀原则
-
索引上做任何操作如计算、函数、类型转换,导致失效二全表扫描
-
select * 覆盖索引
-
MySQL使用不等于
-
Like以通配符开头(%abc)
-
or在连接时导致索引失效
-
字符串加单引号导致索引失效
索引底层原理:
B+树,InnoDB数据文本本身就是索引文件
事务:
- 特性:一致性、原子性、持久性、隔离性(ACID)
- 事务隔离级别:读未提交、读已提交-脏读、可重复读-不可重复读、串行化-幻读(两次结果不同);
数据库三大范式:
第一范式:字段不可拆分的
第二范式:完全依赖于主键
第三范式:只依赖于主键(消除传递依赖)
虚拟机指令(查看服务器资源指令、日志):
- top命令:实时显示进程状态用户
- df -h 命令:查看各分区使用情况
- free -m命令:查看内存使用量和交换区使用量
offer,拒绝
三、中宏立达校招:
一面:简单了解实习项目做的事以及MediaPipe的用法,建议多了解基础,准备二面
二面:SpringBoot 中带参数的方式、Session、Cookie,SSM 中(Interceptor、Filter、Aop执行顺序)、Requset和Session的区别,Stream流,Lambada表达式,Synchronized、索引,
Session
- 目的:保存用户状态而创建(服务器创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId 以cookie的方式发送给浏览器。)
- 获取Session
- HttpSession s = request.getSession(boolean flag)
true时 ,先查看请求当中是否有sessionId,如果没有,则创建一个session对象。果有,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,如果找不到,创建一个新的session对象。
false时,先查找请求当中是否有sessionId,如果没有,返回null。如果有,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,如果找不到,返回null。
- HttpSession s = request.getSession(boolean flag)
- 绑定数据 setAttribute
- Session的销毁
- 超时销毁 20 (默认30分钟)
- session.invalidate()
Cookie
- 前言
cookie数据存放在客户的浏览器上,session数据放在服务器上。如果 Cookie被禁用或者浏览器不支持会导致Cookie失效 - Java实现
Java将Cookie封装成java.servlet.http.Cookie类,可以通过request.getCookie()获取Cookie,可以通过response.addCookie(Cookie cookie)添加Cookie - Cookie的保存方式
以键值对方式 - Cookie具有不可跨域名性
根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。 - Cookie数量应该少而精
- Cookie属性
-
name Cookie名
-
value Cookie值,二进制值
-
maxAge Cookie的超时时间 正数为时间,0表示删除,默认-1(临时Cookie)
-
secure 是否被安全协议传输
-
path 该Cookie的使用路径,/stuWeb/表示stuWeb可以使用,/表示所有
-
domain 可以访问cookie的域名,如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。
正常情况下,同一个一级域名下的两个二级域名如www.helloweenvsfei.com和images.helloweenvsfei.com也不能交互使用Cookie,因为二者的域名并不严格相同。如果想所有helloweenvsfei.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数cookie.setDomain(".helloweenvsfei.com"); // 设置域名
-
version 该Cookie使用的版本号
-
如何保证Session是同一个session
获取登录Id,并存入redis
```java
HttpSession session = request.getSession();
session.setAttribute("loginUserId", user.getUserId());
redisTemplate.opsForValue().set("loginUser:" + user.getUserId(), session.getId());
```
访问接口时,在RedisSessionInterceptor拦截器中的preHandle()中捕获,然后根据该请求发起者的session中保存的userId去redis查当前已登录的sessionId,若查到且相等,放行。
Springboot中参数传递的三个注解的使用
-
@PathVariable
主要是用来获取 url 参数,Spring Boot 支持 restfull 风格的 url,比如一个 GET
注意:- 占位符中的id值直接赋值到参数id中,需要保证url中的参数和方法接收参数一致,否则就无法接收
- 如果不一致的话,其实也可以解决,需要用@PathVariable 中的value属性来指定对应关系
-
@RequestParam
GET用法
@RequestParam也是获取请求参数的
@RequestParam 是从 request 里面获取参数值,即这种风格的 url: http://localhost:8088/test/testRequestparam?id=1
注意- 页面传入的参数和类中接收的参数一致,@RequestParam注解可以省略,单个以及多个均适用;
- 界面传入的参数和类中接收的参数不一致,@RequestParam注解不可以省略,并且要在value属性中写明页面传入的参数名
POST用法
@RequestParam注解还可以用于POST请求,接收前端表单提交的参数
-
@RequestBody
@RequestBody注解用于POST请求上,接收json实体参数。
@RequestBody接收的是json实体,@RequestParam接收的是表单提交
Interceptor、Filter、Aop执行顺序
- Filter,Interceptor,Aspect 实际上都是对Aop的具体实现
- 执行顺序 :过滤filter前 - 拦截interceptor前 - aspect 开始执行- controller逻辑处理 - - aspect 结束 - 拦截后 - 过滤后。
Filter 是 java web 里面的,肯定获取不到 spring 里面 Controller 的信息。
Interceptor、Aspect 是和 spring 相关的,所以能获取到 Controller 的信息。
Requset和Session的区别
- 生命周期:request表示对客户端一次请求,在请求结束后会清空所有数据;session默认周期20-30分钟,在生命周期中session的数据一直存在,在浏览器被关闭的时候也不会关闭。
- 存取值:
- request
存值:request.setAttribute(“名字”, 要存的值);
取值:request.getParameter(“名字”)或者用EL表达式: ${名字} - session
声明:HttpSession session = request.getSession();
存值:session.setAttribute(“名字”, 要存的值);
取值:session.getAttribute(“名字”)或者用EL表达式 ${sessionScope.所存值的对象 }
- request
- 比较
- request
资源消耗较低,安全性较高,持久性低(一个网页一个request,返回response代表request结束) - session
资源消耗较高,安全性较低(session相当于是一个客户端的全局变量)
- request
Stream流
- stream() 为集合创建串行流 parallelStream() 创建并行流
- forEach() 迭代处理每一个元素
- map() 映射处理每个元素对应的结果 ,如取平方数
- filter() 通过设置条件过滤元素
- limit() 获取指定数量的流
- sorted() 对流进行排序
- colllect() 收集
Lambada表达式
- 特征
可选类型声明、可选参数圆括号、可选主题大括号、可选返回关键字return
多参也一样
四、格物科技
一面:jdkjre区别、字节多大
二面:计算机网络信息传播流程、HashMap查询速率、二叉树访问速率、JUC结构、JUC FULLGC和YONGGC
young GC(新生代GC):指发生在新生代的垃圾收集动作,新生代中的对象朝生夕死,所以 Minor GC 非常频繁,回收速度也比较快。Eden区没有空间会触发。
Full GC(老年代GC):指发生在老年代的GC,速度一般比 Minor GC 慢十倍以上。Full GC 会 Stop-The-World。
System.gc();
Survivor 空间不够用,就会通过分配担保机制,将多出来的对象提前转到老年代,此时如果老年代的可用内存小于该对象的大小,就会触发 Full GC;
老年代中最大可用的连续空间小于历代晋升到老年代的对象的平均大小时;
三面:人力资源了解个人软性考核 体验感极差
收到实习邀请,拒绝
五、亿能达科技
一面:介绍项目、SpringMVC流程、MVC意义
复习:
SpringMVC控制流程:
- 浏览器发送http请求到DispatcherServlet,中间会有Filter拦截请求,执行doService进行数据灌入后执行doDispatcher得到请求资源标识符URI
- HandlerMapping根据标识符找到对应Handler,将生成的Handler(处理器对象)及HandlerInterceptor(处理器拦截器)返回给DispatcherServlet
- 将封装好的HandlerExecutionChain类型的Handler处理器执行链和适合这个Handler的HandlerAdapter返回给DispatcherServlet。
- 通过获取到适合的HandlerAdapter执行HandlerAdapter中的 handle方法,方法调用Handler里对应的bean,并执行该bean对应的Controller类。
- 最终将执行结果封装成ModelAndView对象返回给DispatcherServlet。
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器,并根据View进行渲染视图
- 将处理过后的ModelAndView视图交给DispatcherServlet,并返回
六、福大自动化
放弃
7天试用期(留给其他人吧)
七、四创科技(Java开发工程师)
- 笔试:选择题程序推演、重载、类初始化顺序;程序编程(时间比较)、数据库编程(求学生平均值大于75的张姓同学姓名、求每科大于80分的学生)
- 初面:简单闲聊,主要以了解个人情况以及项目情况为主
- 二面:放弃
复习:
-
类的初始化顺序:父类中的静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类代码块·、父类变量、父类构造函数、子类变量、子类代码块、子类构造函数。
-
时间比较
//格式 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //计算差值 long diff = d2.getTime() - d1.getTime(); long diffSeconds = diff / 1000 % 60; long diffMinutes = diff / (60 * 1000) % 60; long diffHours = diff / (60 * 60 * 1000) % 24; long diffDays = diff / (24 * 60 * 60 * 1000);
-
数据库编程
select a.name from student a where a.name not in (select b.name from student b where score < 80); select name from student group by name having avg(score)>75;
八、中信期货-JAVA实习
-
初面:
1. Java基础 1. 数据结构:线性结构和树的区别 线性结构:第一个元素,没有前驱节点;最后一个元素无后继;中间元素一个前继节点和后继节点 树结构:根节点没有双亲结点;中间节点一个双亲节点可以有多个孩子节点;叶子节点可以有多个 2. 精度精准的类 BigDecimal BigInteger 3. BigDecimal类对精度缺失的处理 BigDecimal的出现为了防止float、double计算时精度缺失,但是本身还存在精度缺失的情况(double不能表示16位以上的精度) 使用String参数的构造器可以解决此问题 4. 锁的分类 2. 数据库 1. 单表500万行记录,已有索引,在不分库分表的情况下查询第200万行数据时效率问题 优化shema、sql语句+索引; 可以考虑加缓存,memcached, redis,或者JVM本地缓存; 主从复制,读写分离; 分库分表; 2. 多连接时查询的效率慢的问题 如果A表TID自增长且连续则B的ID位索引; 如果A的ID不连续,使用覆盖索引,TID妖媚主键要么辅助索引,B表ID一定需要索引 3. 计算机网络 1. TCP和UDP的协议 TCP:HTTP\HTTPS、FTP、POP3、IMAP4、SMTP、Telent(远程登录协议,通过终端登录到网络)、SSH(安全外壳协议,加密安全登录) UDP: DHCP(动态主机配置协议,动态分配IP地址)、NTP(网络时间协议,同步网络时间)、BOOTP 2. 访问一个网页会触发几个协议 浏览器通过域名查找IP地址:DNS(域名解析) 向Web服务器发送Http请求: TCP(建立TCP连接);IP(发送数据在网络层使用IP协议);OPSF(路由选择协议);ARP(地址解析协议);HTTP协议(TCP建立完成后,使用HTTP访问网页) 流程: 1 DNS解析 2 TCP连接 3 发送HTTP请求 4 服务器处理请求并返回HTTP报文 5 浏览器解析渲染页面 6 连接结束 4. 计算机操作系统 1. 进程和线程的区别
九、福诺
- 形式:多对多
- 知识点:
- 类的默认加载器在有参构造函数存在的时候是否会存在。
- redis单线程
- redis的数据结构
- redis如何做mq
放弃,年薪过低