四天三次面试记录

2021.3.8 南京某数百人A轮公司

1.java不调用系统函数实现字符串反转,要求时间复杂度最小。

这里不让使用系统函数让我很费解,因为说实话我不太知道哪些该属于系统函数范畴。

public static String reverse_h(String str){
      StringBuffer s = new StringBuffer(str).reverse();
      return s.toString();
}

2.对于一串含汉字的字符串,按输入字节数输出字符,若字节数不满足汉字字节,不打印该汉字。

面试时不知道如何判断该字节数是否为汉字。

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Please input character:");
        String s = scan.next();
        System.out.print("Please input byte:");
        int n = scan.nextInt();
        split(s,n);
    }

  public static void split(String str, int n){
        int byte_all = str.length();
        byte byte1[] = str.getBytes();
        if(n > byte_all)
            n = byte_all;
        if(byte1[n]<0)
            System.out.println("output: "+new String(byte1, 0, --n));
        else
            System.out.println("output: "+new String(byte1,0,n));
    }

2021.3.10 南京某几十人研发公司

没有笔试!!!
在高楼里的一层的某间房间,环境压抑,工资不高,待遇只有五险一金,要求无偿加班。
对于这家,以及这类公司,我再看它一眼我是狗!!!
唯一收获:在面试前要向hr问清楚一般福利,不能一听面试就巴巴跑过去。

2021.3.12 江苏某初创国企

1.jvm内存机制

java内存即Runtime Data Area(运行时数据区),内存管理就是针对这段空间进行分配与回收内存空间。
内存空间分为五部分:java栈,程序计数器,本地方法栈,方法区,堆。

程序计数器:用来指示执行哪条指令的。程序计数器是每个线程所私有的,由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对于程序计数器是不会发生内存溢出现象。
java栈:Java栈是Java方法执行的内存模型。Java虚拟机栈会为每一个即将执行的方法创建一个叫做“栈帧”的区域,该区域用来存储该方法运行时需要的一些信息,如局部变量表、操作数栈、动态链接、方法返回地址等。
本地方法栈:本地方法栈是运行本地方法的内存模型。运行本地方法时会创建栈帧,同样栈帧里也有局部变量表、操作数栈、动态链接和方法返回地址等,在本地方法执行结束后栈帧会出栈并释放内存资源。
方法区:方法区主要用来存放类信息、类的静态变量、常量、运行时常量池等,方法区的大小是可以动态扩展的。
堆:堆主要存放的是数组、类的实例对象、字符串常量池等。

2.Java设计模式了解多少,工厂模式优缺点

图片转自:https://www.cnblogs.com/pony1223/p/7608955.html图片转自:https://www.cnblogs.com/pony1223/p/7608955.html

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

我只了解工厂模式与单例模式。
其中工厂模式优缺点:
优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

单子模式:

public class Test{
	//创建对象
	private static  Test t = new Test();
	//构造函数,私有,实例化
	private Test(){}
	
	public static Test getTest(){  //饿汉式,线程安全,但浪费内存
		return t;
	}
}

3.forward与redirect区别

servlet的两种跳转方式,forward是直接请求转发,redirect是间接请求转发(重定向)。
1)、从地址栏显示来说:forward是服务器内部重定向,客户端浏览器的网址不会发生变化;redirect发出一个状态码,告诉服务器去重新请求那个网址,显示的的新的网址

2)、数据共享:在定向过程中forward使用的是同一个request,可以共享;redirect不可以。

3)、应用场景:forward一般用于用户登录:redirect用于用户注销登录返回主页面或者跳转其他页面

4)、forward请求次数一次,效率更高;而redirect请求两次。

4.mybatis里#{}与${}区别
#{}是占位符,
${}是拼接符。
推荐学习 https://blog.csdn.net/siwuxie095/article/details/79190856
博主写的很详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值