源码

【VUE】Vue 源码解析

≡放荡痞女 提交于 2019-12-05 11:17:39
Vue 源码解析 Vue 的工作机制 在 new vue() 之后,Vue 会调用进行初始化,会初始化生命周期、事件、props、methods、data、computed和watch等。其中最重要的是通过 Object.defineProperty 设置 setter 和 getter ,用来实现 响应式 和 依赖收集 。 初始化之后,调用 $mount 挂载组件。 启动编译器 compile() ,对template进行扫描,parse、optimize、generate,在这个阶段会生成渲染函数或更新函数, render function ,生成虚拟节点数,将来我们改变的数据,并不是真的DOM操作,而是虚拟DOM上的数值。 在更新前,会做一个diff算法的比较,通过新值和老值的比较,计算出最小的DOM更新。执行到 patch() 来打补丁,做界面更新,目的是用JS计算的时间换DOM操作的时间。因为页面渲染很耗时间,所以vue的目的就是减少页面渲染的次数和数量。 render function 除了编译渲染函数以外,还做了一个依赖搜集(界面中做了很多绑定,如何知道和数据模型之间的关系)。当数据变化时,该去界面中更新哪个数据节点。通过观察者 watcher() 来调用更新函数 patch() 编译 编译模块分为三个阶段 parse 使用正则解析template中vue的指令变量等

Java-技术专区-技术栈分析辨证方法

僤鯓⒐⒋嵵緔 提交于 2019-12-05 11:12:20
1、好多公司动不动就JVM、高并发、分布式、微服务等等,我没有实际经验。 2、从事Java开发三年了,目前的职位是高级Java工程师,感觉技术和工资都到了瓶颈,对以后的发展方向有些迷茫。 3、加班时间过长,年龄大了,精力严重不够,竞争力远不如年轻程序员了。 4、Java工程师体量庞大,供大于需,导致Java程序员面临更加激烈的竞争。 5、目前做技术管理,薪资25K,但25K基本是天花板了,不甘心。   在我看来,开发三年甚至五六年以上的Java程序员要解决上面的问题无非就是两个层面: 1、技术经验   在技术经验方便,个人感觉你要想有所突破,首先就要形成一套技术体系,从技术的实现原理到技术应用,再到不同技术的优劣比较。因为当前各大公司使用的如火如荼的技术栈,无怪乎那些你已经曾经使用过的东西,只是你需要在这个基础上,让自己更有深度和见解。 2、业务需求能力   在业务需求能力方面,一个公司除了看重技术积累方面,另外还比较注重个人的业务理解和分析能力,如果你在某个领域的业务能力比较强,能够hold住当前的一个业务架构,这样说明你对业务的理解能力是非常到位的。所以在业务方便,首先需要的是结合场景的个人理解,其次是延伸扩展。   裁员并不可怕,没有技术实力才可怕,真正有实力的人不会被埋没。真正有实力的人才能走的更远飞的更高。当你具备这些能力时,你不用担心裁员而是应该考虑我要不要继续留在

Java自学指南六、查一手资料

折月煮酒 提交于 2019-12-05 10:59:06
编码过程中,我们会遇到各种问题。 借助搜索引擎,可以解决大部分问题,但总会遇到没法解决的坑,也许它会困扰几天或者更长时间。 要解决各种疑难杂症,成为高手,就要学会查一手资料。 什么是一手资料? 最直接的一手资料就是源代码,看懂了源码,一切问题迎刃而解 官方文档与译文(大部分官方文档都是英文的,需要我们培养良好的英文阅读能力) 优秀源码的注释也可能找到想要的答案 官方社区里的问题交流(关注官网与社区,能让我们保持对产品特性的把握和未来发展的一些预判,提高职业素养。遇到问题顺着思路就可以猜想到根源大概在哪) 优秀的源码的设计一般都很复杂,需要根据官方文档和一些专门的书籍,鸟瞰各功能模块的作用、设计思路和代码实现。 一开始读源码,都会云里雾里,但是坚持每梳理一遍,就会 "对为什么这样使用类库有更深刻地体会"。 掌握了优秀的源码的设计模式,能提高自己代码的质量和扩展性。 阅读源码要我们有一定的代码基础、对源码的设计思路有一定了解。Java 方面,可以了解一下 如何阅读JDK的源码? 如何用 IDE + maven 阅读框架和各种类库的源码? 搜索引擎,建议使用 google。 个人感觉,google 搜索引擎更懂编程人员,总体来看它提供的结果更精准,更接近我想要的。 附一些 Java 方面常用的官网: Java www.oracle.com/technetwork/java/index

Java自学指南六、查一手资料

南楼画角 提交于 2019-12-05 10:58:29
编码过程中,我们会遇到各种问题。 借助搜索引擎,可以解决大部分问题,但总会遇到没法解决的坑,也许它会困扰几天或者更长时间。 要解决各种疑难杂症,成为高手,就要学会查一手资料。 什么是一手资料? 最直接的一手资料就是源代码,看懂了源码,一切问题迎刃而解 官方文档与译文(大部分官方文档都是英文的,需要我们培养良好的英文阅读能力) 优秀源码的注释也可能找到想要的答案 官方社区里的问题交流(关注官网与社区,能让我们保持对产品特性的把握和未来发展的一些预判,提高职业素养。遇到问题顺着思路就可以猜想到根源大概在哪) 优秀的源码的设计一般都很复杂,需要根据官方文档和一些专门的书籍,鸟瞰各功能模块的作用、设计思路和代码实现。 一开始读源码,都会云里雾里,但是坚持每梳理一遍,就会 "对为什么这样使用类库有更深刻地体会"。 掌握了优秀的源码的设计模式,能提高自己代码的质量和扩展性。 阅读源码要我们有一定的代码基础、对源码的设计思路有一定了解。Java 方面,可以了解一下 如何阅读JDK的源码? 如何用 IDE + maven 阅读框架和各种类库的源码? 搜索引擎,建议使用 google。 个人感觉,google 搜索引擎更懂编程人员,总体来看它提供的结果更精准,更接近我想要的。 附一些 Java 方面常用的官网: Java www.oracle.com/technetwork/java/index

java源码 -- AbstractSet

匆匆过客 提交于 2019-12-05 10:57:04
AbstractSet抽象类属于Set集合分支的顶层类,它继承了AbstractCollection,实现了Set接口。   public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> 这个抽象类中没有定义抽象方法,有且只有3个方法(实现其父类的)。分别为equals、hashCode、removeAll。 1.删除指定集合的所有元素 public boolean removeAll(Collection<?> c) { Objects.requireNonNull(c); boolean modified = false; if (size() > c.size()) { //如果本集合个数 大于 指定集合c元素个数,则遍历集合c并删除现有集合相同元素 for (Iterator<?> i = c.iterator(); i.hasNext(); ) modified |= remove(i.next()); } else { //否则,如果本集合个数 小于 指定集合c元素个数,则遍历集合c并删除现有集合相同元素 for (Iterator<?> i = iterator(); i.hasNext(); ) { if (c.contains(i.next())) { i

linux源码包软件的安装与卸载

时间秒杀一切 提交于 2019-12-05 10:50:26
Linux软件安装与卸载(源码包形式):一般情况下linux程序的发布不能像windows那样,直接打包成一个setup.exe文件,然用户安装 时直接按下一步就完成了,因为它对库的依赖比较严重下面就来看下linux下软件源码包安装与卸载: Linux软件的源代码分发是指提供了该软件所有程序源代码的发布形式,需要用户自己编译成可执行的二进制代码并进行安装,其优点是配置灵活,可以随 意去掉或保留某些功能/模块,适应多种硬件/操作系统平台及编译环境,缺点是难度较大,一般不适合初学者使用。 1、*.src.rpm形式的源代码软件包 安装:rpm -rebuild *.src.rpm cd /usr/src/dist/RPMS rpm -ivh *.rpm 卸载:rpm -e packgename 说明:rpm --rebuild *.src.rpm命令将源代码编译并在/usr/src/dist/RPMS下生成二进制的rpm包,然后再安装该二进制包即可。packgename 如前所述。 2、*.tar.gz/*.tgz、*.bz2形式的源代码软件包 安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2 先解压 然后进入解压后的目录: ./configure 配置 make 编译 make install 安装 卸载:make uninstall 或 手动删除 说明

tensorflow DCGAN 源码中 conv_cond_concat函数

落爺英雄遲暮 提交于 2019-12-05 10:27:29
源码地址: https://github.com/carpedm20/DCGAN-tensorflow 今天看了源码中,再debug调试时看到了conv_cond_concat这个函数,第一反应就是应该与tf.concat有关系,看了源码确实是。 以下是函数定义: def conv_cond_concat(x, y): """Concatenate conditioning vector on feature map axis.""" x_shapes = x.get_shape() y_shapes = y.get_shape() return concat([ x, y*tf.ones([x_shapes[0], x_shapes[1], x_shapes[2], y_shapes[3]])], 3) 这里面有 y*tf.ones([x_shapes[0], x_shapes[1], x_shapes[2], y_shapes[3]])] 得注意一下,这个是tensorflow中的乘法表示,tf.ones是全1的矩阵。 这个单独测试一下,看效果比较直观: #!/usr/bin/env python #coding:utf8 import os,sys import numpy as np import tensorflow as tf y=tf.ones([1,1,3]) y

ctf笔记(i春秋) 19.10.21- 19.11.19.txt

有些话、适合烂在心里 提交于 2019-12-05 10:00:00
本次笔记以i春秋为主 登录 题目给出登录框和密码,采用万能密码注入,发现用户名可注入但密码段无法注入 根据报错提示,猜测可进行盲注 使用1' or database() regexp '^a'# 正则盲注发现可以 然后发现源码中username的class为user_n3me,猜测字段名就是user_n3me 进行盲注发现注出了帐号 同理,password的class为p3ss_w0rd,注出了密码md5,解码即可 登录,发现提示.bctfg1t login.php index.php,后两个php分别是登录页面和提示页面 访问.bctfg1t,发现403,g1t是git是1337语言写法,疑似git源码泄漏,访问/.bctfg1t/config成功 确定为git源码泄漏,直接上工具gitdumper 下载源码后,用git cat-file -p object文件目录 查看文件(注意,要把\去掉) 解析出一个php,内含一个网址,访问则得到flag 再见CMS 网站左上角爆出绝对路径,用扫描工具扫出后台,发现是齐博CMS,访问flag.php发现提示flag is here 猜测是通过sql注入用load_file读取flag.php 上网搜索发现了一个userinfo注入的漏洞 根据漏洞,先注册一个用户,并记下uid和email(这里简记为xxx) 构造一个post: url

python logging模块源码分析

三世轮回 提交于 2019-12-05 09:58:27
阅读目录 一、源码分析 二、流程图 源码分析 1 创建logger对象 logger = logging.getLogger(__name__) # 1.加载文件,创建以下单例对象 root = RootLogger(WARNING) Logger.root = root Logger.manager = Manager(Logger.root) _loggerClass = Logger # 2.getLogger() if name: return Logger.manager.getLogger(name) else: return root # 3.看一下getLogger()干了些什么 class Manager(object): def __init__(self, rootnode): """ Initialize the manager with the root node of the logger hierarchy. """ self.root = rootnode self.disable = 0 self.emittedNoHandlerWarning = False self.loggerDict = {} self.loggerClass = None self.logRecordFactory = None def getLogger(self,

面试官:来!聊聊线程池的实现原理以及使用时的问题

点点圈 提交于 2019-12-05 09:54:08
扫描下方二维码或者微信搜索公众号 菜鸟飞呀飞 ,即可关注微信公众号,阅读更多 Spring源码分析 和 Java并发编程 文章。 前言   无论是在工作中,还是在书本中,我们都可以听到或者看到关于线程在使用时的一些建议:不要在代码中自己直接创建线程,而是通过线程池的方式来使用线程。使用线程池的理由大致可以总结为以下几点。 1. 降低资源消耗。线程是操作系统十分宝贵的资源,当多个人同时开发一个项目时,在互不知情的情况下,都自己在代码中创建了线程,这样就会导致线程数过多,而且线程的创建和销毁,在操作系统层面,需要由 用户态切换到内核态 ,这是一个 费时费力 的过程。而使用线程池可以避免频繁的创建线程和销毁线程,线程池中线程可以重复使用。 2. 提高响应速度。当请求到达时,由于线程池中的线程已经创建好了,使用线程池,可以省去线程创建的这段时间。 3. 提高线程的可管理性。线程是稀缺资源,当创建过多的线程时,会造成系统性能的下降,而使用线程池,可以对线程进行统一分配、调优和监控。   线程池的使用十分简单,但是会用不代表用得好。在面试中,基本不会问线程池应该怎么用,而是问线程池在使用不当时会造成哪些问题,实际上就是考察线程池的实现原理。因此搞明白线程池的实现原理是很有必要的一件事,不仅仅对面试会有帮助,也会让我们在平时工作中避过好多坑。 实现原理   在线程池中存在几个概念:核心线程数