A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



文件过滤器:
        dir.list(过滤器);把符合条件的过滤出来。
写法:
        String[] arr = dir.list(new FilenameFilter() {
                       
                        @Override
                        public boolean accept(File dir, String name) {
                                //System.out.println(dir);
                                //System.out.println(name);
                                File file = new File(dir, name);
                                return file.isFile() && file.getName().endsWith(".jpg");
                        }
                });
File 类,是一个路径。这个路径可以表示文件或者文件夹。我们通过这个File类对这个路径进行判断或者获取相应的

信息
                 如果这个路径是一个文件,那么对文件的内部内容是不做任何操作的。       

按操作类型分为两种:
                                        * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是

以字节的形式存储的
                                                                * InputStream (抽象父类)
                                                                                       

FileInputStream  字节输入流
                                                                * OutputStream(抽象父类)
                                                                                       

FileOutputStream 字节输出流
                                        * 字符流 : 字符流只能操作纯字符数据,比较方便。
                                                                * Reader(抽象父类)

                                                                * Writer(抽象父类)

read()方法返回值为什么是int而不是byte?
                                        其实就是因为byte取值范围只有256种,太过于短小,读图片音频等文

件时读到1111 1111,就自动停止了。

小数组的读写和带Buffered的读取哪个更快?
        * 定义小数组如果是8192个字节大小和Buffered比较的话
        * 定义小数组会略胜一筹,因为读和写操作的是同一个数组
        * 而Buffered操作的是两个数组
flush和close方法的区别:
                flush()方法 //相当于office中的保存
                        用来刷新缓冲区的,刷新后可以再次写出
                close()方法        //相当于office中的保存并退出
                        用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再

关闭流之前刷新缓冲区,关闭后不能再写出
字节流读取中文的问题
        字节流在读中文的时候有可能会读到半个中文,造成乱码
字节流写出中文的问题
        字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组
        写出回车换行 write("\r\n".getBytes());

FileReader   字符输入流
        * 字符流是可以直接读写字符的IO流
        * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出

.
        * FileReader类的read()方法可以按照字符大小读取
        //按照相应的码表去读,如果遇到中文,就一次读一个字符。


不同的字符在不同的码表中所占的字节是不同的。
          ASCII码:
                  一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
                        一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进

制。最小值0,最大值255。如一个ASCII码就是一个字节。
          UTF-8编码:
                  一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
          Unicode编码:
                  一个英文等于两个字节,一个中文(含繁体)等于两个字节。
          符号:
                  英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“

。”占2个字节的大小。



什么情况下使用字符流:
                * 字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符

转回字节.
                * 程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流
                * 读取的时候是按照字符的大小读取的,不会出现半个中文,//遇到中文读一个字符,所以不会出现

半个中文
                * 写出的时候可以直接将字符串写出,不用转换为字节数组


字符流是否可以拷贝非纯文本的文件
                * 不可以拷贝非纯文本的文件
                * 因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出

的时候会将字符转换成字节写出去
                * 如果是?,直接写出,这样写出之后的文件就乱了,看不了了  
                //不是文字就不要用字符流
BufferedReader 和 BufferedWriter 的特有方法readLine()和newLine()方法:

LineNumberReader:
        BufferedReader的子类, 具有相同的功能, 并且可以统计行号。
        * setLineNumber(100)方法可以设置当前行号//行号从101开始计算
        * getLineNumber()方法可以获取当前行号

序列流:了解//读取多个文件,往同一个文件里写时使用
        把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续

读第二个, 以此类推
        //按顺序读取整合的字节输入流
内存输出流:掌握
        该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
        //不是读一个显示一个,要一下子全都显示出来的情况下使用。比如QQ聊天
        //把数据都先写到内存中,然后一下子全都显示出来
随机访问流概述和读写数据 了解
//用于多线程下载 raf.seek(0);                                        //在指定位置设置指针


ObjectOutputStream 对象操作流 了解
                //该流可以将一个对象写出,执行了序列化的操作.
*序列化:将对象写出到文件

ObjectInputStream 对象操作流 了解
                //该对象可以读取一个对象到程序中,执行了反序列化的操作。
*反序列化:将文件中的字节数据翻译成对象

打印流的概述和特点        掌握
                该流可以很方便的将对象的toString()结果输出, 并且自动加上换行, 而且可以使用自动刷出的模


                PrintStream//打印字节流
                PrintWriter//打印字符流


                System.out就是一个PrintStream, 其默认向控制台输出信息


标准输入输出流概述和输出语句
                * System.in是InputStream,        标准输入流, 默认可以从键盘输入读取字节数据
                * System.out是PrintStream,  标准输出流, 默认可以向Console中输出字符和字节数据
                //以上两个流,如果不关联文件就不需要关闭



JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。


多线程程序实现的方式




两种方式的区别:
                * a.继承Thread : 由于子类重写了Thread类的run(), 当调用start()时, 直接找子类的run()方


                * b.实现Runnable : 构造函数中传入了Runnable的引用, 成员变量记住了它, start()调用run

()方法时内部判断成员变量Runnable的引用是否为空,
                                                        不为空编译时看的是Runnable的run(),运行时执行

的是子类的run()方法


                * 继承Thread
                        * 好处是:可以直接使用Thread类中的方法,代码简单
                        * 弊端是:如果已经有了父类,就不能用这种方法
                * 实现Runnable接口
                        * 好处是:即使自己定义的线程类有了父类也没关系,因为有了父类也可以实现接口,而且

接口是可以多实现的
                        * 弊端是:不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方

法,代码复杂



获取名字和设置名字:
        设置名字的两种方式

setDaemon() 守护线程        不单独执行, 当其他非守护线程都执行结束后, 自动退出


        join()加入线程, 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续
        join(int), 可以等待指定的毫秒之后继续       




        yield   让出cpu                礼让线程//效果不明显,了解


        setPriority()设置线程的优先级//效果不明显,了解
        范围1-10;越大,执行的几率越多。也是几率问题,不能保证完全。也就是成功率99%也有可能爆掉装备。


同步代码块
        * 使用synchronized关键字加上一个锁对象来定义一段代码, 这就叫同步代码块
        * 多个同步代码块如果使用相同的锁对象, 那么他们就是同步的

        锁对象是任意的,但是不能是匿名对象。

同步方法
        使用synchronized关键字修饰一个方法, 该方法中所有的代码都是同步的
        使用继承Thread实现多线程时,如果使用类中的成员变量做为锁对象,那么该成员变量必须是静态的
        非静态的同步方法的锁对象是 this.
        静态的同步方法的锁对象是该类的字节码对象  xxxxx.class


//锁对象不能用匿名对象,因为匿名对象不是同一个对象


死锁:
        多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁
单例设计模式

饿汉式和懒汉式的区别
* 1,饿汉式是空间换时间,懒汉式是时间换空间
* 2,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象



两个线程间的通信
        等待唤醒机制
        wait();        当前线程等待
        this.notify();                        //随机唤醒单个等待的线程

//if语句是在哪里等待,就在哪里起来
//while循环是循环判断,每次都会判断标记


        notifyAll();//唤醒所有等待的线程


* 1,在同步代码块中,用哪个对象锁,就用哪个对象调用wait方法
* 2,为什么wait方法和notify方法定义在Object这类中?
*         因为锁对象可以是任意对象,Object是所有的类的基类,所以wait方法和notify方法需要定义在Object这个类


* 3,sleep方法和wait方法的区别?
* a,sleep方法必须传入参数,参数就是时间,时间到了自动醒来
*   wait方法可以传入参数也可以不传入参数,传入参数就是在参数的时间结束后等待,不传入参数就是直接等待
* b,sleep方法在同步函数或同步代码块中,不释放锁,睡着了也抱着锁睡
*         wait方法在同步函数或者同步代码块中,释放锁


线程的五种状态
                新建,就绪,运行,阻塞,死亡




网络编程,套接字编程,Socket编程

.网络编程的三要素?
        (1)IP地址        :每个设备在网络中的唯一标识
        (2)端口号        :每个程序在设备上的唯一标识,每个网络程序都需要绑定一个端口号 范围从0-65535,

1024以下的基本上都被系统程序占用了
                                 tomcat: 8080

        (3)协议                UDP        TCP

.UDP和TCP的区别?
        UDP:面向无连接,数据不安全,速度快。不区分客户端与服务端。
                把数据打包,数据有限制不超过64K,面向无连接,不安全,速度快
                举例:蓝牙,QQ单聊,打电话。

        TCP:面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
                三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据
                建立连接通道,无限制,面向连接,(三次握手),速度慢,安全
                举例:飞秋群聊,不保证消息一定收到
                发短信
掌握 Socket通信原理图解



这是我总结的面试题
回复 使用道具 举报
感谢分享!!!
回复 使用道具 举报
楼主厉害!
回复 使用道具 举报
编程题这么简单呢????????????
回复 使用道具 举报
感谢分享,不错
回复 使用道具 举报
有用 收了
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
超绝可爱曾小野 来自手机 中级黑马 2016-8-20 22:56:57
128#
多谢分享~
回复 使用道具 举报
楼主好人。。。
回复 使用道具 举报
老司机  怎么没看见呀
回复 使用道具 举报
明天就面试了   希望我能进入就业班  王子鹏 加油!
回复 使用道具 举报
支持    233333333333
回复 使用道具 举报
1234567
您需要登录后才可以回帖 登录 | 加入黑马