面试题一(java、Python、C++、前端、PHP)

2022-10-11 20:43:50 111 0
魁首哥

Java

问:下面两个代码片段有问题吗,为什么?

1.//Part 1

2.

3.List obj = new ArrayList< Long >();

4.obj.add(“I love Android!”);

5.

6.

7.//Part 2

8.Object[] objArray = new Long[1];

9.objArray[0] = “I love Android!”;

10.

答:上面 Part 1 编译出错,Part 2 编译 OK,运行出错。

因为 List 和 ArrayList 没有继承关系,而 Java 的数组是在运行时类型检查的。

Java

问: 泛型 擦除到底擦除了哪些信息?

答:这道题就比较有意思和深度了,很多没有深入了解泛型的人可能听到这道题就觉得题出的有问题,因为在他们的认识里泛型信息都被擦除了,怎么还分擦除了哪些信息?难道还分情况?答案是确定的,泛型擦除其实是分情况擦除的,不是完全擦除,一定要消除这个误区。

Java 在编译时会在字节码里指令集之外的地方保留部分泛型信息,泛型接口、类、方法定义上的所有泛型、成员变量声明处的泛型都会被保留类型信息,其他地方的泛型信息都会被擦除。

感兴趣的可以自己编写各种场景的泛型代码然后编译后反编译查看即可发现。

Java

问:下面程序的输出是什么?为什么?

1.public class Demo {

2.public static void main(String[] args) throws Exception {

3.ParameterizedType type = (ParameterizedType) Bar.class.getGenericSuperclass();

4. System .out.println(type.getActualTypeArguments()[0]);

5.

6.

7.ParameterizedType fieldType = (ParameterizedType) Foo.class.getField(“children”).getGenericType();

8.System.out.println(fieldType.getActualTypeArguments()[0]);

9.

10.

11.ParameterizedType paramType = (ParameterizedType) Foo.class.getMethod(“foo”, List.class).getGenericParameterTypes()[0];

12.System.out.println(paramType.getActualTypeArguments()[0]);

13.

14.System.out.println(Foo.class.getTypeParameters()[0].getBounds()[0]);

15. }

16.

17.

18.class Foo {

19.public List children = new ArrayList();

20.

21.

22.public List foo(List foo) {

23.return null;

24. }

25.

26.

27.public void bar(List param) {

28.//empty

29. }

30. }

31.

32.

33.class Bar extends Foo {}

34.}

35.

答:class java. lang .String

class Demo$Bar

class java.lang.String

interface java.lang.CharSequence

通过上面例子会发现泛型类型的每一个类型参数都被保留了,而且在运行期可以通过反射机制获取到,因为泛型的擦除机制实际上擦除的是除结构化信息外的所有东西(结构化信息指与类结构相关的信息,而不是与程序执行流程有关的,即与类及其字段和方法的类型参数相关的元数据都会被保留下来通过反射获取到)。

Python

问:以下代码将输出什么?

答:以上代码将输出 [],并且不会导致一个 IndexError。

正如人们所期望的,试图访问一个超过列表索引值的成员将导致 IndexError(比如访问以上列表的 list[10])。尽管如此,试图访问一个列表的以超出列表成员数作为开始索引的切片将不会导致 IndexError,并且将仅仅返回一个空列表。

一个讨厌的小问题是它会导致出现 bug ,并且这个问题是难以追踪的,因为它在运行时不会引发错误。

C++

问:静态成员函数能不能同时也是 虚函数

答:不能。调用静态成员函数不要实例。但调用虚函数需要从一个实例中指向虚函数表的指针以得到函数的地址,因此调用虚函数需要一个实例。两者相互矛盾

前端

问:实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

答:考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚

考察点2:是否知道如何判断一个变量是什么类型的

考察点3: 递归算法 的设计

PHP

问:Mysql 的存储引擎, myisam innodb 的区别。

答:简单的表达:

MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发

innodb是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。

收藏
分享
海报
0 条评论
111
上一篇:linux下PHP使用Redis 下一篇:你知道快递的收货人与地址自动识别用php如何实现吗

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码