Java基础和Web基础

-----------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------------------------------------------
自我介绍:
1.学历专业,工作经验  TZ专科,TB本科
目的:和岗位的匹配度
自我介绍,表达优势,【90-120秒】
1.心态2.身体好,3.自律,4.执行力;
跨专业,为什么转行?职业规划,匹配度

经历介绍+技术介绍+求职意向+职业发展规划;
熟练,掌握,了解【技术介绍】
职业规划:近3个月熟悉公司项目和身边同事的相处,5个月,提升自己解决问题的能力,代理团队解决问题的能力;
跨专业:喜欢技术--性格安静;
书的影响,人的影响,

自我定位:
1.认知行业;
2.认知自我;

写自我介绍
---------------------------------------------
多线程
1.进程和线程的区别
进程:正在运行的应用程序
多线程出现的目的:提高程序的执行效率
多线程的应用:高并发[底层使用]
进程的特点:独立性,动态性,并发性
线程(thread):是操作系统能够进行运算调度的最小单位。它被包含在进程之中,一个进程包含多个线程
一个程序的运行后至少一个进程,一个进程里包含多个线程
单线程是有1个线程,多线程有>1的线程数
面试题:线程和进程的区别
多线程的特征:1.随机性[CPU调度]
面试题:
线程状态:
1.新建状态2.可运行状态3.运行状态4.阻塞状态5.终止状态
面试题:并发和并行
[并发是指多个资源抢占一个CPU-并发]
[并行是指每个资源分配一个CPU-不用抢--并行]
程序抢着CPU运行:并发——》【高并发】
程序不抢,多个CPU,同时执行程序:并行
实现多线程的方法
1.继承Thread.2.实现Runnable接口
面试题:run()和start()的区别?
run()只是一个普通的方法调用,没有多线程的随机效果
start()开启线程,找到线程里的run()开始执行


同步锁:用来解决多线程数据安全问题
同步:不抢了,排队,安全
锁:把有问题的资源加锁
synchronized 关键字 用在方法上,用在代码块上
异步:不排队,抢,不安全

线程池:存放就绪状态的线程,提高线程的高可用  
两个过程:取出去 + 还回池里
设计模式:
java 里有23个设计模式,就是一套代码经验的总结
单列模式:保证一个类仅有一个实例
优点:节省内存,节省时间
------饿汉式【实际使用】
1.私有化构造方法
2.创建本类对象,供本类调用
3.使用get()今天调用
4.给get()加入静态,方便类名调用
5.静态方法匹配静态属性值
6.在main()进行测试两个对象地址值,使用==
-----懒汉式【面试使用】
1.按需加载的思想;
2.多线程涉及安全问题,使用同步锁;
面试题:==和equals的区别:
==比较引用类型间的地址值,比较基本类型的值本身
 比较地址值使用==
 equals默认==比较,重写后比较属性值
 比较属性值使用equals


--------------------------------------------------
练习:获取字符串里的每个字符
1.1 使用getBytes()
1.2使用toCharArray()
1.3使用charAt()
练习:拼接字符串
1.1使用+拼接,注意使用变量保存拼接的值
1.2使用StringBuilder()/StringBuffer();
StringBuilder()/StringBuffer()底层是一个数组
都需要使用System.currentTimeMillis时间
Date() 时间的使用
toLocaleString() --String类型
SimpleDateFormat--用来把String类型转为日期 和Date类型互转 
模式:yyyy-MM-dd 
BigDecimal--专门解决小数运算不精确的问题
【1.new;2.使用方法】
1.BigDecimal(double val) 有坑
2.BigDecimal(String val)  使用
除不尽 1.要除谁,2.是小数位数,3.舍人模式
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)  
练习:double转字符串
方式1:
static String valueOf(double d) 【注:静态】
方式2:
a+"" [拼接]
BigInteger是什么?
基本类型转为包装类型:
1.创建对象[new] --低效
2.调用静态方法 --高效
创建对象的方式:1.new 2.静态方法[valueof()]
------------------------------------------------
IO:java程序操作文件系统里的资源【交互】
[I--in 输入-读取][O--out 输出--写出]
【I--磁盘读取到java程序的过程】
【0--java程序输出到磁盘的过程】
字节流【重点】可以读写任何单位的数据
目录:文件夹
File:
1.list() ---本质是String数组 
2.listFiles()---本质是二维数组
IOException【IO里最大的异常】
练习:打印文件夹的所有资源,打印文件名称,统计所有文件的大小
1.列出所有资源listFiles()
2.判断,资源是文件夹吗?--getName()
3.判断,资源是文件吗?Str
递归:方法里调用方法本身
好处:减少代码量 坏处:浪费内存
练习:递归求文件夹总大小
method(){
 1.列出文件夹里的所有资源listFiles()
 2.遍历获取每个资源
 3.判断,如果资源是文件,求大小length()
 4.判断,如果资源是文件夹
    //重复执行1234
}
java.lang.NullPointerException 
空指针异常:访问了没有权限的资源,进行遍历,没有资源,返回为Null
练习:递归删除文件夹的

读取流:in
字节流--【重点】--》读
InputStream  是父类【抽象类】,不能new
1.read(),读到没数据返回-1
2.read(),默认返回值为int,需求得到char类型:
【强转完成】
3.读取很多数据:
3.1定义变量;3.2使用while循环;3.3读到变量=-1
FileInputStream 是子类,研究new-- 低效-[普通流]
read时一个一个的读
BufferedInputStream 是子类,研究new
-----高效[高级流]
read时底层是一个8192字节[8k]的byte[] 数组
--------------------------------------------------
1.写出流:out
字节流--【重点】--》写
从java程序写出到磁盘中的过程
OutputStream 是父类【抽象类】,不能new
写出有两种模式:
1.在原来的基础上覆盖;
2.在原来的基础上增加;
写出步骤:
//1.创建多态对象
//2.调用方法写出
//3.关闭资源
3.FileOutputStream--低效 一个一个写出
FileOutputStream(String name)--会覆盖
-----------------------------------------用户画像
FileOutputStream(String name, boolean append) ---不覆盖
4.BufferedOutputStream--高效 8192个字节
--底层是一个byte[]数组,8k的容量
BufferedOutputStream(OutputStream out)会覆盖
//普通流,不关闭,也能写进去
//高级流,不关闭,写不进去
//两种流,flush()之后,都可以继续写
练习:文件复制  普通流和高级流的效率区别
批量读写
空指针异常的出现:
//原因:调用了null的方法,属性
解决方法:增加空指针判断

Eslipse
workspace
--project
   --package
      --class
--project
   --package
      --class
IDEA
Project
--Module
   --package
     --class
--Module
   --package
     --class

------------------------------------------------------
集合:
数组:
优点: 1.查询高效(有下标)
缺点:
1.类型单一;2.长度不可以更改;3.遍历方式单一
集合:
优点:可以解决数组的所有缺点
1.类型丰富[泛型解决];2.长度可以变;3遍历多种
缺点:后期使用有异常
泛型[Generics]:使用类型是引用类型
约束集合中元素的类型,通常配合集合一起使用
泛型声明位置:
1.类上 class Person<E>{}
2.方法上:public <E> void eat(E a){}
问题1:泛型明明约束的Integer,为什么类型也不报错?--完成了自动装箱
foreach循环: 格式 使用场景:数组|Collection集合
for(遍历得到的数据类型 变量名:要遍历的是啥)
{ 循环体}
戴耳机


Linkedlist实现类 底层是链表结构,适合增删业务
研究创建对象,
有序,可重复,可以存null,有下标
(双向链表)每个节点分3部分
底层:真的存的数据item
面试题:
ArrayList和LinkedList的区别:
1.都是Linkedlist继承的实现类
2.ArrayList-底层是数组,是连续的空间,适合查询业务【如果容量不够,会自动扩容1.5倍】
3.LinkedList-底层是链表结构,适合增删业务
ArrayList和LinkedList 对比增删改查
1.ArraryList底层是数组,有下标,查询较快,LinkedList查询稍慢
2.ArraryList和Linkedlist增加数据,无序增加的时候,ArrayList增加较快,主要原因,有下标,Linkedlist需要进行判断,速度稍慢,有序增加【指定下标-收尾元素】的时候,Linkedlist增加较快,链表特性,ArrayLits稍慢


ArraryList实现类
是Lits接口的实现类,拥有和List接口一样的特点
底层是数组
----------学习创建对象(构造方法)
面试题:ArrarList的本质【底层是Object数组】
1.1.6版本 创建对象时,底层会初始化一个数组,容量为10,数据多的时候[会自动扩容],扩容长度是以前的1.5倍,通过ArrayList,Copyof();
2.1.8版本 一开始是空数组,第一次添加数据,才开始扩容
数组适合查询,因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值