栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浩鲸科技笔试总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浩鲸科技笔试总结

笔试总结

一、第一部分

关于html关于父类和子类的类型转换Linux 下的进程有哪三种状态: 第二部分

1、说一下主键和唯一索引区别2、synchronized 和Lock区别1)synchronized和lock的用法区别:2)synchronized和lock性能区别:3)synchronized和lock用途区别:3、java创建类的方式有哪些4、算法:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,求差值最小的一组 总结


一、第一部分 关于html

以下属于内联元素的是:在html中,span、a、label、input、 strong 和em就是典型的内联元素
定义:内联元素一般都是基于语义级的基本元素,它只能容纳文本或其他内联元素,主要特点是:和其他元素位于同一行上,高度、宽度和边距不可改变。 关于父类和子类的类型转换

父类变量向子类转换必须通过显式强制类型转换,采取和向上转换相同的直接赋值方式是不行的;并且,当把一个父类型变量实例转换为子类型变量时,必须确保该父类变量是子类的一个实例,从继承链的角度来理解这些原因:子类一定是父类的一个实例,然而父类却不一定是子类的实例。在进行父类向子类的转换时,一个好的习惯是通过instanceof运算符来判断父类变量是否是该子类的一个实例,否则在运行时会抛出运行异常ClassCastException,表示类转换异常。

   Fruit fruit1 = new Fruit();
   Apple apple1 = new Apple();
   apple1 = (Apple) fruit1;   // java.lang.ClassCastException

   Fruit fruit1 = new Apple();
   Apple apple1 = new Apple();
   fruit1 = apple1 ;

Linux 下的进程有哪三种状态:

为了便于管理进程,一般来说,按进程在执行过程中的不同情况至少要定义三种不同的进程状态:
(1)运行态(running):进程占有处理器正在运行。
(2)就绪态(ready):进程具备运行条件,等待系统分配处理器以便运行。
(3)等待态(wait):又称为阻塞态(blocked)或睡眠态(sleep),指进程不具备运行条件,正在等待某个事件的完成。


第二部分 1、说一下主键和唯一索引区别
    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。唯一性索引列允许空值,而主键列不允许为空值。主键列在创建时,已经默认为非空值 + 唯一索引了。主键可以被其他表引用为外键,而唯一索引不能。一个表最多只能创建一个主键,但可以创建多个唯一索引。主键和唯一索引都可以有多列。主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
    总体来说:主键相当于一本书的页码,索引相当于书的目录。 主键主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。
2、synchronized 和Lock区别

来源:lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;异常是否释放锁:synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包起来,finally中写入unlock,避免死锁的发生。)是否响应中断: lock等待锁过程中可以用interrupt来中断等待,而synchronized只能等待锁的释放,不能响应中断;是否知道获取锁: Lock可以通过trylock来知道有没有获取锁,而synchronized不能;Lock可以提高多个线程进行读操作的效率。(可以通过readwritelock实现读写分离)在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。synchronized使用Object对象本身的wait、notify、notifyAll调度机制,而Lock可以使用Condition进行线程之间的调度:

//Condition定义了等待/通知两种类型的方法
Lock lock=new ReentrantLock();
Condition condition=lock.newCondition();
...
condition.await();
...
condition.signal();
condition.signalAll();
1)synchronized和lock的用法区别:

synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。lock:一般使用ReentrantLock类做为锁。在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。 2)synchronized和lock性能区别:

synchronized是托管给JVM执行的, 而lock是java写的控制锁的代码。synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁。独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。而在CPU转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起CPU频繁的上下文切换导致效率很低。Lock用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作(Compare and Swap)。 3)synchronized和lock用途区别:

synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候:
1.某个线程在等待一个锁的控制权的这段时间需要中断
2.需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程
3.具有公平锁功能,每个到来的线程都将排队等候
先说第一种情况,ReentrantLock的lock机制有2种,忽略中断锁和响应中断锁,这给我们带来了很大的灵活性。比如:如果A、B 2个线程去竞争锁,A线程得到了锁,B线程等待,但是A线程这个时候实在有太多事情要处理,就是一直不返回,B线程可能就会等不及了,想中断自己,不再等待这个锁了,转而处理其他事情。这个时候ReentrantLock就提供了2种机制:可中断/可不中断
第一,B线程中断自己(或者别的线程中断它),但是ReentrantLock不去响应,继续让B线程等待,你再怎么中断,我全当耳边风(synchronized原语就是如此);
第二,B线程中断自己(或者别的线程中断它),ReentrantLock处理了这个中断,并且不再等待这个锁的到来,完全放弃。

3、java创建类的方式有哪些

new:new出一个对象。clone:深克隆、浅克隆
Java的所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone()。JDK API的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象返回的是一个新对象,而不是一个引用。二是拷贝对象与用 new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。newInstance:利用反射创建对象
(1)使用Class对象的newInstance()方法来创建该Class对象对应类的实例。但是这种方式要求该Class对象的对应类有默认的构造器,而执行newInstance()方法时实际上是利用默认构造器来创建该类的实例。
(2)先使用Class对象获取指定的Constructor对象,再调用Construtor对象的newInstance()方法来创建该Class对象对应类的实例。通过这种方式可以选择使用某个类的指定构造器来创建实例。
另外,如果我们不想利用默认构造器来创建java对象,而想利用指定的构造器来创建java对象,则需要利用Construtor对象,每个Construtor对应一个构造器,为了利用指定构造器来创建java对象,需要如下三个步骤:
(1)获取该Class对象;
(2)利用该Class对象的getConstrutor方法来获取指定的构造器;
(3)调用Construtor的newInstance方法来创建Java对象。反序列化

进行对象序列化主要目的是为了保存对象的状态(成员变量)。进行序列化主要用到的流是FileOutputStream和ObjectOutputStream。FileOutputStream主要用于连接磁盘文件,并把字节写出到该磁盘文件;ObjectOutputStream主要用于将对象写出为可转化为字节的数据。要将某类的对象序列化,则该类必须实现Serializable接口,该接口仅是一个标志,告诉JVM该类的对象可以被序列化。如果某类未实现Serializable接口,则该类对象不能实现序列化。保存状态的目的就是为了在未来的某个时候再恢复保存的内容,这可以通过反序列化来实现。对象的反序列化过程与序列化正好相反,主要用到的两个流是FileInputstream和ObjectInputStream。反序列化后得到的对象的顺序与保存时的顺序一致。 String s = “abc”
创建对象的五种方式 4、算法:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,求差值最小的一组

class Solution{
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		int target = input.nextInt();
		int mid = target / 2;
		int l = mid;
		int r = mid + 1;
		if(target % 2 == 0){
		//偶数的情况
			l = mid;
			r = mid;
		}else{
			l = mid;
			r = mid+1;
		}
		
		for(; l > 0, r < num; ++l, ++r){
			if(this.judgePrimeNum(l) && this.judgePrimeNum(r)){
				System.out.print("temp1:"+l+"n"+"temp2:"+r);
				break;
			}
		}
	} 
	boolean judgePrimeNum(int num){
		for(int i = 2; i < num; i++){
			if(num % i == 0){
				return false;
			}
		}
		return true;
	}

}

总结

以上就是今天的内容,本文仅仅总结了本次笔试的部分题目,并结合自己的答题情况进行总计记录。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749430.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号