欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java笔试题

程序员文章站 2022-10-03 18:09:21
文章目录1. 哪些是TCP服务,哪些是UDP服务2. 操作系统提供的服务有哪些3. sleep()和yield()的区别4. sleep()和wait()的区别5. volatile和synchronized的区别6. 编程题1. 哪些是TCP服务,哪些是UDP服务(1) TCP协议:传输控制协议,是可靠连接,类似于打电话,只有等待对方接通的时候才可以交流,也就是确认了对方可以传信息,才会发送信息。一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,(2)UD...



1. 哪些是TCP服务,哪些是UDP服务

(1) TCP协议:传输控制协议,是可靠连接,类似于打电话,只有等待对方接通的时候才可以交流,也就是确认了对方可以传信息,才会发送信息。一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,

(2)UDP协议:用户数据报协议,是不可靠的,就像发短信,发出去就完事了,对方是否接收到就与自己无关。使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息。

2. 操作系统提供的服务有哪些

(1)用户界面:一种是命令行界面,就像黑窗的命令行输入,通过命令行执行文件或者文档,一种是图形用户界面,可以控制更多的I/O操作或者菜单选择

(2)程序执行:操作系统在程序底层,操作系统需要让程序正常运行并提示运行错误信息或异常。

(3)I/O操作:程序的I/O操作可能涉及到保护文件特定功能使用,为了提高效率和进行文件保护,用户通常不能直接控制I/O设备,因此,操作系统提供I/O操作的方法。

(4)文件系统操作:可以说,WINDOWS系统就是靠强大的文件系统的目录结构和读写文件,创建文件删除文件的保护机制,访问权限机制赢得很多用户的支持。

(5)通信:通常,一个进程需要与另一个进程交换信息,这种通信可以通过共享内存来实现,也可以通过信息交换技术实现,一种是发生在同一台计算机的两个进程之间的通信,一种是发生在网络连接的不同计算机上的两个进程之间的通信。

(6)错误检测:CPU(如内存错误或电源失败)、I/O设备(磁带奇偶出错,网络连接出错,打印异常)、用户程序(算术溢出,试图访问非法内存地址,单个进程使用CPU时间太长)…每种类型的错误,操作系统都会有一套应对机制确保错误后能正常运行或者调解错误。

(7)资源分配:当计算机有多个用户或多个作业运行时,系统就会给他们每一个分配资源,操作系统可以管控多种不同的资源,什么资源什么时候进来到CPU什么时候出去。

(8)统计:操作系统负责记录哪些用户使用了多少和什么类型的资源,这种数据对研究人员有作用,可用于重新分配系统资源以提高计算服务能力。

(9)保护与安全:多个进程并发执行时,一个进程不能干预另外一个进程,操作系统会对两个进程之间的访问资源进行控制;然后就是操作系统需要设置密码用来保护自身不受外界的侵犯,记录外界强制破解的企图信息,如果一个系统需要保护和安全,那么系统中的所有部分都要预防,因为,一条链子的强度和最薄弱的环节相关。

3. sleep()和yield()的区别

(1)sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;
(2)线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态;
(3)sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;
(4)sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。

4. sleep()和wait()的区别

(1)sleep方法是Thread的静态方法,wait方法是Object类的普通方法;
(2)sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的);
(3)wait方法用于线程间通信,而sleep方法用于短暂的暂停线程;
(4)sleep针对当前线程,而wait针对被同步代码块加锁的对象;
(5)wait方法(notify,notifyAll)只能在同步方法或者同步块中使用(如果在non-synchronized函数或non-synchronizedblock中进行调用,虽然能编译通过,但在运行时会发illegalMonitorStateException的异常);sleep方法可以在任意位置使用;
(6)sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待;调用wait方法会暂停线程,当前线程释放对象的同步锁,进入等待池(wait pool),只有调用对象的notify或者notifyAll方法唤醒时,线程进入等锁池(lock pool),直到线程再次获得对象的锁才会进入就绪状态。

5. volatile和synchronized的区别

(1)volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

(2)volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的

(3)volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性

(4)volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。

(5)volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化

6. 编程题

题目要求:编写注册验证功能 1.原系统中包括两个注册好的账号“zhangsan"和"lisi",要求新注册的账号用户名不能已经存在,否则输出”用户名已经存在“,中止程序。 2.密码必须是816,且必须由数字和字母组成,否则输出”密码格式不正确“,中止程序。 3.手机号码必须是11位,且开头必须是1,否则输出”请输入正确的手机号“,中止程序 4.如果全部输入正确,输出”注册成功“ 
import java.util.Scanner; public class demo02 { public static void main(String[] args) { //输入 Scanner sc=new Scanner(System.in); System.out.println("请输入用户名"); int flag=0; while(flag==0) { String name=sc.next(); flag=user(name,flag); if(flag==1) { break; } System.out.println("请输入密码"); String passerword=sc.next(); flag=passerword(passerword,flag); if(flag==1) { break; } System.out.println("请输入手机号"); String phone=sc.next(); flag=phone(phone,flag); if(flag==1) { break; } System.out.println("注册成功"); break; } } private static int phone(String phone, int flag) { if(phone.charAt(0)!=1||phone.length()!=11) { System.out.println("请输入正确的手机号"); flag=1; } return flag; } private static int passerword(String passerword, int flag) { if(passerword.length()<8||passerword.length()>16) { System.out.println("密码格式错误"); flag=1; } return flag; } private static int user(String name,int flag) { if(name.equals("zhangsan")||name.equals("lisi")) { System.out.println("该用户名已存在"); flag=1; } return flag; } } 
题目要求: 将输入的数字n(n>=0)分解,然后让分解的数字相乘,求相乘后的最大值。
例如:
输入: 5 输出: 6 
import java.util.Scanner; public class demo03 { public static void main(String[] args) { //输入 Scanner sc=new Scanner(System.in); System.out.println("请输入一个数字"); long n=sc.nextLong(); //处理 if(n==0) { System.out.println(0); }else if(n%2==0) { long m=(n/2)*(n/2); System.out.println(m); }else { long m=(n/2)*(n/2+1); System.out.println(m); } } } 

本文地址:https://blog.csdn.net/nzzynl95_/article/details/107684578

相关标签: 笔试 java