人工智能开发:(面完之后无结果)
(1)PYTHON 深拷贝和浅拷贝
浅拷贝: 拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用。
一个对象发生改变时不对原对象产生副作用。
浅拷贝的典型使用场景是:对象自身发生改变的同时需要保持对象中的值完全相同。
浅拷贝产生的新对象中若包含可变对象的值在发生改变时会对原对象的值产生副作用
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。
深拷贝产生的副本可以随意修改而不需要担心会引起原始值的改变
深拷贝缺陷:如果对象引用了自身,完全递归可能会导致无限循环。一个对象被拷贝了,python 会对该对象做个标记,如果还有其他需要拷贝的对象引用着该对象,它们的拷贝其实指向的是同一份拷贝
1,深浅拷贝都是对源对象的复制,占用不同的内存空间。
2,不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的。
3,可变类型:
= 浅拷贝: 值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相等
(2)PYTHON 多线程
Python实现多线程,有两个标准模块thread和threading,主要使用更高级的threading模块。
python使用map函数实现线程池。
全局解释锁使Python多线程并不是并行执行,而是并发执行,也就是说一个时间只有一个线程执行任务。但是在输入输出密集型任务中,如果某个任务阻塞在输入输出,那可以切换执行其他输入输出请求。而对于计算密集型任务,应当采用多进程。
(3)PYTHON的 is == 区别
python中使用id(身份标识)、type(数据类型)和value(值)来表示对象。
is比较对象身份标识是否相同
==比较对象值是否相同
在数值型和字符串型的情况下,a is b才为True,当a和b是元组类型,队列,字典或集合型时,a is b为False
(4)JAVA 多线程
继承Thread类,重写该类的run()方法
实现Runnable接口,并重写该接口的run()方法,该run()方法同样是线程执行体,创建Runnable实现类的实例,并以此实例作为Thread类的target来创建Thread对象,该Thread对象才是真正的线程对象。
使用Callable和Future接口创建线程。具体是创建Callable接口的实现类,并实现clall()方法。并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为Thread对象的target来创建线程。
通过线程池创建线程。
(5)JAVA equal ==区别
==:
如果是普通数据类型,比较值是否相同;如果是引用数据类型,比较对象地址是否一样。(同一个new出来的对象)
equals:
创建该目的,是让子类重写这个类。如果不重写,和==相同。
String重写了这个类:
对于普通数据类型,比较值是否相同。对于引用数据类型,先比较地址是否相同(是就返回true),然后比较是不是同一个数据类型(不是就返回false),再比较长度是否一致(不是就返回false),再比较值是否相同(不是就返回false)。
(6)负载均衡实现
http重定向实现负载均衡
dns负载均衡
反向代理负载均衡(最常用)