首页 文章 精选 留言 我的

精选列表

搜索[数据库知识开放麦],共10027篇文章
优秀的个人博客,低调大师

JAVA知识

**classloaderJVM装载** 在说java的ClassLoader机制之前,我先了解下jvm的装载过程和其中的原理。装载就是寻找一个类或者一个接口的二进制形式并且用二进制形式构造代表这个类或者是这个接口的class对象的过程。 类的生命周期是从被加载到虚拟机内存中开始,到卸载出内存结束。 加载->验证->准备->解析->初始化->使用->卸载 在java中,类装载器把一个类装入java虚拟机中,要经过三个步骤完成:装载、链接和初始化 这是java的装载流程,后面要说下java中,类的表现形式。 在java中,一个类代表着这个类要执行的代码,但是这个类可以有对应的各种不同的实例,不同的实例就是通过类中数据的表示状态来区分。状态是动态的,但是代码则不会。当我们将一个特定的状态和一个类对应起来,也就是意味着将一个类实例化。尽管相同的类呢,对应的实例有各种各样不同的状态,但是其基本底层还都是同一份代码,只是其中的数据状态有不同。jvm一般只加载一次类,以后相同的类就不会再加载。 下面就讲下JVM是如何区分不同的类的: 在Java中,一个类用其完全匹配类名(fully qualified class name)作为标识,这里指的完全匹配类名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此,如果一个名为Pg的包中,有一个名为Cl的类,被类加载器KlassLoader的一个实例kl1加载,Cl的实例,即C1.class在JVM中表示为(Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg, kl2)是不同的,被它们所加载的类也因此完全不同,互不兼容的。 JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。JVM在运行时会产生三个ClassLoader:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader。Bootstrap是用C++编写的,我们在Java中看不到它,是null,是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent为Bootstrap ClassLoader。 package javatest; public class TestClassLoader{ public static void main(String[] args){ Class cl = null; ClassLoader cLoader; cLoader = ClassLoader.getSystemClassLoader(); System.out.println(cLoader); while(cLoader != null){ cLoader = cLoader.getParent(); System.out.println(cLoader); } try{ cl = Class.forName("java.lang.Object"); cLoader = cl.getClassLoader(); System.out.println("java.lang.Object loader is "+cl); cl = Class.forName("javatest.TestClassLoader"); cLoader = cl.getClassLoader(); System.out.println("LoadTest loader is "+cl); }catch(Exception e){ e.printStackTrace(); } } } output:sun.misc.Launcher$AppClassLoader@73d16e93// 系统的类装载器来自类sun.misc.Launcher$AppClassLoader@73d16e93的实例化,sun.misc.Launcher$ExtClassLoader@15db9742// 系统的类装载器的parent来自sun.misc.Launcher$ExtClassLoader@15db9742的实例化null//系统的类装载器的爷爷是由上面的Bootstrap ClassLoader实例而来,但是呢,这个Bootstrap ClassLoader是由C++实现的(嘿嘿嘿,混血儿),在java中是看不到滴。java.lang.Object loader is null//核心类都是由Bootstrap ClassLoader进行装载滴LoadTest loader is sun.misc.Launcher$AppClassLoader@73d16e93//用户自己的类都是由AppClassLoader进行加载滴。 那么问题来了,JAVA为啥需要这么多类加载器(当然是多层负责每层对应的类系统,而且多态这个磨人的妖精很是厉害,需要多层加载机制进行处理。–个人理解) 因为java是动态加载类的,这样的话,用到什么类就加载什么类,不用的就不加载(模仿Linux的内存管理机制!!!也让我想起了C++里面的内存申请,如果申请内存,先不分配实际物理内存,当需要访问的时候,再进行分配内存进行操作) 点击关注阿里云科技快讯,跟多精美礼品等你来拿! 参考:兔子哥哥

优秀的个人博客,低调大师

知识碎片

学习资料: https://openreview.net/forum?id=r1Ue8Hcxg&noteId=rJ0FDEw4x aussetg/nasnet.pytorch EN10/NASNet dhruvramani/Neural-Architecture-Search-with-RL nutszebra/neural_architecture_search_with_reinforcement_learning_appendix_a titu1994/Keras-NASNet 几个比较好用的机器学习 Python 库 1. PyTorch Facebook 的深度学习框架 PyTorch 是今年最受欢迎的库之一。 PyTorch 源于 Torch 框架,同时改善了 Torch 框架,而且 PyTorch 基于 Python 语言。过去的几年,人们一直用 Python 做数据科学的研究,PyTorch 的出现加快了深度学习的普及。 最值得注意的是,由于实现了动态计算图范式, PyTorch 已经成为众多研究人员的首选框架之一。当使用 TensorFlow、CNTK 或者 MXNet 等框架编写代码时,你必须首先定义一个称为计算图的东西。计算图制定了代码将要运行的所有操作,然后代码会被被编译并利用框架优化,以便在 GPU 上更快地并行运行。这个范式被称为静态计算图,它很棒,因为你可以利用各种优化,并且图形一旦构建完成就能运行在不同的设备上。然而,在诸如自然语言处理等任务中,「工作量」往往是可变的:将图像喂给算法之前,你可以把图像调整到固定的分辨率,但相同的操作不能适用于语句,因为句子的长度是变化的。这正是 PyTorch 和动态图的优势所在,让开发者在代码中使用标准的 Python 控制指令,图形在执行时被定义,给予开发者很大的自由,这对于多任务来讲是必不可少的。 当然,PyTorch 可以计算梯度(就像其他深度学习模型一样),而且非常快,可扩展性强,所以值得一试。 2.Caffe2 虽然听起来很不可思议,但今年 Facebook 发布了另一个伟大的深度学习框架 —— Caffe2。 原始的 Caffe 框架广泛使用了多年, 它凭借无与伦比的性能和经过测试的代码库而闻名。然而,近期深度学习的发展趋势让该框架在某些方面停滞不前。Caffe2 则是让 Caffe 跟上潮流的一次尝试。 Caffe2 支持分布式训练、部署(即使是在移动平台上),最新的 CPU 和支持 CUDA 的硬件。PyTorch 可能更适合做研究,而 Caffe2 更加适合大规模部署,就像在 Facebook 上看到的那样。 另外,你可以在 PyTorch 里构建并训练模型,同时用 Caffe2 部署!这不是很棒吗? 3.Pendulum Pendulum 的优势之一在于,它是 Python 标准 datetime 替代品,因此你可以轻松地将其与现有的代码集成,并且在你需要的时候才使用它的功能。Pendulum 的作者特别注意时间分区的处理,默认在每个实例中时间分区是可用的,并且以 UTC 计时。你也可以获得扩展 timedelta 来简化 datetime 的计算。 与其他库不同的是,Pendulum 努力让 API 具有可预测的行为,所以你该知道期望什么,如果你正在做与 datetime 相关的工作,那么 Pendulum 能让你工作得更加开心。详细信息请查看文档:https://pendulum.eustace.io/docs/ 4.Dash 如果你做与数据科学相关的工作,会使用到诸如 Pandas 和 scikit-learn 等 Python 生态系统中的工具,用 Jupyter Notebooks 管理工作流程。但是,你如何向那些不知道怎样使用这些工具的人分享你的工作呢?你该怎样构建一个交互界面,使人们可以轻松地处理数据,并让整个过程可视化?过去,你需要一个专业的 JavaScript 前端团队来构建这些 GUI。而现在,你不再需要了。 Dash 是一个可构建 Web 应用,尤其是数据可视化 Web 应用的纯 Python 开源库。它建立在 Flask、Plotly 和 React 之上,并提供这几个框架的函数抽象接口,从而开发者不必学习这些框架,高效开发。这些应用程序可在浏览器和移动设备中使用。 如果你想了解更多 Dash 的信息,请查阅: https://plot.ly/dash/ https://plot.ly/products/dash/ 5.PyFlux Python 中有许多库可用于做数据科学和机器学习,但当你的数据点是随着时间变化而变化时(例如股票数据),这就不一样了。 PyFlux 是专门针对时间序列开发的 Python 开源库。时间序列研究是统计学和经济学的子领域,其目的是用于描述时间序列的行为(in terms of latent components or features of interest),同时也预测时序未来的行为状态。 PyFlux 允许使用概率的方法对时间序列建模,并且实现了几个时间序列模型,如 GARCH。 6.Fire 在通常情况下,你需要为你的项目制作命令行界面。除了传统的 argparse,Python 还有一些很棒的工具,比如 Click 或者 docopt。谷歌今年宣布的 Fire 则采用了不同的方法来解决这个问题。 Fire 是一个开源库,可以为任何 Python 项目自动生成一个命令行界面。你几乎不需要编写任何代码或者文档,你只需要调用一个 Fire 方法并把它传递给你想要的命令行界面:一个函数、一个对象、一个类、一个库,甚至不传递任何参数(这会使你的整个代码进入命令行界面)。 请阅读指南来了解它的工作原理:https://github.com/google/python-fire/blob/master/docs/guide.md。 7.imbalanced-learn 在理想情况下,我们有完美平衡的数据集,然后非常顺利地训练模型。不幸的是,现实不是这样的,某些任务的数据集非常不平衡。例如,预测信用卡中的交易行为时,绝大多数(+99.9%)的交易是合法的。如果按照这样的方式训练算法,会得到很糟糕的结果,所以在使用这些类型的数据集时要非常小心。 幸运的是,这个问题已经被充分地研究,也存在着各种各样的技术来解决该问题。imbalanced-learn 是一个 Python 库,它提供了相关的技术来解决数据不平衡的问题。另外,它和 scikit-learn 兼容,并且是 scikit-learn-contrib 项目的一部分,非常有用。 8.FlashText 在数据清理工作中,你需要搜索文档并替换特定的内容,这通常用正则表达式完成。但有时候会出现这样的情况:你需要搜索成千上万的数据,然后采用正则表达式的方式会变得非常缓慢。 FlashText 是个更好的选择。作者在最初的基准测试中,FlashText 使整个操作的运行时间大大缩短:从 5 天降到 15 分钟。FlashText 的优点在于无论搜索条件有多少,运行时间都是一样的,而随着搜索条件的增加,正则表达式的运行时间几乎呈线性增长。 FlashText 证明了算法和数据结构设计的重要性,即使对于简单的问题,更好的算法也能够轻松超越在最快 CPU 上运行的朴素实现。 9. Luminoth 图像无处不在,理解其内容对于很多应用程序来说非常重要。庆幸的是,由于深度学习的进步,图像处理技术有了很大的进步。 Luminoth 是一个用 TensorFlow 和 Sonnet 构建的开源的计算机视觉 Python 工具包。它可直接支持物体检测,背后支持的模型是 Faster R-CNN。 但是,Luminoth 不仅能实现特定的模型,同时它还建立在模块化和可扩展基础之上,所以你可以直接定制它现有的部分,或者用新的模型扩展它,用于处理不同的问题,尽可能地重复利用代码。它提供了可轻松构建深度学习模型的工具:将数据转换为合适的格式反馈给各种流程中,例如用于增强数据、在一个或者多个 GPU (使用大型数据集时必须进行分布式训练)上训练、运行评估指标。 此外,Luminoth 直接与 Google Cloud 的机器学习引擎集成,即使你没有强大的 GPU,也能在云端训练。 10.PyVips 你可能从没听说过 libvips 库,它是一个图像处理库,和 Pillow 和 ImageMagick 一样,支持大量的格式。然而,和其他的库相比,libvips 更快且占用的内存更少。比如,一些基准测试显示,它比 ImageMagick 快了三倍,而 ImageMagick 占用的内存是 libvips 的十五倍。 PyVips 是最新发布的 libvips 的 Python 绑定包,它兼容 Python2.7 ~ 3.6(甚至是 PyPy),可以非常容易的用 pip 安装,并且和旧的绑定包兼容,你可以直接使用它,不需要改变任何代码。 如果你的应用程序需要处理图像,你可以留意一下 PyVips。 11.Requestium 有时候,你需要在 Web 中自动化某些操作。无论是抓取网站,做应用测试,还是填写网页表单以便在不暴露 API 的网站中执行操作,自动化都是必须的。Python 有很好的请求库,能够执行相关的工作。但不幸的是,许多网站用 JavaScript 构建了一个非常庞大的客户端,这意味着获取的HTML 代码没有表单本身,相反,它会在浏览器中用一个前端库(如 React 或者 Vue)生成。 解决这个问题的方法之一是,对 JavaScript 代码所做的请求进行反向工程,这意味着需要花费大量的时间来调试 JavaScript 代码。另一个方法是用 Selenium 这样的库,它可以让你以编程的形式与 Web 浏览器交互并运行 JavaScript 代码。 Requestium 可以让你从请求开始无缝切换到 Selenium,并且在需要的时候增加一个浏览器开销。它集成了 Parsel,因此它在编写用于在页面中查找元素的选择器时,要比其他方式更加简洁。 12.skorch skorch 是一个封装,它可以提供给 PyTorch 一个类似 sklearn 的编程界面。如果你熟悉这些库,这些语法应该简单易懂。通过 skorch,你会得到经过抽象的代码,所以你可以把精力花在真正重要的事情上,比如做数据科学研究。 探寻有趣之事!

优秀的个人博客,低调大师

GCC知识

像C语言这样的静态语言,运行的步骤是先将C经过编译器转化成汇编语言,汇编语言再经过汇编器转化成机器语言模块,然后链接器将程序的机器语言模块和库程序的机器语言模块和起来,生成可执行文件,最后再由加载器加载这个可执行文件,产生输入输出。 在这个环节中,gcc就是扮演着编译器的角色。gcc原本只能编译C语言,但是后来,经过扩展之后也能处理JAVA/OC等语言了。GCC现在已经成为类Unix操作系统的标准编译器了。所以在linux上源码编译软件前大都要先安装gcc。 gcc只是编译器吗? gcc可以完成从高级语言C变为和执行文件.out的过程。它默认也是有编译链接的功能。gcc有个参数-c 是来控制是否要链接成可执行文件。编译C之后会生成.o的目标文件,链接之后会生成.out的可执行文件。 gcc在这个过程中虽然只是完成编译工作,但是它会调用汇编器(as),链接器(ld)来完成整个代码编译解释过程。 GNU其他工具? gdb(GNU除错器)也是GNU工程开发出来的调试工具。能对GCC编译链接出来的可执行文件进行定点调试。 gprof(GNU测量器)是测试程序中函数的性能的工具。 g++(C++编译器)和gcc差不多,只是目标语言是c++。 参数 网上的gcc参数的例子很多,比如:http://www.shanghai.ws/gnu/gcc_1.htm。我们直接拿一个例子看一下 比如go/src/make.bash中有一个gcc生成dist的例子: gccmflag−O2−Wall−Werror−ggdb−ocmd/dist/dist−Icmd/dist"mflag−O2−Wall−Werror−ggdb−ocmd/dist/dist−Icmd/dist"DEFGOROOT" cmd/dist/*.c 将其中的参数按照上下文转换后如下: gcc -m64 -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist -DGOROOT_FINAL="$GOROOT_FINAL" cmd/dist/*.c gcc的参数很多,种类分为几种: 上图参考自http://www.shanghai.ws/gnu/gcc_1.htm 参考文章:http://tigcc.ticalc.org/doc/comopts.html -m64:配置相关选项,代表这个程序的宿主机器cpu架构是amd64 -O2: 优化选项,对程序进行O2级别的优化 -Wall: 警告选项,生成所有警告信息 -Werror: 警告选项,将所有warning当作error处理 -ggdb: 调试选项,编译过程生成调试信息,以便gdb进行调试。 -o: 总体选项,制定生成的可执行文件。如果不指定的话,就默认是xx.out -I: 目录选项,进行头文件查询的时候被指定的目录也需要进行搜索 -DGOROOT_FINAL="$GOROOT_FINAL" 这个是在预处理过程的时候设置GOROOT_FINAL 最后的cmd/dist/*.c就是源文件了,表示源文件是这个目录下的所有.c文件 本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/01/17/2863903.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

AngularJs 知识

简介 1.通过指令扩展了 HTML,通过表达式绑定数据到 HTML; 2.一个 Js 框架; 3.指令: 通过被称为指令的新属性来扩展 HTML, 即为应用添加新功能 ng-directives扩展了 HTML ng-app指令定义一个 AngularJS 应用程序 ng-model指令把元素值(比如输入域的值)绑定到应用程序,一个作用域的变量。 ng-bind指令把应用程序数据绑定到 HTML 视图 ng-init指令初始化 AngularJS 应用程序变量 4.表达式: 把数据绑定到 HTML 表达式写在双大括号内:` expression ` 表达式把数据绑定到 HTML,这与ng-bind指令有异曲同工之妙 5. 模块(Module)定义了 AngularJS 应用。 控制器(Controller)用于控制 AngularJS 应用。 ng-app指令定义了应用,ng-controller定义了控制器。 指令 1.前缀 ng-; 2.ng-app:初始化一个 AngularJS 应用程序; 3.ng-init:初始化变量。 4.ng-model指令把元素值(比如输入域的值)绑定到应用程序。 5.ng-repeat:表示重复输出. 6.创建自定义的指令 6.重复 HTML 元素 7.创建自定义的指令 作用域($scope) 1.应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带 2. 是一个对象,有可用的方法和属性 3. View(视图),即 HTML。 Model(模型),当前视图中可用的数据。 Controller(控制器),即 Js 函数,可以添加或修改属性。 scope 是模型。 scope 是一个 JavaScript 对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。 过滤器 1.过滤器可以使用一个管道字符(|)添加到表达式和指令中。 服务 1.在 AngularJS 中,服务是一个函数或对象,在你的 AngularJS 应用中使用。 2.$location服务,它可以返回当前页面的 URL 地址。 3.$http 服务,该服务向服务器发送请求,应用响应服务器传送过来的数据。 4.创建自定义服务 本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1928069,如需转载请自行联系原作者

优秀的个人博客,低调大师

全球最小 Linux 计算机问世:尺寸比护照还小、带屏带功能齐全

近日,一款尺寸小于美国护照照片的微型Linux计算机引发关注。据悉,该迷你计算机由YouTube上的知名博主Coding Scientist亲手打造,尺寸仅为40毫米×35毫米。 https://www.youtube.com/watch?v=RhVBFCY8_SA 据博主介绍,该迷你计算机运行Ubuntu 16.04.6 LTS操作系统,并搭载ARM Mali-400 MP2 GPU,支持人工智能、机器人技术及物联网开发。 该迷你计算机不仅配备IPS显示屏和麦克风,具备语音和声音应用功能;还内置MPU6050运动传感器,可检测运动与姿态。 在连接性方面,这款迷你计算机同样表现出色。它内置Wi-Fi和蓝牙功能,能够轻松连接网络和外部设备。 迷你计算机配备了4个物理按钮,分别用于启动、重置、恢复和自定义输入,为用户提供更加便捷的操作体验。同时,设备还提供了SPI、I2C、UART和GPIO等多种接口,方便用户根据需求进行扩展。 无论是开发者还是科技爱好者,都能在这款设备上找到属于自己的乐趣和惊喜。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册