牛客网刷题(纯java题型 1~30题)

应该是先extend,然后implement

class test extends A implements B {
public static void main(String[] args) {
}
}
复制代码

java中四类八种基本数据类型
整数类型:byte,short,int,long
浮点类型: float,double
逻辑型: boolean
字符类型: char

  浏览器根据html中指定的编码格式对参数进行编码,Tomcat根据指定的格式对参数进行解码 ,所以getParameter得到的参数的编码是由客户端和web容器配置共同决定的

重载,指的是@overload
重写,指的是@override
重写override是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载overload,是用在同一函数体中,方法名称不变,方法签名改变

构造函数是不可以使用final修饰的,所以我觉得构造函数不可以是内联函数 (不知道这么说是否正确)

所谓的内联函数,就是函数在被调用的地方直接展开,编译器在调用的时候不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度,对应java语言中也有一个关键字final来知名那个函数式内联的.内联部已订好,当被指定为内联的方法体很大的时候,展开的开销可能就已经超过了普通函数调用的时间,引入内联反而降低了性能,因此在选择这个关键字的时候需要慎重,不过,在以后高版本的JVM中,在处理内敛的时候做出了优化,他会根据方法的规模来决定是否展开调用 构造函数可以是内联函数 构造函数可以设置默认的参数 构造函数在定义类对象的时候自动执行

FileInputStream,从文件中以字节流读取
FileReader,从文件中以字符流读取
FileWriter,向文件中,写入字符

接口中的变量,默认是public static final
接口中的方法,默认是public abstract

Collection类型的集合只能装入Object类型的数据,题中传入的是0,但是会自动装箱为Integer
JVM形成对象后会放入堆中,listlist1和listlist2都指向堆中的同一个对象
instanceof是用来判断对象的类型,也就是对象属于哪个类的实例,因为指向的是同一个对象,所以都为Integer对象,也就是都为true

Super super = new Sub(); // 向上转型不需要向值类型转换
Sub sub = (Sub)new Super(); // 向下转型必须要强制类型转换
这道题考察的是多态,对于多态,可以总结为:
1,父类引用指向子类对象
2,父类引用只能调用父类的field和method,不能调用子类的field和method,会报错
3,上面说只能调用父类中的field和method,如果子类中的method覆盖了父类中的method,那么使用父类的引用,调用的将是子类中重写的method,而不是父类中的method; 如果子类field与父类field重名,使用父类的引用,调用field的话,调用的是父类中的field的值
3,子类"覆盖"父类的变量不会报错

getDeclaredMethods():

Returns an array containing {@code Method} objects reflecting all the declared methods of the class or interface represented by this {@code Class} object, including public, protected, default (package) access, and private methods, but excluding inherited methods. 翻译:返回类的所有声明的方法,包括这个类/接口中的方法(public,private,protected,default),但是不包括这个类所继承的超类中的方法 getMethods():
Returns an array containing {@code Method} objects reflecting all the public methods of the class or interface represented by this {@code Class} object, including those declared by the class or interface and those inherited from superclasses and superinterfaces.
翻译:返回这个类/接口中的所有public方法,包括这个类/接口的超类/父接口中的public方法
同理: getDeclaredMethods() 和 getFields()

补充知识: public class ArrayList
extends AbstractList
implements List,
RandomAccess, 说明ArrayList支持随机访问
Cloneable, 说明ArrayList支持克隆
java.io.Serializable 说明ArrayList支持序列化

ArrayList的动态扩容机制:

ArrayList扩容机制总结:

如果是通过无参构造器ArrayList()构造,那么初始大小为0,然后,随着add元素,不断的扩容,新容量 = 旧容量的 * 1.5
例如: 先是size=0 的Arraylist,然后add,扩容为DEFAULT_SIZE = 10 ,然后添加第11个元素的时候,是扩容为15个,添加到16个元素的时候,扩容到22个

如果是通过ArrayList(initialSize),则会直接指定数组的大小,不需要扩容

ConcurrentHashMap使用segment来分段和管理锁 static class Segment extends ReentrantLock impliments Serializable{

}
public class ReentrantLock implements Lock,Serializable

interface Lock

public class HashMap
extends AbstractMap
implements Map,Cloneable,Serializable

public static List asList( T ... a) {
return new ArrayList(a);
}
private static class ArrayList{
//这个ArrayList为Arrays的内部类
}

SimpleDateFormat 是线程不安全的

使用JDBC的完整流程:
加载JDBC驱动程序
提供链接URL
创建数据库连接
创建一个Statement
执行SQL语句 处理
关闭JDBC连接

经过验证,以Stream结尾的都是字节流byte,以Reader,Writer结尾的都是字符流
需要注意的:
InputStreamReader:
An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified {@link java.nio.charset.Charset charset}. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
OutputStreamReader:
An OutputStreamWriter is a bridge from character streams to byte streams:Characters written to it are encoded into bytes using a specified {@link java.nio.charset.Charset charset}. OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

考察Statement与PreparedStatement的使用与区别:
interface Statement extends Wrapper,AutoCloseable
interface PreparedStatement extends Statement
Statement是一个接口,用于为一条SQL语句生成执行计划,如果需要执行10条SQL语句,则需要生成十次执行计划
PreparedStatement继承自Statement,具有Statement的全部功能,主要用来解决使用Statement多次执行同一SQL语句的效率问题,PreparedStatement使用的是数据库支持预编译的功能,预先将SQL语句进行编译,多次执行同一条SQL语句的时候,只需要将编译好的SQL语句直接执行就可以,提高了效率,同时可以防止SQL注入,提高了安全性
构造PreparedStatement的时候需要传入SQL语句,进行预编译,excute的时候,excute里面不传入SQL
构造Statement的时候不需要传入SQL语句,excute的时候需要传入SQL语句

Object 类中wait(),notify(),notifyAll()方法的区别:
1)wait() notify(), notifyAll() public final native void wait() throws InterruptedException ;
public final native void notify();
public final native void notifyAll();
都是native方法,都为final方法, 无法被override
2) 调用某个对象的wait()方法,能够让当前线程阻塞,前提是当前线程必须拥有此对象作为锁,而且obj.wait()方法必须位于synchronized(obj)中 3) 调用某个对象的notify()能够唤醒一个正在等待这个对象的线程,如果有多个县城都在等待此对象,则从中唤醒一个
4) 调用notifyAll()能够唤醒所有正在等待这个对象的monitor的线程
为什么这三个不是Thread中的方法,而是Object类中的方法?
当然由于Thread也是Object,所以Thread也可以调用此方法
原因: 由于每一个对象都可以拥有锁,所以让当前线程等待某个对象的锁,当然需要通过这个对象来操作了,而不是用当前线程来操作,因为当前线程可能会等待多个锁,如果通过线程来操作,就很复杂
上面已经提到,如果条用某个对象的wait()方法,当前线程必须拥有这个对象的锁,因此调用wait()方法必须在synchronized块或者synchronized方法中进行
调用某个对象的wait()方法,相当于让当前线程交出此对象的锁,然后进入等待状态,等待后续再次获得此对象的锁(Thread中的sleep方法使当前线程暂停一段时间,从而让其他线程有机会继续执行,但是在这期间sleep不是访对象锁)
notify()方法能够唤醒一个正在等待该对象的锁的线程,如果有多个线程,只能唤醒其中的一个,具体唤醒那个线程不确定
调用对象的notify()方法,当前线程也必须用用这个对象的synchronized,因此调用notify()方法必须在synchronized()中执行
Condition是在jdk 1.5中出现的,用来替代传统的Object的wait,notify()和notifyAll(),实现线程间的通信,使用Contion的await(),singal()这种方式来实现线程的协作更加安全和高效,阻塞队列使用的是Condition来模拟线程间的协作
Condition是一个接口
public interface Condition { await();
signal();
signalAll();
} Condition依赖于Lock接口,生成一个Condition的基本代码是lock.newCondition();
调用Condition的await()和signal()方法,必须都在lock.lock()的保护之内
wait()对应于await();
notify()对应于signal;
notifyAll()对应于signalAll();

ThreadLocal里面可以放一个值 ThreadLocal类用于创建一个线程本地变量
Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,他的键是threadLocal,值为变量的副本.通过ThreadLocal的get()方法可以获取到该线程变量对应的value

不论是静态内部类,还是非静态内部类,都是外部类的一个属性,所以,对于非静态内部类,需要使用InstanceObject().new InnerClass(),对于静态内部类,可以使用new OuterClass.staticInnerClass()的方式来进行创建
无论是静态内部类,还是非静态内部类,都需要使用OuterClass.innerClassName来进行引用

牛客网刷题(纯java题型 1~30题)的更多相关文章

  1. 牛客网刷题(纯java题型 31~60题)

    牛客网刷题(纯java题型 31~60题) 重写Override应该满足"三同一大一小"三同:方法名相同,参数列表相同,返回值相同或者子类的返回值是父类的子类(这一点是经过验证的) ...

  2. 牛客网 Wannafly挑战赛 C 列一列 简单题 (题目有点坑)

    链接:https://www.nowcoder.com/acm/contest/71/C来源:牛客网 题目描述 小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An.尽管他计算 ...

  3. 牛客网剑指offer java 全部题解

    经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...

  4. 牛客网练习赛34-D-little w and Exchange(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  5. 牛客网刷题总结—Day1

    1.关于哈夫曼树 哈夫曼树也称最优二叉树,其n个叶子节点都是带有权值的,其节点的带权路径长度(n个叶子节点的权值*其到根节点的路径之和)最小的二叉树即为哈夫曼树. 一般的哈夫曼树不存在度为1的节点(除 ...

  6. 牛客网2018暑期训练 第三场 a题

    #include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][m ...

  7. 牛客网在线判题系统JavaScript(V8)使用

    JavaScript作为一种弱类型的编程语言,语法和C/C++.JAVA等存在差别,但是对于大部算法题,不只是C/C++.JAVA,也依然可以使用JavaScript来实现.所以在牛客网中,如果你喜欢 ...

  8. 牛客网Java刷题知识点之为什么HashMap和HashSet区别

    不多说,直接上干货! HashMap  和  HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...

  9. 牛客网Java刷题知识点之为什么HashMap不支持线程的同步,不是线程安全的?如何实现HashMap的同步?

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

随机推荐

  1. 分页查询es时,返回的数据不是自己所期望的问题

    在进行es分页查询时,一般都是用sql语句转成es查询字符串,在项目中遇到过不少次返回的数据不是自己所期望的那样时,多半原因是自己的sql拼接的有问题. 解决办法:务必要保证自己的sql语句拼接正确.

  2. iOS-明杰解决字段冲突,及数组映射

    /** 替换关键字的属性名 */ + (NSDictionary *)mj_replacedKeyFromPropertyName{ return @{@"UUID":@" ...

  3. 简单名称值对节点类NameValuePair

    本类位于System.Data.dll中,名为:System.Data.Common.NameValuePair.主要用途是在DBConnectionString类中,解析ConnectionStri ...

  4. div、span绑定内容改变事件

    内容改变事件onchange只适用于form表单标签(input.select.textarea) 当需要对div.span标签进行内容改变监听则无法适用,查阅了一些资料发现jquery有针对的方法, ...

  5. bzoj1835[ZJOI2010]基站选址

    主席树+决策单调,重写一遍比之前短多了……题解:http://www.cnblogs.com/liu-runda/p/6051422.html #include<cstdio> #incl ...

  6. BZOJ4835 遗忘之树

    点分树上的某个点和其某个子树在原树中的连接方式一般来说可以是由该点连向子树内任意一点,这样方案数即为所有子树大小之积.但有一种特殊情况是连接某点后导致编号最小的重心更换,只要去掉这种就行了,具体地可以 ...

  7. Python面向对象—类的继承

    一个子类可以继承父类的所有属性,不管是父类的数据属性还是方法. class Father(object): num = 0 def __init__(self): print "I'm Pa ...

  8. Python虚拟环境virtualenv的使用

    virtualenv 是一个创建孤立的Python环境的工具.可以让你创建各自独立的.互不影响的Python开发环境. 使用pip安装即可 pip install virtualenv 查看是否安装成 ...

  9. What’s That NetScaler Reset Packet?

    What’s That NetScaler Reset Packet? https://www.citrix.com/blogs/2014/05/20/whats-that-netscaler-res ...

  10. Springboot2.x+shiro+redis(Lettuce)整合填坑

    主要记录关键和有坑的地方 前提: 1.SpringBoot+shiro已经集成完毕,如果没有集成,先查阅之前的Springboot2.0 集成shiro权限管理 2.redis已经安装完成 3.red ...