java常见笔试和面试题

目录

1.java语言不允许使用指针访问内存,更不允许指针数组访问内存

2.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问

3.解释重构:

4.进程和线程的区别:

5.同一进程之间共享内存,包括堆和栈。这句话是错的!!!(有人能告诉我错哪了吗?)

6.请列举线程运行时几种状态的切换

7.复合数据类型

8.html5的新标签

9.DNS作用

10.什么样的数据适合缓存?

11.数组和链表的区别

12.与UDP相比,TCP特点:面向连接,流传输

13.进程通信

14.实例变量和局部变量

15.冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

16.java内存区

17.http状态码

18.服务器和浏览器如何进行交互的?

19.前端点击,请求失败。原因及解决办法

20.一台机器对200个单词进行排序花了200秒,(使用冒泡排序)800秒可以排序多少个单词?

21.并发操作会带来哪些数据的不一致性?

22.java语言的跨平台

23.volatile和synchronized

24.java标识符

25.实例方法和静态方法

26.命令操作符

27.B树(即二叉搜索树)

28.B-树(多路搜索树,并不是二叉的)

29.B+树(B-树的变体)

30.B*树(是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针; )

31.什么是存储过程?与函数有何区别?

32.什么是循环队列?跟队列相比有什么特性和优点?

33.批处理系统的主要缺点是:失去了交互性

34.并发性是指若干事件在(B)发生

35.如果某一进程获得除CPU以外所有所需运行资源,经调度,分配CPU给它,则进程将进入运行状态

36.运行中的进程可以处在运行、就绪、等待三种状态之一。

37.js中数组的添加和删除

38.StringBuilder和Stringbuffered

39.用二进制来编码字符串"adceadaa",需要能够相据编码,解码回原来的字符串,则至少需要二进制字符的长度是?

40.各种算法的时间复杂度

41.红黑树和小跟堆性能对比


1.java语言不允许使用指针访问内存,更不允许指针数组访问内存

2.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问

transient关键字只能修饰变量,不能修饰方法和类,注意:本地变量不允许使用transient关键字修饰,变量如果是用户自定义的变量,需要实现serializable接口

被transient修饰的变量不再能够被序列化,静态变量是无法实现序列化的,不管有没有transient修饰

3.解释重构:

名称定义:对软件内部结构的一种调整,目的是的不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

动词定义:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构

4.进程和线程的区别:

进程是系统资源调度和分配的独立单位,线程是进程中的一个子任务,线程是CPU调度和分配的最小单位,同一进程中的线程共享数据,但拥有自己自己栈空间,拥有独立的执行序列

5.同一进程之间共享内存,包括堆和栈。这句话是错的!!!(有人能告诉我错哪了吗?)

6.请列举线程运行时几种状态的切换

1)新建状态,创建了一个线程对象

2)就绪状态,调用线程对象的start方法

3)运行状态,获取了CPU,执行程序代码

4)阻塞状态,因为某种原因放弃了CPU的使用权,暂时停止运行,直到进入就绪状态,才有机会转到运行状态

5)死亡状态,run方法结束或者出现了异常退出了run方法

--阻塞的情况分为三种:

等待阻塞:运行的线程执行wait()方法,该线程释放占用的所有资源,需要其他线程notify(),notifyAll()唤醒

同步阻塞:

其他阻塞:运行的线程执行sleep()方法或者join()方法,或者发出了I/O请求时,JVM会将该线程置为阻塞状态,当sleep超时,join()等待线程终止或者超时,I/O处理完毕,转为就绪状态

当线程调用的自身的sleep()方法或者其他线程的join()方法,不会释放所占用的资源

当线程调用了yield()方法,放弃当前线程获得的CPU时间片,回到就绪状态,这时与其他进程处于同等竞争状态

suspend()和resume()配套使用

wait()和notify()配套使用

sleep()强制线程休眠,但不会释放锁

wait()会释放锁

7.复合数据类型

除了基本数据类型,剩下的都是复合数据类型

(int、short、byte、char、long、double、float、boolean)

8.html5的新标签

<nav></nav>

<article></article>

<figure>

<dialog>

<menu>

<hgroup>

<small>

<details>

<ruby>

<meter>

<progress>

9.DNS作用

把域名解析成IP地址

10.什么样的数据适合缓存?

数据访问率高,适合缓存

数据读比例高,适合缓存

数据对一致性要求低,适合缓存

11.数组和链表的区别

数组在内存中占用连续的内存空间(数组静态分配内存)

--查询操作时,时间复杂度为O(1)

--添加和删除操作时,时间复杂度O(n)

--数组的优点

    随机访问性强(通过下标进行快速定位)

    查找速度快

--数组的缺点

    1.插入和删除效率低(插入和删除需要移动数据)

    2.可能浪费内存(因为是连续的,所以每次申请数组之前必须规定数组的大小,如果大小不合理,则可能会浪费内存)

    3.内存空间要求高,必须有足够的连续内存空间。

    4.数组大小固定,不能动态拓展

 

链表在内存中不是连续存储的(链表动态分配内存)

--查询操作时,时间复杂度为O(n)

单链表:与数组不同,我们无法在常量时间内访问单链表中的随机元素

如果,我们想要获得第i个元素,必须从头结点开始遍历, 我们按索引来访问元 素平均要花费 O(N) 时间,其中 N 是链表的长度。

--添加和删除操作时,时间复杂度为O(1)

--链表的优点

 1.插入删除速度快(因为有next指针指向其下一个节点,通过改变指针的指向可以方便的增加删除元素)

 2.内存利用率高,不会浪费内存(可以使用内存中细小的不连续空间(大于node节点的大小),并且在需要空间的时候才创建空间)

 3.大小没有固定,拓展很灵活。

--链表的缺点

 不能随机查找,必须从第一个开始遍历,查找效率低

12.与UDP相比,TCP特点:面向连接,流传输

13.进程通信

信号、信号量、消息队列、共享内存都可用于进程通信

14.实例变量和局部变量

实例变量是类的成员变量

在方法中定义的局部变量在该方法被执行时创建

局部变量在使用前必须初始化

15.冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。

16.java内存区

Java内存区域分为线程共享内存区,线程私有内存区

线程共享内存区:java堆、方法区

线程私有内存区:虚拟机栈、本地方法栈、程序计数器

17.http状态码

1开头:信息

2开发:成功

3开头:重定向

4开头:客户端错误

5开头:服务器错误

18.服务器和浏览器如何进行交互的?

1.浏览器根据主机名‘www.xxx.cn’去操作系统Hosts文件中查找主机名对应的ip地址

2.浏览器如果在操作系统的Hosts文件中没有找到对应的IP地址,就去互联网上的DNS服务器上查找"www.xxx.cn"这台主机对应的IP地址。

3.浏览器查找到"www.xxx.cn"这台主机对应的IP地址后,就使用IP地址连接到Web服务器。

4.浏览器连接到web服务器后,就使用http协议向服务器发送请求,发送请求的过程中,浏览器会向Web服务器以Stream(流)的形式传输数据,告诉Web服务器要访问服务器里面的哪个Web应用下的Web资源

5.浏览器拿到服务器传输给它的数据之后,就可以把数据展现给用户看了

19.前端点击,请求失败。原因及解决办法

请求超时

网络出错

服务器忙

客户权限出现问题

服务器返回数据出错

20.一台机器对200个单词进行排序花了200秒,(使用冒泡排序)800秒可以排序多少个单词?

21.并发操作会带来哪些数据的不一致性?

丢失修改、不可重复读、脏读,不会有死锁

22.java语言的跨平台

语言跨平台是编译后的文件跨平台,而不是源程序跨平台。

Java源代码首先经过编译器生成字节码,即class文件,该class文件与平台无关,而class文件经过解释执行之后翻译成最终的机器码,这是平台相关的。

23.volatile和synchronized

volatile能保证数据的可见性,但不能完全保证数据的原子性,volatile只能修饰变量,volatile不会造成线程阻塞

synchronized既保证了数据的可见性,又保证了数据的原子性,synchrnized可以修饰代码块和方法,可能会发生阻塞

24.java标识符

Java标识符命名规范是:

1)只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;

2)首字母不能为数字;

3)关键字和保留字不能作为标识符。

25.实例方法和静态方法

实例方法可以直接调用本类的类方法

类方法就是静态方法。其它的就是实例方法

实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,但类方法不能访问实例变量。实例方法必须由实例对象来调用,而类方法除了可由实例对象调用外,还可以由类名直接调用。

另外,在类方法中不能使用 this 或 super。 关于类方法的使用,有如下一些限制:

1 在类方法中不能引用对象变量。

2 在类方法中不能使用super、this关键字。

3 类方法不能调用类中的对象方法。

与类方法相比,实例方法几乎没有什么限制:

1 实例方法可以引用对象变量(这是显然的),也可以引用类变量。

2 实例方法中可以使用super、this关键字。

3 实例方法中可以调用类方法。

26.命令操作符

ping 用来检查网络是否连通。 

tracert 用于确定 IP 数据包访问目标所采取的路径

netstat 用于显示当前网络的信息

arp 根据IP地址获取物理地址的一个TCP/IP协议

27.B树(即二叉搜索树)

28.B-树(多路搜索树,并不是二叉的)

29.B+树(B-树的变体)

30.B*树(是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针; )

31.什么是存储过程?与函数有何区别?

32.什么是循环队列?跟队列相比有什么特性和优点?

33.批处理系统的主要缺点是:失去了交互性

34.并发性是指若干事件在(B)发生

  1. 同一时刻  B。同一时间间隔内   C.不同时刻  D.不同时间间隔内

35.如果某一进程获得除CPU以外所有所需运行资源,经调度,分配CPU给它,则进程将进入运行状态

  1. 就绪状态  B.运行状态  C.阻塞状态 D.活动状态

36.运行中的进程可以处在运行、就绪、等待三种状态之一。

进程若已近获得CPU以外的所有运行所需资源,此时申请CPU得不到满足,

--->就依然处于就绪状态

正在运行的进程,因为某种原因而暂停,

--->此时处于阻塞状态(也称等待状态,挂起状态)

进程获得除CPU以外的所有所需资源,并分配CPU给他,

---->则该线程进入运行状态

Q10.常用的静态路由选择算法:最短路由选择算法、扩散法、基于流量的路由选择算法

 

37.js中数组的添加和删除

var datas=[10,20,30];

datas.unshift(40,50);  // 首部添加 [40,50,10,20,30]

data.pop();  // 尾部删除  [40,50,10,20]

datas.push(60,70);  // 尾部添加 [40,50,10,20,60,70]

data.shift();  // 首部删除  [50,10,20,60,70]

38.StringBuilder和Stringbuffered

StringBuilder不是线程安全的

Stringbuffered是线程安全的

39.用二进制来编码字符串"adceadaa",需要能够相据编码,解码回原来的字符串,则至少需要二进制字符的长度是?

40.各种算法的时间复杂度

41.红黑树和小跟堆性能对比

从一些java学习群得到的回答:(我也不知道对不对)

小根堆取前面几个最小数比较好,小根堆取的过程中,会调整堆,log(n)

比如:一个亿个数里面找最大的10个数可以用小根堆

红黑树的查询查询性能比较好,按区间划分性能佳

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值