Android校招复习全书(1)-j2se

2023-11-03

一、九种基本数据类型的大小,以及他们的封装类

关于JAVA基本数据类型

名称 解释 长度(位) 默认值 封装类
byte 字节 8 0 Byte
shot 短整型 16 0 Short
int 整型 32 0 Integer
long 长整型 64 0 Long
float 浮点型 32 0.0f Float
double 双精度 64 0.0d Double
char 字符型 16 ‘\u0000’ Character
boolean 布尔型 1 false Boolean
void

操作系统16位的时候,int 2字节,操作系统32位的时候,int 4字节,由于32位系统之前占主流地位,实际现在就算是64位系统,出于兼容性考虑,int也是4字节的。
Java的类型分成两种,一种是基本类型,一种是引用类型。两种的本质区别就是:基本类型是在堆栈处分配空间存“值”。但是引用类型,是在堆里面分配空间存“值”。Void是不能new出来,也就是不能在堆里面分配空间存对应的值。那就是一开始在堆栈处分配好空间了。所以,有些人将Void归成基本类型,也有道理。

二、Switch能否用string做参数?

  • JDK1.7之前不能用,JDK1.7后可以用。
  • switch后面的括号里面只能放int类型的值,但由于byte,short,char类型,它们会 自动 转换为int类型(精精度小的向大的转化),所以它们也支持。
  • 我们也可以用枚举类型实现switch可传入string参数。

三、equals与==的区别

前者比较值,后者比较在内存中地址的位置。
String比较特殊重写了equals方法

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

如果自定义的类重写了equals值,用于比较值相同,一定要重写hashcode方法,因为在HashSet/HashMap/HashTable进行查重比较的时候,用于hashcode

四、Object有哪些公用方法?

1.protected Object clone()创建并返回此对象的一个副本。
1)浅复制和深复制的概念
 浅复制:被复制的对象的所有变量都与原来的对象有相同的值,但是指向的引用的对象相同,即地址相同,操作一个对象,另一个也会改变。
 深复制:被复制的对象的所有变量都与原来的对象有相同的值,但是复制了引用的对象不相同,即地址不同,操作一个对象,另一个不会改变。
2)Java的clone()方法
package com.li;
public class Test4
{
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Student s1 = new Student("zhangsan", 12);
        Student s2 = (Student) s1.clone();
        s2.name="lisi";    
        s2.age=20;   
        System.out.println("name="+s1.name+","+"age="+s1.age);//   name=zhangsan,age=12
    }
}

class Student implements Cloneable
{
    String name;    
    int age;    
    Student(String name,int age)    
    {    
       this.name=name;    
       this.age=age;    
    }    

    @Override
    protected Object clone()
    {
        Object o = null;
        try
        {
            o = (Student)super.clone();
            return o;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return o;
    }
}

①为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。
②继承自java.lang.Object类的clone()方法是浅复制。以下代码可以证明之。

package com.li;

public class Test4
{
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Professor p = new Professor("jiaoshou",50);
        Student s1 = new Student("li", 20, p);
        Student s2 = (Student) s1.clone();
        s2.p.name = "jiaoshou2";
        s2.p.age = 55;
        //如果加了注释输出:name=jiaoshou2,age=55
        System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
        //如果不加注释输出:name=jiaoshou,age=50
    }
}

class Professor implements Cloneable
{
    String name;
    int age;
    public Professor(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    /*
    @Override
    protected Object clone()
    {
        Professor o = null;
        try
        {
            o = (Professor) super.clone();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return o;
    }*/
}

class Student implements Cloneable
{
    String name;
    int age;
    Professor p;
    public Student(String name, int age, Professor p)
    {
        this.name=name;    
        this.age=age;    
        this.p=p; 
    }

    @Override
    protected Object clone()
    {
        Student o = null;
        try
        {
            o = (Student) super.clone();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        /*o.p = (Professor) p.clone();*/
        return o;
    }
}
2. boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
3. protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

C++析构函数和Java的finalize()方法不一样。前者是在对象消亡时运行,如果是自己new,即在堆中申请的内存,需要自己手动delete,所以析构函数中经常做一些文件保存之类的收尾工作;后者在Java中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说filalize()可能永远不被执行,显然指望它做收尾工作是靠不住的,它最主要的用途是回收特殊渠道申请的内存。Java程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。但有一种JNI(Java Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。

4. Class getClass() 返回此 Object 的运行时类。
5. int hashCode() 返回该对象的哈希码值。
6. void notify() 唤醒在此对象监视器上等待的单个线程。
7. void notifyAll() 唤醒在此对象监视器上等待的所有线程。
8. String toString() 返回该对象的字符串表示。
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
9. void wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
10. void wait(long timeout) 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
11. void wait(long timeout, int nanos) 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
//以纳秒为单位进行精确控制
public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos > 0) {
            timeout++;
        }

        wait(timeout);
    }

五、Java的四种引用,强软弱虚,用到的场景。

1.强引用

以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强应用,那就类似必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,jvm宁愿跑出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

2.软引用(SoftReference)

如果一个对象具有软引用,类似与生活可有可无的生活用品。如果内存足,GC就不会回收,如果不足,GC就会回收。软引用可以用来实现内存敏感的高速缓存。软引用可以和一个引用队列联合使用,如果软引用所引用的对象被GC回收,JVM就会把这个软引用加入到与之关联的引用队列中。

3.弱引用(WeakReference)

如果一个对象具有软引用,类似与生活可有可无的生活用品。与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在GC线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存足够与否,都会回收它的内存。不过,由于GC是个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用可以和一个引用队列联合使用,如果弱引用所引用的对象被GC回收,JVM就会把这个弱引用加入到与之关联的引用队列中。

4.虚引用(PhantomReference)

如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。虚引用主要用来跟踪对象被垃圾回收的活动。虚引用与软引用以及弱引用的区别在于:虚引用必须和引用队列联合使用。当GC准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

package com.li;
import java.lang.ref.SoftReference;

//软引用实例代码
public class Test4
{
    public static void main(String[] args)
    {
        A a = new A();
        SoftReference<A> sr = new SoftReference<A>(a);
        a = null;
        if(sr != null)
        {    
            a = sr.get();
        }
        else
        {
            a = new A();
            sr = new SoftReference<A>(a);
        }
    }
}
class A{
    int[] a ;
    public A(){
        a = new int[100000000];
    }
}

六、Hashcode的作用。

  • hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
  • 如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
  • 如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
  • 两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。
  • 以下代码证明,先比较hash,如果hash相同比较equals。自己敲一遍,事半功倍。
package com.li;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class Test6
{
    public static void main(String[] args)
    {
        Test6 a = new Test6();
        a.SetI(1);
        Test6 b = new Test6();
        b.SetI(1);
        Set<Test6> set = new HashSet<Test6>();
        set.add(a);
        System.out.println("----------");
        set.add(b);
        System.out.println("----------");
        System.out.println(set.toString());//默认调用toString方法,toString()源码调用了hashCode()
        /*输出
        hashcode
        ----------
        hashcode
        equlas
        ----------
        hashcode
        [com.li.Test6@1]
        */
    }
    public int i;

    public int getI()
    {
        return i;
    } 
    public void SetI(int i)
    {
        this.i = i;
    }
    public int hashCode()
    {
        System.out.println("hashcode");
        return i%10;   
    }
    public boolean equals(Object object) {  
        System.out.println("equlas");
        if (object == null) {  
            return false;  
        }  
        if (object == this) {  
            return true;  
        }  
        if (!(object instanceof Test6)) {  
            return false;  
        }  
        Test6 other = (Test6) object;  
        if (other.getI() == this.getI()) {  
            return true;  
        }  
        return false;  
    }
}

七、ArrayList、LinkedList、Vector的区别。

1.ArrayList

以下代码来自1.8Jdk的ArrayList.java源码

    /**
     * Default initial capacity.
     * 默认数组初始容量大小为10
     */
    private static final int DEFAULT_CAPACITY = 10;

    /**
     * The size of the ArrayList (the number of elements it contains).
     * 数组里面实际元素的个数
     * @serial
     */
    private int size;

    /**
     * 最大容量
     * The maximum size of array to allocate.
     * Some VMs reserve some header words in an array.
     * Attempts to allocate larger arrays may result in
     * OutOfMemoryError: Requested array size exceeds VM limit
     */
    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

    /**
    * 记录操作次数,快速失败机制,在迭代器中使用,remove抛出异常
    */
    protected transient int modCount = 0;

    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!增加一个
        elementData[size++] = e;
        return true;
    }

    private void ensureCapacityInternal(int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }

        ensureExplicitCapacity(minCapacity);
    }

    private void ensureExplicitCapacity(int minCapacity) {
        modCount++;

        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }

    /**
    * 实现自增的核心代码,1.5倍递增
    */
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
2.Vector

以下代码来自1.8Jdk的Vector.java源码

    /**
    * 实现自增的核心代码,2.0倍递增
    */
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

    /**
    * 主要区别,使用了synchronized修饰,线程安全
    */
    public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }
3.LinkedList

以下代码来自1.8Jdk的LinkedList.java源码

    /**
    * 私有内部类。用于链表操作
    */
    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

总:
时间复杂度:ArrayList、Vector都为动态数组,LinkedList为链表。前者适合查找,后者适合修改删除。
空间复杂度:ArrayList开辟1.5倍、Vector开辟2.0倍,LinkedList每增加一个多一个内部类对象。前两者可以使用trimToSize()方法将多余的空间删除。
线程安全性:ArrayList、LinkedList不安全,但是可以自己实现线程安全。Vector线程安全。

八、String、StringBuffer与StringBuilder的区别。

String使用+""会创建一个新的对象,StringBuffer是线程安全的,使用append在一个对象进行修改,StringBuilder是1.5之后出现的,和StringBuffer基本一样,只是它不是线程安全的。

九、Map、Set、List、Queue、Stack的特点与用法。

十、HashMap和HashTable的区别。

  • 前者是线程非安全的,并能传递null作为键值对。内部维护了一个链表,通过数组和链表进行存储
  • 后者是线程安全的,不能传递null作为键值对。
  • 参考:http://www.importnew.com/7099.html

十一、HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

以下是Jdk1.8的HashMap.java源码

    /**默认大小16
     * The default initial capacity - MUST be a power of two.
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

    /**最大容量 <= 1<<30
     * The maximum capacity, used if a higher value is implicitly specified
     * by either of the constructors with arguments.
     * MUST be a power of two <= 1<<30.
     */
    static final int MAXIMUM_CAPACITY = 1 << 30;

    /**默认装载因子
     * The load factor used when none specified in constructor.
     */
    static final float DEFAULT_LOAD_FACTOR = 0.75f;

十二、 TreeMap、HashMap、LindedHashMap的区别。

十三、Collection包结构,与Collections的区别。

十四、try catch finally,try里有return,finally还执行么?

public class HelloJ {
    public static void  main(String[] args)
    {
        int i = g();
        System.out.println(i);
        /*输出
          ---
          1
        */
    }
    static int g(){
        int i = 0;
        try{
            return i++;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("---");
            return i++;
        }
    }
}

十五、Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。

参考:http://www.mamicode.com/info-detail-1091344.html
这里写图片描述

十六、Java面向对象的三个特征与含义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android校招复习全书(1)-j2se 的相关文章

  • 今天发现rabbitMQ消息堆积

    发现有三十多万的消息堆积在10的queue里没有被消费 记录一下查看问题的步骤 1 jps 找出程序的PID 2 jstack PID 查看线程dump 发现rabbitMQ的consumer worker线程block住了 Thread
  • Java操作Excel文件

    创建一个Excel文件 public static void creatExcelFile String filepath Workbook wb new XSSFWorkbook try FileOutputStream fileOut
  • Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream

    首先抛出一个问题 有了InputStream为什么还要有BufferedInputStream BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterO
  • JAVA: quakus程序运行

    mvnw compile quarkus dev
  • 动力节点老杜java基础视频笔记第一章 学前准备 (1)

    课堂截图 为什么使用截图工具 在听课的过程中 有的时候老师操作的比较快 通过截图的方式将老师的操作保存下来 以便后期的操作 另外截图之后的图片也可以用于笔记的记录 在笔记当中最好采用图文并茂的方式 这样更加利于知识的回顾 使用哪个截图工具
  • 接口如何实现多态

    抽象类是用来继承的 不能被实例化 抽象类里可以有成员变量 接口中没有 1 抽象类里的抽象方法 只有在子类实现了才能使用 2 抽象类里的普通方法 可被子类调用 3 接口里的方法 都被默认修饰为public abstract类型 4 接口里的变
  • JAVA中的while do-while循环以及for循环的深刻理解 入门 小白必看

    循环 循环 循环 循环的作用 提出问题为什么需要循环 解决问题循环的出现 while 前序 循环 while循环的语法与流程以及细节 do while 后序循环 do while循环的语法和流程 while和do while 之间的区别 f
  • Java中变量的作用域【Java基础】

    最近在看 Thinking in Java 想把Java基础再巩固一下 在博客上遇到的以前没注意到的知识点或者较难的知识点记录下来 与大家分享 Java中的基本类型变量的作用域为 int x 1 变量x的作用域只在大括号内 System o
  • MQ的基本原理是怎样的?MQ的优点有哪些?MQ的核心概念包括哪些?MQ的消息传递模式有哪些?

    1 MQ的基本原理是怎样的 MQ 消息队列 是一种面向消息的中间件 用于实现不同系统之间的异步通信 其基本原理如下 生产者 Producer 将消息发送到消息队列中 而不是直接发送给消费者 Consumer 消息队列将接收到的消息存储在内部
  • 各种注释总结

    jsp注释 html注释
  • [透彻]为什么要前后端分离?

    前后端分离的意义 前后端分离 已成为互联网项目开发的业界标准使用方式 前后端分离 会为以后的大型分布式架构 弹性计算架构 微服务架构打下坚实的基础 核心思想 前端页面调用后端的restuful api接口 并使用json数据进行交互 服务器
  • ubuntu 11配置hadoop

    最近没事 研究下ubuntu 配置hadoop ubuntu版本 64 bit 11 04 hadoop版本 hadoop1 2 1 一 在Ubuntu下创建hadoop用户组和用户 1 创建hadoop用户组 sudo addgroup
  • 重试机制的实现(4m,10m,10m,1h,2h,6h,15h)

    项目场景 由于我们现在所做的项目有有很多的外放接口供代理商调用 但是有些接口的响应并不是实时返回的 此时我们就需要使用回调接口的方式 将信息响应给代理商 在这期间可能会出网络不稳定等其他情况 导致回调接口调用失败 所以需要特定的回调重试机制
  • springboot跳转页面

    SpringBoot里面只有src目录 在src main resources下面有两个文件夹 static 和 templates springboot默认static中放静态页面 而templates中放动态页面 themleaf和fr
  • AQS底层原理

    1 AQS能干嘛 是什么 能干嘛 加锁就会有阻塞 有阻塞就需要排队 实现排队必然需要有某种形式的队列来进行管理 是什么 废话 抽象的队列同步器 翻译一下 AQS是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石 通过内置的
  • Java 泛型 T,E,K,V,?

    泛型带来的好处 在没有泛型的情况的下 通过对类型 Object 的引用来实现参数的 任意化 任意化 带来的缺点是要做显式的强制类型转换 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 对于强制类型转换错误的情况 编译器可能不提示
  • JAVA 8 新特性及使用

    1 前言 2019年9月19日java13已正式发布 感叹java社区强大 经久不衰 由于国内偏保守 新东西总要放一放 让其他人踩踩坑 等稳定了才会去用 并且企业目的还是赚钱 更不会因为一个新特性去重构代码 再开发一套程序出来 甚者国内大多
  • 将list集合的元素按照添加顺序的倒序进行排列取出

    将list集合的元素按照添加顺序的倒序进行排列取出 方法1 list add 0 object List
  • java连接oracle出现ORA-12505错误

    问题 sqlplus可以连接 但java连接报错 ORA 12505 ORA 12505 TNS listener does not currently know of SID given in connect descr 解析 原因 数据
  • java连接oracle出现ORA-12505错误

    问题 sqlplus可以连接 但java连接报错 ORA 12505 ORA 12505 TNS listener does not currently know of SID given in connect descr 解析 原因 数据

随机推荐

  • redis订阅发布模式、持久化、事务

    redis订阅发布模式 redis 可以做消息中间件 MQ message queue 通常通过订阅发布模式来实现 消息订阅发布模式 还可以基本数据类型Lists实现 点到点模式 可以使用lpush rpop 实现消息 先进先出 好处 异步
  • 【ES-Kibana】ElasticSearch-Kibana搭建手册

    ElasticSearch Kibana搭建手册 一 环境检查 1 1 服务器环境 1 Java环境检查 执行命令 java version 2 安装Java 未安装jdk环境的需要如下操作 执行命令 更新本地仓库 sudo apt get
  • Java 获取linux根目录下的文件夹_Linux-包教包会系列

    前言 以前我的不喜欢用 Linux 系统 什么目录啊 文件啊 权限啊 都得命令操作 入门难度较大 但是一旦熟练起来 真不想再去用 windows 了 再加上 shell 脚本 那才叫如虎添翼啊 真的是见识到了什么才是性能 什么才是自动化 L
  • Ubuntu20-04下配置Nvidia显卡驱动-CUDA-CUDNN

    Ubuntu20 04下配置Nvidia显卡驱动 CUDA CUDNN 本文主要记录在Ubuntu20 04系统下配置显卡驱动以及配置CUDA CUDNN 1 配置介绍 CPU 11th Gen Intel Core i7 11700 GP
  • 数据分析之-特征构造

    数据分析机器学习中有句俗话 数据和特征决定了机器学习的上限 而模型和算法只是逼近这个上限而已 可见数据和特征的重要性 但实际项目中 数据源的质量和数量往往是不能改变的 但数据的特征却是数据分析师可以深入挖掘的 决定一个数据挖掘模型甚至项目的
  • 计蒜客T1612——蒜头君的数字游戏

    水题 太简单不解释 记得别把多余的0输入就行 由于没有明确的循环次数 本题用while循环更适合一些 include
  • Linux字符设备驱动入门

    文章目录 一 驱动模块的加载和卸载 二 字符设备注册与注销 三 实现设备的具体操作函数 四 添加 LICENSE 和作者信息 总结 设备树的使用 一 驱动模块的加载和卸载 module init xxx init 注册模块加载函数 modu
  • 利用Python+opencv+TensorFlow框架打造 一个试卷批改系统

    本文编程采用Python语言 结合opencv库对图像进行处理 再利用TensorFlow框架下卷积神经网络 实现一个初步的简易试卷批改系统 实现一个试卷批改系统 我将它主要分成俩个模块 第一个模块是图像识别 第二个模块是利用机器学习训练模
  • 2.mtcnn人脸检测

    mtcnn是构建图像金字塔来进行目标检测 gt gt gt gt gt 为什么只有按原图缩小 我觉得也可以搞按比例放大 将这些放大缩小图一起用网络来提取特征 会不会效果更好 1 网络结构 from tensorflow keras laye
  • python爬虫基础 --爬取股吧前十页数据

    新建文件夹 guba 爬取的十页数据会自动存到guba文件夹下 import requests import os for i in range 10 base url http guba eastmoney com default 99
  • Windows10 Docker安装详细教程

    Windows10 Docker安装详细教程 思维导航 前言 Docker Desktop是什么 Dokcer Desktop下载 启用Hyper V以在 Windows 10上创建虚拟机 安装Docker Desktop 配置阿里云镜像加
  • anaconda出现NotWritableError: The current user does not have write permissions to a required path.报错解决

    在安装pytorch时可能会出现NotWritableError The current user does not have write permissions to a required path path Users 的情况 其主要原
  • 关于select函数超时时间问题

    关于select函数超时时间问题 select函数使用 int select int n fd set readfds fd set writefds fd set exceptfds struct timeval timeout 具体参数
  • 【Git】MacOS 安装Beyond Compare插件和配置

    环境是已经安装了homebrew 打开终端 输入 brew install cask beyond compare 需要等一段时间 显示安装成功 之后要去修改 gitconfig 它本来是隐藏的 可以通过ll a发现隐藏文件 输入vi gi
  • 用心整理了6个用电脑就能做的兼职,让你在家增加收入

    在当今信息化的时代 通过电脑进行各种网上兼职已经成为了一种普遍的现象 在电脑上兼职工作 不仅可以帮助人们实现财务自由 而且还可以在家中轻松实现 下面就给大家分享6个在家就可实现的赚钱方法 让你利用业余时间挣取更多的收入 1 百度知道合伙人
  • python刷题第九周

    第一题 第6章 7 找出总分最高的学生 15 分 给定N个学生的基本信息 包括学号 由5个数字组成的字符串 姓名 长度小于10的不包含空白字符的非空字符串 和3门课程的成绩 0 100 区间内的整数 要求输出总分最高学生的姓名 学号和总分
  • 为什么C ++在嵌入式系统设计中是C的可行替代品

    你是一名 你知道C是适合该工作的语言 尽管有时维护周期可以重复很长时间 有时你会感到that琐 就像在编码自动机一样 反复在结构上创建基本迭代 这些结构与上周或上个月的结构非常相似 你已经听说过C 作为一种功能强大的语言的销售趋势 但是你也
  • 零基础大厂实习面经

    菜鸡的准备之路 3月开始准备找实习 现在4月一号 应该是能拿到阿里本地生活的Java研发岗offer 这些天来也算是辛苦了 为了后人能够好避坑 写下些许面经 接下来我将从数据结构与算法 语言基础 计算机网络 和操作系统四个主要方向讲起 基础
  • 【pytharm导入python移植环境遇见Invalid Python SDK问题】

    pytharm导入python移植环境遇见Invalid Python SDK问题 Invalid Python SDK 解决方法 Invalid Python SDK 在学习工作中 我们可能会遇到将自己的工作python环境移入到另一个位
  • Android校招复习全书(1)-j2se

    一 九种基本数据类型的大小 以及他们的封装类 关于JAVA基本数据类型 名称 解释 长度 位 默认值 封装类 byte 字节 8 0 Byte shot 短整型 16 0 Short int 整型 32 0 Integer long 长整型