面试题之基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@T1、八种数据基本类型及其包装类OC
在这里插入图片描述

2、有了基本类型为什么还要有包装类型呢?
我们知道Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象
的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类
型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富
了基本类型的操作。
另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容
器都是装object的,所以就需要这些基本类型的包装类型了。
3、数据基本类型和包装类的区别:
声明方式不同:基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过
引用来使
用;
初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;
使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。
4、String类的常用方法?
length():求字符串的长度
indexOf():求某个字符在字符串中的位置
charAt():求一个字符串中某个位置的值
equals():比较两个字符串是否相同
replace():将字符串中的某些字符用别的字符替换掉。形如replace(“abc”,”ddd”);字符串中的abc
将会被ddd替换掉。
split():根据给定正则表达式的匹配拆分此字符串。形如 String s = “The time is going quickly!”;
str1=s.split(" ");
substring():输出一个新的字符串,它是此字符串中的子串,形如substring(3,7);它将字符串中
的第四个第五个第六个输出。
trim():将字符串开头的空白(空格)和尾部的空白去掉。
format():使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
toLowerCase():将字符串中所有的大写改变成小写
toUpperCase():将字符串中所有的小写改变为大写
5、String、StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
String类中使用final关键字修饰字符数组,private final char[] value,所以String类是不可变的。
StringBuffer和StringBuilder都是继承AbstractStringBuilder父类,从线程安全性上来说StringBuffer的
方法有同步锁,是线程安全的,StringBuilder不是线程安全的。
从性能上来说StringBuilder比StringBuffer更快点。
总结:少量数据用String,单线程下大量数据用Stringbuilder,多线程下大量数据用StringBuffer。
6、关于String的不可变性
一旦一个String对象在内存中创建, 它将不可改变, 所有String类中方法并不是改变String对象自己, 而是
重新创建一个新的String对象 。 *常量 : final String a = “abc”, 被final修饰, 那么a就是常量.
对于String a = “abc”, 我总在思考 a 到底是字符串常量还是变量 . 你说它是常量, 他却没有被final修饰,
如果说变量但是”abc”会被放在常量池中 .
最后别人一句话点醒了我, a 是变量, “abc”是常量 . 我以前老纠结在 a 上, 导致概念各种混乱 .
如果a要变成常量 , 需要被final修饰 , final String a = “abc” .
7、Object类的九个方法
在java里面所有的对象都会继承Object类 1. clone 方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用此方法,否则抛出
CloneNotSupportedException异常。
2. getClass方法
final方法,获得运行时的类型
3. toString方法
该方法使用的比较多,一般子类都有覆盖
4. finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用到。
5. equals方法
该方法是一个非常重要的方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般
都要重写这个方法。
6. hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode()方法。这个方法在一些具有哈希功
能的Collection中用到。
一般必须满足 obj1.equals(obj2)==true
可以推出 obj1.hashCode()==obj2.hashCode()
但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
7. wait方法
public static void main(String[] args) { String a = “hello”; String b = “hel” + “lo”; String c = “hel” + new String(“lo”); final String d = “lo”; String e = “lo”; String f = “hel” + d; String g = “hel” + e; System.out.println(a == b); // true b是常量相加 System.out.println(a == c); // false new String会重新新建对象 System.out.println(a == f); // true d是常量(被final修饰) System.out.println(a == g); // false e是变量不会编译期优化 }
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。
wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间
内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8.notify方法
该方法唤醒在该对象上等待的某个线程。
9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
8、深拷贝和浅拷贝
浅拷贝:
浅拷贝只是拷贝了引用,并没有拷贝内容。
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对
象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的
对象和它的副本之间共享。
深拷贝:
深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对
象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。
简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。
9、对称加密与非对称加密
对称加密:
对称加密就是数据发送方将明文也就是原始数据,和加密密钥一起经过加密算法处理后,使其变成复杂
的加密密文发送出去,收件方收到密文后,需要使用相同的密钥及相同的算法对密文进行解码,才能恢
复可读性。
例如:
加密后为:2021
密钥:1024
加密算法后:明文+密钥
通过这个加密算法就可以得出这个明文为996。
非对称加密:
假设现在甲方要发送消息给乙方,首先乙方会同时生成两把密钥:私钥和公钥,私钥自己保存,公钥可
以下发给信任的甲方,甲方通过公钥对信息进行加密,甲方加密的文件只有拥有私钥的人,也就是乙方
才能解密,只要保证私钥不泄露即可,安全性比较高。
10、Java如何在List或Map遍历过程中删除元素?
11、Iterator和ListIterator区别
我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(迭代器)。使用迭代
器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。但是在使用的
时候也是有不同的。List和Set都有Iterator()来取得其迭代器。对List来说,你也可以通过ListIterator()
取得其迭代器,两种迭代器在有些时候是不能通用的,Iterator和ListIterator主要区别在以下方面:
(1)ListIterator有add()方法,可以向List中添加对象,而Iterator不能
(2)ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有
hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
(3)ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此
功能。
(4)都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍
历,不能修改。
因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。其实,数组对象也可以用
迭代器来实现。
12、Java如何调用第三方接口?
13、wait()和sleep()的区别
wait:松开锁去睡,不会阻塞其他线程,Object提供的方法
sleep:握着锁去睡,会阻塞其他线程,Thread类提供的方法
14、如何遍历HashMap?
通过keyset
通过 Map.entrySet().iterator()
通过foreach ---- Map.entryset, 当hashmap很大时,推荐使用这种方式。
通过Valueset

前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值