java,八股,cv,算法——双非研0四修之路day7
·
目录
昨日总结
- 初步了解AOP、Spring AOP、代理模式(完结),完成微信支付功能
- 背诵小林coding--Java集合面试篇(1/4)
- cv进度——配复现环境(坎坷版),看了一部分文献内容
- 代码随想录--移除链表元素
今日计划
- 理解一下注解的原理,加快苍穹项目进度
- 背诵小林coding--Java集合面试篇(2/3)
- 继续搞一搞环境,跟进文献
- 代码随想录——设计链表
算法——移除链表元素

注意区分一下带头结点和不带头结点的区别,下面我采用的是带头结点的代码。
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* LinkHead = (struct ListNode*)malloc(sizeof(struct ListNode));
LinkHead->next = head;
struct ListNode* node = LinkHead;
while(node->next != NULL){
if(node->next->val == val){
node->next = node->next->next;
}else{
node = node->next;
}
}
head = LinkHead->next;
return head;
}
Java的代理模式(完结)
代理模式是一种结构性设计模式,代理对象作为一个中间层,对真实对象的操作进行拦截或者增添额外的功能,提高系统间接性和灵活性。代理模式作为结构型设计模式之一,广泛应用于各种场景。其核心思想是通过引入代理对象,为目标对象的访问提供一种间接方式,这种间接性不仅提升了代码的扩展性和维护性,还为功能的增强和安全控制提供了便利。
三种代理模式
- 静态代理
在编译时就确定了代理类的结构,只能静态代理某些类和方法,功能较弱
定义一个接口——>被代理类和代理类继承公共接口——>生成代理对象,构造方法里初始化类型的对象,传给代理对象——>代理对象调用重写的方法
- Proxy动态代理(JDK动态代理)
JDK动态代理使用需要定义一个代理实例的调用拦截处理器InvocationHandler,反射执行目标方法,之前前后可以加入一些额外的代码实现增强。
在运行时动态生成代理类,动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。
- CGLIB动态代理(子类代理)
它是在内存中构建一个子类对象从而实现对目标对象功能的扩展.主要是对指定的类生成一个子类,覆盖其中的方法(继承)
Spring AOP(初步了解,没过深理解)
- SpringAOP不是一种新的AOP实现,其底层采用的是JDK/CGLIB动态代理。
- SpringAOP是对bean的一种扩展,是后处理器的一种处理。Spring bean在 执行初始化方法前后,会使用所有BeanPostProcessor对bean进行特殊处理。Aop代理即是一种对bean特殊处理。
- 对于这种功能统一,且使用地方较多的功能,可以考虑用 AOP 来处理(比如 用户登录验证)
- AOP由切面(由切点和通知组成)、连接带你、切点、通知组成。连接点是指出发AOP的点,切点是提供匹配连接点的规则,通知规定了AOP制定的方法和时间点。
- Spring切面类中常用的注解:前置通知 @Before,后置通知 @After,返回之后通知 @AfterReturning,抛异常后通知:@AfterThrowing
实现过程
- 利用拦截器和AOP匹配过滤器,生成Advisor
- 根据Advisor生成代理对象,会生成JdkDynamicAopProxy或CglibAopProxy
- 代理类执行代理时,从Advisor取出拦截器,生成MethodInvocation(连接点)并执行代理过程
昨日八股联想答案
- 有哪些集合,与数组的区别
区别:
- 数组是固定的,集合呃呃可以动态增长
- 数组可以包含基本数据类型和对象,集合只能包含对象
- 数组可以直接访问元素,集合都需要用迭代器访问
常用集合:
- ArrayList:基于动态数组实现,查询速度快,增删慢
- LinkedList:基于双向链表实现。
- Vector:线程安全的动态数组,与ArrayList类似,加了同步锁,适用于多线程环境
- HashSet:基于红黑树实现,元素会按照自然顺序或指定的比较器顺序排序。
- LinkedHashSet:继承自HashSet,同时使用链表维护元素的插入顺序
- HashMap:基于哈希表实现,不保证键值对的顺序。
- TreeMap:基于红黑树实现,键会按照自然顺序或指定的比较器顺序排序。
- 集合遍历的方法有哪些
普通for循环、增强for循环(for-each循环)、Iterator迭代器、Stream API
-
Arraylist和LinkedList的区别,哪个集合是线程安全的?
二者都不是线程安全的集合,Vector是线程安全的(后续详细了解一下)
区别:
- 结构:前者基于数组实现,后者基于链表
- 随机访问特性:前者支持索引随机访问,后者需要遍历
- 效率:后者插入和删除的效率比较高
- 分配的空间:前者创建时分配一段连续的内存空间,占用较大;后者只需要存储元素和指针,且非必须连续。
今日八股联想
-
HashMap实现原理
-
了解的哈希冲突解决方法
-
HashMap 的put和get过程
-
线程安全的 List, CopyonWriteArraylist是如何实现线程安全的
计算机视觉
文献内容
环境的配置
对于下载连接超时问题(情况如下),可以多次重新下载尝试一下
如果多次尝试还是不行,可以利用离线下载
下载离线包的网址https://pypi.org,直接检索需要功能包名称,如果直接找到自己想要的具体版本的功能包,在点击Download files,选择自己的需求即可。


将离线包下载到本地,完成离线包的安装
pip install path/tensorflow-1.14.0-cp36-cp36m-manylinux1_x86_64.whl
当发生版本问题时,一般是你初始设置的python版本过高,搜索不到对应库的版本,尝试降低一下创建虚拟环境时的python版本(不建议更改版本,直接重现建一个虚拟环境)

就当出现下面情况时,说明环境下载全部成功。
结果,进行评估测试时 ,又给我报缺失DLL文件,总而言之就是,下载的TensorFlow有问题。真搞不懂直接从终端窗口pip install默认PyPIPyPI · The Python Package Index 下载的,还给我报错。继续搞

总结

更多推荐
所有评论(0)