2021.4.7 美团买菜后端开发实习生(二面)(含总结)(已oc)


title: 2021.4.7 美团买菜后端开发实习生(二面)
tags: 面经


2021.4.7 美团买菜后端开发实习生(二面)

自我介绍
Java学习时长
final关键字的作用(见下文)
注解有什么作用?怎么来实现一个注解?(见下文)(当时回答不会)
Java中的内部类和静态内部类的区别?(见下文)
MySQL的存储文本有哪些呢?(当时回答不会)(见下文)
MySQL的存储时间?(见下文)(当时回答不会)
手撕算法题---求解立方根(见下文)
你为什么想学习Java呢?
你能介绍一下hadoop吗?
你了解python如何去处理二进制数据的方法呢?(当时回答不会)
反问环节。

1.1 final 关键字的作用

① final 修饰变量:如果是基本数据类型的变量,则其数值⼀旦在初始化之后便不能更改;如果是引⽤类型的变量,则在对其初始化之后便不能再让其指向另⼀个对象。

② final 修饰类:表明这个类不能被继承。

③ final 修饰方法:将方法锁定,以防任何继承类修改它的含义。

1.2 注解的作用以及如何来实现一个注解?

参考博客:JAVA 注解的几大作用及使用方法详解

(1)注解的作用

1.生成文档。这是最常见的,也是java 最早提供的注解。**常用的有@see @param @return 等;

2.跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量;

3.在编译时进行格式检查。如@Override放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出;

(2)如何实现一个注解:

注解这一块只能跟着java中的反射机制一起去看!(更多的参考上面的博客)

1. 要用好注解,必须熟悉java 的反射机制,从上面的例子可以看出,注解的解析完全依赖于反射。

2. 不要滥用注解。平常我们编程过程很少接触和使用注解,只有做设计,且不想让设计有过多的配置时。

1.3 MySQL的存储文本有哪些呢?

参考博客:mysql 存储文本_mysql储存文字用什么

有三种类型:char、varchar、text、BLOB

① CHAR(M): 为固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。M 表示列的长度,范围是 0~255 个字符。

例如,CHAR(4) 定义了一个固定长度的字符串列,包含的字符个数最大为 4。当检索到 CHAR 值时,尾部的空格将被删除。

② VARCHAR(M):是长度可变的字符串,M 表示最大列的长度,M 的范围是 0~65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。

例如,VARCHAR(50) 定义了一个最大长度为 50 的字符串,如果插入的字符串只有 10 个字符,则实际存储的字符串为 10 个字符和一个字符串结束字符。VARCHAR 在值保存和检索时尾部的空格仍保留。

③ TEXT:TEXT 列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。

TEXT 类型分为 4 种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。不同的 TEXT 类型的存储空间和数据长度不同。

TINYTEXT 表示长度为 255(28-1)字符的 TEXT 列。

TEXT 表示长度为 65535(216-1)字符的 TEXT 列。

MEDIUMTEXT 表示长度为 16777215(224-1)字符的 TEXT 列。

LONGTEXT 表示长度为 4294967295 或 4GB(232-1)字符的 TEXT 列。

④ BLOB:blob 保存的是二进制数据,利用这个特性,可以把图片存储到数据库里面。

1.4 MySQL的存储时间?

DateTime:没有时区信息,一旦时区更换,时间就会发生错误。DateTime耗费空间更大,耗费8个字节。

Timestamp:和时区有关。会随服务器时区的变化而变化。TimeStamp耗费4个字节,但是表示时间范围更小。

在《高性能MySQL》一文中推荐使用Timestamp

1.5 手撕算法题—求解立方根

这种类型的题目的解法可以参考我的博客:题目:任意给定一个浮点数,计算这个浮点数的立方根。(基于二分法和牛顿迭代法)(基于Java实现)

import java.util.Scanner;

public class MeiTuan {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            double num = sc.nextDouble();
            System.out.println(String.format("%.8f", Solution1(num)));

            System.out.println(String.format("%.8f", Solution(num)));
        }
    }


    //根据二分法进行解题
    public static double Solution1(double num){
        double min = 0;
        double max = num;
        double mid = 0;
        while((max - min) > 0.000001){
            mid = min + (max - min) / 2;
            if(mid * mid * mid > num){
                max = mid;
            }else if(mid * mid * mid < num){
                min = mid;
            }else{
                return mid;
            }
        }
        return mid;
    }


    //根据牛顿迭代法进行解题
    public static  double Solution(double num){
        double x = 1;
        double x1 = x - (x * x * x - num) / (3 * x * x);
        while((x - x1) > 0.000001 || (x - x1) < -0.000001){
            x = x1;
            x1 = x - (x * x * x - num) / (3 * x * x);
        }
        return x1;
    }
}

输出结果:

3
1.44224954
1.44224957

56
3.82586277
3.82586237

9
2.08008367
2.08008382

8
2.00000000
2.00000000
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值