自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(436)
  • 资源 (2)
  • 收藏
  • 关注

原创 过度绘制和渲染

UI 优化究竟指的是什么呢?我认为所谓的 UI 优化,应该包含两个方面:一个是效率的提升,我们可以非常高效地把 UI 的设计图转化成应用界面,并且保证 UI 界面在不同尺寸和分辨率的手机上都是一致的;另一个是性能的提升,在正确实现复杂、炫酷的 UI 设计的同时,需要保证用户有流畅的体验。UI 渲染的背景知识究竟什么是 UI 渲染呢?Android 的图形渲染框架十分复杂,不同版本的差异也比较大。但是无论怎么样,它们都是为了将我们代码中的 View 或者元素显示到屏幕中。而屏幕作为直接面对用户的手机硬件,

2021-10-07 13:44:07 2589

原创 Android中WebView与Js的交互

1. Android中通过WebView调用JS方法(传递参数)2、Js调用Android的方法3、【实现效果】1、App页面app调用js中showDemo(str)方法存在两种方式:[1] 利用webview直接去执行js代码2、demo.html1、点击app中的按钮,调取js代码,并将返回结果显示在对应的控件中2、web中点击按钮,去调用Andriod中的方法。3、适配问题。【2】js中调用app代码_广播+@J...

2021-09-25 12:59:59 4018

原创 Fragment详解

Fragment有自己的生命周期; Fragment依赖于Activity; Fragment通过getActivity()可以获取所在的Activity;Activity通过FragmentManager的findFragmentById()或findFragmentByTag()获取Fragment; Fragment和Activity是多对多的关系。(1)fragment_a.xml(2)AFragment.java(3)Activity_main.xm...

2021-09-21 23:10:51 294

原创 墙与门

题目描述你被给定一个m × n的二维网格 rooms ,网格中有以下三种可能的初始化值:-1表示墙或是障碍物 0表示一扇门 INF无限表示一个空的房间。然后,我们用231 - 1 = 2147483647代表INF。你可以认为通往门的距离总是小于2147483647的。你要给每个空房间位上填上该房间到最近门的距离,如果无法到达门,则填INF即可。示例一输入:rooms = [[2147483647,-1,0,2147483647],[2147483647...

2021-02-18 23:08:14 255

原创 为何说只有 1 种实现线程的方法?

实现线程的方式实现 Runnable 接口publicclassRunnableThreadimplementsRunnable{@Overridepublicvoidrun(){System.out.println('用实现Runnable接口实现线程');}}继承 Thread 类publicclassExtendsThreadextendsThread{@Overridepublic...

2021-02-16 18:00:44 154

原创 Netty服务器搭建

一、Netty服务器搭建步骤1) 构建一对主从线程池 2) 为服务器设置channel 3) 设置处理从线程池得助手类初始化起 4) 监听启动和关闭服务器设置Channel初始化器每一个Channel都是由多个handler共同组成的管道(pipeline),每个管道都类似于一个小助手,需要程序员初始化时自动设置,一个管道可以理解为一个大的拦截器,而里面的handler可以理解为一个小的拦截器。1. 定义服务启动类package org.wdzl;import io.netty

2021-02-10 23:53:59 1136 1

原创 字符串编码

题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。示例 1:输入:s = "3[a]2[bc]"输出:"aaabcbc"示例 ...

2021-02-06 12:55:51 565 1

原创 公私钥体系和网络安全:什么是中间人攻击

设想你和一个朋友签订了合同,双方各执一份。如果朋友恶意篡改了合同内容,比如替换了合同中的条款,最后大家闹到法院、各执一词。 这个时候就需要专业鉴定机构去帮你鉴定合同的真伪,朋友花越多心思去伪造合同,那么鉴定的成本就会越高。 在网络安全领域有个说法:没有办法杜绝网络犯罪,只能想办法提高网络犯罪的成本。 我们的目标是提高作案的成本,并不是杜绝这种现象。合同的类比尝试用签合同这种类比的方式来学习下面的内容。可以先思考:如果选择“网签”,是不是能让伪造的成本更高呢?比如,是否能够降低存储的成本呢? 如

2021-02-04 11:34:53 1160

原创 数据处理

在pg_single上震荡系数设置大一些 收敛更快一些 在ppo_single上震荡系数小 收敛更快一些 在ac_single在ppo_single的基础上更快收敛 收敛更快一些 如何对比呢?三张图单线程对比 单-多对比 多线程对比 对于时间1 11218 2 8225 3 19429 4 14719 5 12160 6 22315 ...

2021-01-24 21:53:05 117

原创 volatile 的作用是什么?与 synchronized 有什么异同?

volatile 是什么?首先我们就来介绍一下 volatile,它是 Java 中的一个关键字,是一种同步机制。当某个变量是共享变量,且这个变量是被 volatile 修饰的,那么在修改了这个变量的值之后,再读取该变量的值时,可以保证获取到的是修改后的最新的值,而不是过期的值。 相比于 synchronized 或者 Lock,volatile 是更轻量的,因为使用 volatile 不会发生上下文切换等开销很大的情况,不会让线程阻塞。但正是由于它的开销相对比较小,所以它的效果,也就是能力,相对也小

2021-01-24 14:18:45 421

原创 可见性问题

能够保证可见性的措施除了 volatile 关键字可以让变量保证可见性外 synchronized、Lock、并发集合等一系列工具都可以在一定程度上保证可见性synchronized 不仅保证了原子性,还保证了可见性关于 synchronized 这里有一个特别值得说的点,我们之前可能一致认为,使用了 synchronized 之后,它会设立一个临界区,这样在一个线程操作临界区内的数据的时候,另一个线程无法进来同时操作,所以保证了线程安全。 其实这是不全面的,这种说法没有考虑到可见性问题,完整

2021-01-24 14:11:22 363 1

原创 Java 中的原子操作有哪些注意事项?

什么是原子性和原子操作在编程中,具备原子性的操作被称为原子操作。原子操作是指一系列的操作,要么全部发生,要么全部不发生,不会出现执行一半就终止的情况。 比如转账行为就是一个原子操作,该过程包含扣除余额、银行系统生成转账记录、对方余额增加等一系列操作。 虽然整个过程包含多个操作,但由于这一系列操作被合并成一个原子操作,所以它们要么全部执行成功,要么全部不执行,不会出现执行一半的情况。 比如我的余额已经扣除,但是对方的余额却不增加,这种情况是不会出现的,所以说转账行为是具备原子性的。而具有原子性的原子

2021-01-24 14:01:52 239

原创 什么是指令重排序?为什么要重排序?

什么是重排序假设我们写了一个 Java 程序,包含一系列的语句,我们会默认期望这些语句的实际运行顺序和写的代码顺序一致。 但实际上,编译器、JVM 或者 CPU 都有可能出于优化等目的,对于实际指令执行的顺序进行调整,这就是重排序。重排序的好处:提高处理速度图中左侧是 3 行 Java 代码,右侧是这 3 行代码可能被转化成的指令。 可以看出 a = 100 对应的是 Load a、Set to 100、Store a,意味着从主存中读取 a 的值,然后把值设置为 100,并存储回去,同理

2021-01-24 13:55:51 6241 5

原创 什么是Java内存模型

容易混淆:JVM 内存结构VS Java 内存模型Java 作为一种面向对象的语言,有很多概念,从名称上看起来比较相似,比如 JVM 内存结构、Java 内存模型,这是两个截然不同的概念。JVM 内存结构和 Java 虚拟机的运行时区域有关; Java 内存模型和 Java 的并发编程有关。JVM 内存结构(就是堆、虚拟机栈、方法区、程序计数器、本地方法栈等几个类别)从 Java 代码到 CPU 指令看完了 JVM 内存结构,回到 Java 内存模型上来。编写的 Java 代码,最终还.

2021-01-23 17:39:33 210 3

原创 面向对象与面向过程的本质的区别

面向对象和面向过程面向过程分析出解决问题所需要的步骤,然后用函数调用把这些步骤一步一步实现。使用的时候一个一个依次调用即可。面向对象对现实世界的抽象,现实师姐存在的任何事务都可以称之为对象,有着自己独特的个性。 面向对象就是构成问题事务分解的各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事务在整个解决问题的步骤中的行为。可以拿生活中的实例来理解面向过程与面向对象例如五子棋面向过程的设计思路就是首先分析问题的步骤1、开始游戏, 2、黑子先走, 3、绘制画面, 4

2021-01-23 16:47:27 180 1

原创 2021-01-21

SpringApplication.run()方法里调用refreshContext()(刷新容器) 回去解释注解@SpringBootApplication通过配置文件等一系列的形式把该注入的bean都注入进来读配置文件 扫描注解并解释注解(启动类上的注解@SpringBootApplication)解释注解都是需要执行一定的方法的, 点进@SpringBootApplication去查看@ConditionalIbClass:当类路径下存在对应的类时会被引入(如果引入了就会有,.

2021-01-22 23:20:06 64

原创 大论文构思

在CloudSimPy-master中把pg算法的以时间为目标的实验做完

2021-01-21 20:20:26 145

原创 Comparable和Comparator的区别

最大的区别为:Comparable作用在内部,而Comparator作用在外部public class Student implements Comparable<Student>{public String name;public int age;public Student(String name, int age){ this.name = name; this.age = age;}@Overridepublic String toString()

2021-01-21 15:43:26 95 1

原创 20210121百度一面面经

Spring Boot和Spring MVC的区别?1、Spring的原理和组成Spring为简化我们的开发工作,封装了一系列的开箱即用的组件功能模块,包括:Spring JDBC 、Spring MVC 、Spring Security、 Spring AOP 、Spring ORM 、Spring Test等。2、SpringMVC的原理和组成从上图中可以看出:SpringMVC是属于SpringWeb里面的一个功能模块(SpringWebMVC)。 专门用来开发SpringWeb

2021-01-21 14:09:34 171

原创 丑数

题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。实现代码public class Solution { public int GetUglyNumber_Solution(int index) { if(index < 7){ return index; } int

2021-01-20 20:40:06 135

原创 MySQL 的优化方案有哪些?

性能优化(Optimize)指的是在保证系统正确性的前提下,能够更快速响应请求的一种手段。 而且有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并发请求之后,会导致严重的后果,轻则造成服务繁忙,重则导致应用不可用。它对我们来说就像一颗即将被引爆的定时炸弹一样,时刻威胁着我们。 因此在上线项目之前需要严格的把关,以确保 MySQL 能够以最优的状态进行运行。 同时,在实际工作中还有面试中关于 MySQL 优化的知识点,都是面试官考察的重点内容。典型回答MySQL 数据库常见的优化

2021-01-18 11:59:42 152

原创 Linux 的 I/O 模式:select/poll/epoll 有什么区别?

从网卡到操作系统为了弄清楚高并发网络场景是如何处理的,我们先来看一个最基本的内容:当数据到达网卡之后,操作系统会做哪些事情? 网络数据到达网卡之后,首先需要把数据拷贝到内存。 拷贝到内存的工作往往不需要消耗 CPU 资源,而是通过 DMA 模块直接进行内存映射。 之所以这样做,是因为网卡没有大量的内存空间,只能做简单的缓冲,所以必须赶紧将它们保存下来。 Linux 中用一个双向链表作为缓冲区,你可以观察下图中的 Buffer,看上去像一个有很多个凹槽的线性结构,每个凹槽(节点)可以存储一个封包,

2021-01-18 10:55:49 388

原创 模块四:进程和多线程: 练习题详解

请问这个程序执行后, 输出结果 Hello World 会被打印几次?fork() fork() fork() print("Hello World\n")fork 的含义是复制一份当前进程的全部状态第 1 个 fork 执行 1 次产生 1 个额外的进程。 第 2 个 fork,执行 2 次,产生 2 个额外的进程。第 3 个 fork 执行 4 次,产生 4 个额外的进程。 所以执行 print 的进程一共是 8 个如果考虑到 CPU 缓存的存在,会对上面我们讨论的算法有什么影响?

2021-01-16 18:59:03 207

原创 分析服务的特性:我的服务应该开多少个进程、多少个线程?

在平时工作中,你应该经常会遇到自己设计的服务即将上线,这就需要从整体评估各项指标,比如应该开多少个容器、需要多少 CPU 呢? 另一方面,应该开多少个线程、多少个进程呢?——如果结合服务特性、目标并发量、目标吞吐量、用户可以承受的延迟等分析,又应该如何调整各种参数? 资源分配多了,CPU、内存等资源会产生资源闲置浪费。 资源给少了,则服务不能正常工作,甚至雪崩,因此这里就产生了一个性价比问题。计算密集型和 I/O 密集型通常我们会遇到两种任务,一种是计算、一种是 I/O。计算密集型就是利

2021-01-15 12:26:02 865

原创 进程间通信: 进程间通信都有哪些方法?

在上一讲中,我们提到过,凡是面试官问“什么情况下”的时候,面试官实际想听的是你经过理解,整理得到的认知。回答应该是概括的、简要的。而不是真的去列举每一种 case。另外,面试官考察进程间通信,有一个非常重要的意义——进程间通信是架构复杂系统的基石。复杂系统往往是分成各种子系统、子模块、微服务等等,按照 Unix 的设计哲学,系统的每个部分应该是稳定、独立、简单有效,而且强大的。系统本身各个模块就像人的器官,可以协同工作。而这个协同的枢纽,就是我们今天的主题——进程间通信。什么是进程间通信?进程间

2021-01-15 11:29:24 433

原创 哲学家就餐问题:什么情况下会触发饥饿和死锁?

什么情况下会触发饥饿和死锁?读题可知,这道题目在提问“场景”,从表面来看,解题思路是列举几个例子。但是在回答这类面试题前你一定要想一想面试官在考察什么,往往在题目中看到“什么情况下”时,其实考察的是你总结和概括信息的能力。 关于上面这道题目,如果你只回答一个场景,而没有输出概括性的总结内容,就很容易被面试官认为对知识理解不到位,因而挂掉面试。 另外,提问死锁和饥饿还有一个更深层的意思,就是考察你在实战中对并发控制算法的理解,是否具备设计并发算法来解决死锁问题并且兼顾性能(并发量)的思维和能力。 要

2021-01-15 10:39:48 2703 1

原创 CoudSimPyEnergy代码解读

_sum_of_rewards(self, rewards_n)计算q_n1. reward_to_to = False直接利用折扣累积奖励回报值替代 梯度计算公式为2.reward_to_to = True_compute_advantage(self, q_n)根据q_n计算优势函数 adv_n: 二维数据,需要减去跨行的平均值axis=0, 对应多条轨迹的平均值estimate_return(self, rewards_n)返回q_n ,以及归一化后的...

2021-01-14 10:32:22 194

原创 线程的调度:线程调度都有哪些方法?

所谓调度,是一个制定计划的过程,放在线程调度背景下,就是操作系统如何决定未来执行哪些线程?就这道题目而言,可以抓两条主线第一条是形形色色调度场景怎么来的? 第二条是每个调度算法是如何工作的?先到先服务早期的操作系统是一个个处理作业(Job),比如很多保险业务,每处理一个称为一个作业(Job)。处理作业最容易想到的就是先到先服务(First Come First Service,FCFS),也就是先到的作业先被计算,后到的作业,排队进行。 这里需要用到一个叫作队列的数据结构,具有先入先出(F

2021-01-14 09:46:26 6309 1

原创 DoubleDQN

实现时,重写target的计算方法,注意张量的切片使用的是gather函数, 而不是迭代 # q_target = reward + gamma * max(q_next) with tf.variable_scope('dd_q_target'): a_ = tf.argmax(self.e_next, 1) # 注意切片函数 q_ = tf.gather(self.q_next, a_ , ax

2021-01-13 18:16:44 121

原创 锁、信号量和分布式锁:如何控制同一时间只有 2 个线程运行?

竞争条件竞争条件就是说多个线程对一个资源(内存地址)的读写存在竞争,在这种条件下,最后这个资源的值不可预测,而是取决于竞争时具体的执行顺序。 举个例子,比如两个线程并发执行i++。那么可以有下面这个操作顺序,假设执行前i=0:虽然上面的程序执行了两次i++,但最终i的值为 1。 i++这段程序访问了共享资源,也就是变量i,这种访问共享资源的程序片段我们称为临界区。在临界区,程序片段会访问共享资源,造成竞争条件,也就是共享资源的值最终取决于程序执行的时序,因此这个值不是确定的。解决竞争条.

2021-01-13 09:41:45 500

原创 进程和线程:进程的开销比线程大在了哪里?

进程和线程进程(Process),顾名思义就是正在执行的应用程序,是软件的执行副本。而线程是轻量级的进程, 进程是分配资源的基础单位 线程很长一段时间被称作轻量级进程(Light Weighted Process),是程序执行的基本单位。 在计算机刚刚诞生的年代,程序员拿着一个写好程序的闪存卡,插到机器里,然后电能推动芯片计算,芯片每次从闪存卡中读出一条指令,执行后接着读取下一条指令。闪存中的所有指令执行结束后,计算机就关机。一开始,这种单任务的模型,在那个时代叫作作业(Job),当时计算机的设计就

2021-01-12 10:07:32 2351 1

原创 Linux常见问题解答

搜索文件中所有以包含 std字符串且以.h扩展名结尾的文件sudo find / -name "*std*.h"sudo find / -iname "*std*.h" #忽略大小写sudo find / -name "*.h" |grep std请问下面这段 Shell 程序的作用是什么?mkfifo pipe1mkfifo pipe2echo -n run | cat - pipe1 > pipe2 &cat < pipe2 > pipe1

2021-01-12 09:19:19 193

原创 A2C和A3C

A2CAdvantage Actor-Critic是一个随机变量,在采样数据不非常充足的情况下,方差会很大,如何提高训练的稳定性呢?直接估算G的期望值, 让期望值去代替采样到的值。在Q-learning中有两种Critic用MC会更精确但TD会更稳定。上图在实做时需要训练两个网络Q和V, 更大可能性的引入估算的偏差, 如何转换为只估算一个网络呢?只需要估算一个V就可以,但坏处是会引入一定的随机性, 因为引入了.先用TD或者MC去估算, 再用去更新得到新...

2021-01-10 21:56:18 1626 1

原创 高级技巧之日志分析:利用 Linux 指令分析 Web 日志

著名的黑客、自由软件运动的先驱理查德.斯托曼说过,“编程不是科学,编程是手艺”。可见,要想真正搞好编程,除了学习理论知识,还需要在实际的工作场景中进行反复的锤炼。第一步:能不能这样做?当我们想要分析一个线上文件的时候,首先要思考,能不能这样做? 这里你可以先用htop指令看一下当前的负载。如果你的机器上没有htop,可以考虑用yum或者apt去安装。如上图所示,我的机器上 4个 CPU 都是 0 负载,15.5G的内存用了270M,还有富余。 我们用wget将目标文件下载到本地(如果你没有 .

2021-01-10 20:49:26 498 1

原创 软件的安装: 编译安装和包管理器安装有什么优势和劣势

在 Linux 上安装程序大概有 2 种思路直接编译源代码; 使用包管理器。包管理器使用Linux 下的应用程序多数以软件包的形式发布,用户拿到对应的包之后,使用包管理器进行安装, Linux 下两大主流的包管理器为rpm和dpkg。dpkg(debian package),是linux一个主流的社区分支开发出来的。社区就是开源社区,有很多世界顶级的程序员会在社区贡献代码,比如 github。一般衍生于debian的 Linux 版本都支持dpkg,比如ubuntu。 rpm(redhat

2021-01-10 18:00:28 2377 2

原创 Q-learning

一、Critic之Critic:不直接采取行为,而只是用来评判行为的好坏:在当前状态当应用动作,预期到回合结束的累积期望奖励和如何衡量呢? 两种方式1. Monte-Carlo蒙特卡洛方法让Critic观察策略玩游戏,是一个网络,训练过程是一个回归问题(希望)和越接近越好。2. TDBased方法在MC中要把整个回合结束、才能计算奖励总和,再估算,但在某些场景中,回合持续时间较长,需要消耗大量时间搜集资料。而在TD中,只要看到,就能进行学习。按照两值相减的值和..

2021-01-10 12:16:40 630

原创 PPO算法

在线学习和离线学习在线学习:和环境互动的Agent以及和要学习的Agent是同一个, 同一个Agent,一边和环境做互动,一边在学习。 离线学习:和环境互动及的Agent以和要学习的Agent不是同一个,学习的Agent通过看别人完来学习。利用新的参数去采样一次,然后更新多次。那么怎么做呢?利用重要性采样的方法。重要性采样表示从分布中采样数据,但如果我们无法从分布中采样数据,只能从另一个分布中采样。对期望值进行修正然后可以改成对分布中的取期望值。从分布中采样数据, .

2021-01-09 22:03:43 2610 2

原创 策略梯度算法原理

Policy Gradient策略根据在某个状态采取某种行为来决定能得到多少的奖励值。调整内部Actor的参数使得总奖励值R越大越好。但R是一个随机变量,转换为最大化期望值。策略梯度算法推导需要让Agent不断跟环境互动,搜集多条轨迹数据采样到的数据只有一次,具体的实现过程需要在后面乘以整场游戏的Reward。实际操作技巧之添加Baseline因为奖励可能总是正的。对于动作a, b,c而言,权重大的动作表明被其被采取的概率提升越大,在都提升的体情况下...

2021-01-09 20:20:33 922 1

原创 底层源码分析 Spring 的核心功能和执行流程

BeanDefinition对象在Spring容器中管理一个或多个Bean,这些Bean的定义表示为BeanDefinition对象,这些对象包含以下重要信息Bean的实际实现类 Bean的作用范围 Bean的引用或则依赖项Bean的注册方式1. XML配置文件注册方式<beanid="person"class="org.springframework.beans.Person"><propertyname="id"value="1"/>...

2021-01-07 17:13:26 99

原创 详解 ThreadPoolExecutor 的参数含义及源码执行流程

线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。 但如果要说线程池的话一定离不开 ThreadPoolExecutor ,在阿里巴巴的《Java 开发手册》中是这样规定线程池的: 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的读者更加明确线程池的运行规则,规避资源耗尽的风险。 说明

2021-01-06 11:24:56 468

generatorSqlmapCustom.rar

mybatis逆向工程生成Entity/Mapper/Mapper.xml;mybatis逆向工程生成Entity/Mapper/Mapper.xml;mybatis逆向工程生成Entity/Mapper/Mapper.xml;mybatis逆向工程生成Entity/Mapper/Mapper.xml;

2020-10-08

Tensorflow-物体检测-Faster-Rcnn解读

物体检测一些列模型视频讲解,tensorflow下的实现版本。

2018-12-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除