首页 文章 精选 留言 我的

精选列表

搜索[知识资产沉淀],共10002篇文章
优秀的个人博客,低调大师

Spring小知识

两大核心功能:IOC、AOPIOC:动态注入,让一个对象的创建不用new了,可以自动的生产,实现原理利用java里的反射,反射就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。 AOP:面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。

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

node知识学习

一、什么是node? node是js的运行环境,可以让js脱离前端单独运行 二、node的特点 1、单线程 无论是多少事情,都是一个线程去完成 单线程的优点:没有了多线程创建线程和销毁线程的开销,调度多线程也是需要消耗资源的。多线程,有多少事情就有多少线程去完成。 单线程的特点:无法利用多核cup,一旦陈谷被恶意的行为挂起,那么整个程序崩溃。 2、非堵塞I/O,在i/o进行的时候,线程不等待。阻塞I/O: 在i/o进行的时候,线程等待。 I:input O:output 读取文件、连接数据库读取数据库、操作光盘驱动器等等都叫做I/O。它们比较起内存和cpu的运行速度来说,是特别慢的。也就是说如果线程让硬盘读取一个比较大的文件。并且等待读取完毕并交给内存之后再去做别的事情。那么也就是说线程在等待读取(I/O)完成 3 事件驱动 事件驱动与非阻塞I/O是连着的一个事情。非阻塞I/O确实可以让线程在I/O进行的时候去做其它的事情,但是有个问题。线程去做了其它的事情,万一这个时候I/O完成了呢?怎么知道I/O什么时候完成?I/O完成的时候会触发一个事件,这个事件驱动着线程回来继续做下面的事情。 三、模块 3.1 内置核心模块 ——http http模块是用来搭建服务器的。 IncomingMessage : request OutgoingMessage : response METHODS : 这是一个数组里面装着所有的http请求方式 STATUS_CODES :是一个对象,对象的每个key都是一个状态码,对象的value是该状态码的含义 Server :是一个方法,用于将其它的服务转化成http服务 createServer : 是一个方法,用于创建服务 3.2 文件系统——file system Fs模块是用来操作文件的。所有的相关操作都是fs的方法。 创建文件并追加内容 3.3 url模块 Parse方法:将一个url路径,转成一个对象,对象有各种属性对应的就是不同的部分。 http://www.icketang.com/html/shouye/index.html?username=wanglaowu&password=123#123 上面的url字符串经过url模块的parse方法处理完会转变成以下对象 { Protocol:http, Host:www.icketang.com, Hostname:www.icketang.com, Port:null, Pathname:html/shouye/index.html, Search:?username=wanglaowu&password=123, Query: username=wanglaowu&password=123, Hash:#123, Href:http://www.icketang.com/html/shouye/index.html?username=wanglaowu&password=123#123 } parse方法还有第二个参数,是一个布尔值。默认为false。 如果为true,那么将会把返回的对象中的query选项转为一个对象。 url.format(urlObj) format这个方法是将传入的url对象编程一个url字符串并返回参数:urlObj指一个url对象 url解析get方法 Url模块是专门处理前端提交过来的请求地址的。 如何处理get请求: 1判断请求的方式 处理 如何处理post请求: 1判断请求的方式 if(req.method===”post”){ //code... } 2给req绑定data事件 if(req.method===”post”){ var str=“”; req.on(“data”,function(data_chunk){ //这个事件是post每发送一次数据,就会触发一次,回调函数中的参数是data_chunk表示的是这一次所 传递的数据。 str += data_chunk; }) req.on(“end”,function(){ //这个事件是post发送数据完毕之后才最终触发一次。所以说先触发1次或者多次data事件,再触发1次end事件。后续代码要写在end事件中 }) } 3.4 文件上传 formidable 3.5 express Express是第三方模块,用来快速开发一个服务器。 express中间件 Express内置的唯一中间件就是静态资源中间件。 req是前端传递过来的请求。 Req.query表示的是get请求携带的数据 包含在路由每个查询字符串参数的属性的对象。如果没有查询字符串,它是空的对象,{}。 Req.params表示的是从pathname上获得的数据 包含映射到指定的路线“参数”属性的对象。例如,如果你有路线/user/:name,那么“名”属性可作为req.params.name。这个对象默认{}。 Req.body 表示的是post请求携带的数据 (必须得先应用中间件:body-parser); 包含请求主体提交的键值对。默认情况下它是undefined。除非你使用了body-parser 例如:app.use(body_parser.urlencoded({extended:false})); Body-parser中间件: Ejs模板 Express允许我们像使用php那样(或者说是underscore的模板)使用ejs模板。 Ejs模板必须是一个文件,文件的拓展名是ejs => index.ejs 内部的内容还是大体上是html只不过有一部分是<%=variable%>组成的。当渲染的时候,会从字典中与variable进行匹配。并替换。 Ejs模板不需要引入app.js主程序文件。但是必须要在express中声明,而且还要放到node_modules中,这样express就能够找到ejs模块了: app.set(“view engine”,”ejs”); App.set表示要设置什么东西,第一个参数就是要设置的内容。第二个参数是对第一个参数更详细的说明. 声明完了之后,就可以在某个路由的响应中使用res.render()进行渲染ejs模板了。 条件:第一个参数是要渲染的模板文件。(该文件必须要存在与主程序同级目录下的views文件夹中) 第二个参数是渲染该模板文件的字典。 4.自定义模块 在NodeJs中,每一个js文件天生就是一个模块。 每个模块都能够向外暴露一些东西。 核心模块暴露的内容是十分重要的,比如:http模块负责搭建服务器。Fs模块负责操作文件等 自定义模块,随便定义。 模块化开发有什么好处呢? 每个模块只负责提供功能。不会将变量注册到全局作用域下。 我们自己定义了一个js文件。可以通过require函数将它引入到其它的js文件中。 方法是: var app = require(“./app.js”); 此时,必须在同级目录下有app.js这个文件 另一个方法是:将app.js放在同级目录下的node_modules文件夹中(或者上级、上上级、一直到根目录) 此时可以这么写了: var app = require(“app.js”); 此时的查找顺序是只会查找node_modules。 向外暴露有三种方式:

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

Python知识梳理

这是个人学习笔记,非教程,内容会有些混乱 极简教程 数据类型 我们可以使用type()函数类获取对象的类型,Python3中内置数据类型包括:None,int,float,complex,str,list,dict,tuple,set,frozenset,range等,Python2中还有long类型,Python中并没有内置数组类型。 dict,list,set这些是可变类型(用户自定义类型也可变),可以改变类型对象的值;数值和字符串类型则是不可变的。 str与js一样,python中字符串即可用单引号也可用双引号表示 numbersPython3中数值类型有:int和float两种 list字面量表示:[1,1.0,False,'list'] 列表推导式,创建列表的一种简易方法: tuple字面量表示:(1,1.0,False,'tuple') range list、tuple、range均属于序列类型(Sequence Types) dict set/frozenset集合是不包含重复元素的数据集,frozenset是不可变的,set是可变的,可以使用字面量构建一个集合{1,2,2,4,5}会输出{1,2,4,5} 类型转换 Python中类型转换只需调用相关函数即可 函数 # 函数定义模板 def func_name([self,][args]): pass def say_hello(): print('hello python!') # python3.5之后,定义函数时可以添加类型说明 # 这里只是提供一个说明文档而非强制类型约束 def type_instruction(num:int)->int: return num 定义多返回值函数 # 多返回值函数,返回一个tuple对象 def multi_returns(): return 0,1 内置函数 Python中有许多内置函数: dir我们可以使用dir()函数来查看对象都含有哪些成员: map filter reduce不是内置函数,但也很有用 lambda Python中使用lambda关键字即可创建lambda表达式: *args 与 **kvargs *args和**kvargs都用于函数中接收多个参数,这里args和kvargs只是约定俗成的写法,可以换成其它的名称,但*和**则是必须的。*args和**kvargs的区别是,*args用于接受普通参数,**kvargs用于接受键值对参数。 三元运算符 面向对象 Python中一切皆对象(这句话理解起来并不是那么容易),包括函数(C#,JAVA中函数不能独立存在)。这里贴一篇以前写的文章:Python中的类、对象、继承 Python按引用传递对象,对于不可变对象在修改时会产生新的对象;而对于可变对象,所有的修改都会反映在原有对象上。 魔术方法是Python对象模型的重要部分。 可以动态的给对象/类型添加属性,若给类型添加属性,则该属性在已产生的实例上也是可见的: 异常与错误 Python中异常与错误类间关系如下:自定义异常只需继承Exception或各种Error类即可 异常处理 try: raise IOError('使用raise语句抛出异常') except IOError as err: print(err) else: print('未发生异常则执行') finally: pass 捕获多个异常类型: try: raise IOError() except (IOError,TypeError): pass with语句 with...as...语句等价于try...finally...,与C#中的using语句类似 命名规范 module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name. 应该避免的名称 单字符名称, 除了计数器和迭代器. 包/模块名中的连字符(-) 双下划线开头并结尾的名称(Python保留, 例如__init__) 命名约定 所谓”内部(Internal)”表示仅模块内可用, 或者, 在类内是保护或私有的. 用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含). 用双下划线(__)开头的实例变量或方法表示类内私有. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块. 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py). 尽管已经有很多现存的模块使用类似于CapWords.py这样的命名, 但现在已经不鼓励这样做, 因为如果模块名碰巧和类名一致, 这会让人困扰. Python之父Guido推荐的规范 Type Public Internal Modules lower_with_under _lower_with_under Packages lower_with_under Classes CapWords _CapWords Exceptions CapWords Functions lower_with_under() _lower_with_under() Global/Class Constants CAPS_WITH_UNDER _CAPS_WITH_UNDER Global/Class Variables lower_with_under _lower_with_under Instance Variables lower_with_under _lower_with_under (protected) or __lower_with_under (private) Method Names lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private) Function/Method Parameters lower_with_under Local Variables lower_with_under 包与模块 模块包含Python语句或定义的文件就是一个模块,文件名就是模块名。在一个模块中,模块名是全局变量__name__的值。 包包含__init__.py文件的文件夹即可视为一个包,包用于管理模块,可以防止模块命名冲突。如:A.C和B.C,分别表示A包中的C模块和B包中的C模块。 导入模块:import a、import a as alias、from a import *、from a import b,c Python解释器会先从内置模块中寻找导入的模块,然后从sys.path中指定的模块搜索路径寻找模块 测试 编写一个文件操作类,文件名为file_operator.py: # coding=utf-8 import codecs class FileOperator: def save_file(self, file_path, content, encoding="utf-8"): with codecs.open(file_path, "w", encoding) as f: f.write(content) 编写测试用例,文件名为test_file_operator.py: # coding=utf-8 import unittest class TestFileOperator(unittest.TestCase): def test_save_file(self): content = "file content \r\n 文本内容" opt = file.FileOperator() opt.save_file("1.txt", content) if __name__ == "__main__": unittest.main() 工具推荐 iPython VS Code PyCharm 小结 以上是自己近期学习Python的一些总结,全文的主要关注点在Python语言本身。掌握以上内容后,便可以用Python写些脚本,辅以其他第三方包或框架就可以干更多更复杂的事了。如,爬虫、数据分析、后端开发以及现在比较热的人工智能(其实,我是不建议追热点的)。 用了一段时间的Python后,会觉着Python挺有意思的。 最后附上一张,个人总结的语言学习套路: 推荐阅读 人生苦短,为什么我要用Python?Python风格规范Python语言规范[[Python]内存管理](https://chenrudan.github.io/blog/2016/04/23/pythonmemorycontrol.html)Python进阶Python 入门指南Python 3.7.0 documentation

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

基础知识

1. # 这是单行注释 2. """ 这是多行注释 """ IPO input process output python提供了两套索引体系 第一种叫正向递增序号,从0开始,0是第一个元素 arr[0:10] 第二种叫反向递减序号,从-1开始,-1是倒数第一个元素,逐渐反向递减 arr[-5:-1] input()函数,从控制台读取一行,可带参数input("请输入:") 定义一个变量接收返回值 temp = input() print()函数,输出 eval() 评估函数 去掉参数最外侧引号并执行余下的函数 8. if TempStr[-1] in ['F', 'f']: C = (eval(TempStr[0:-1]) - 32) / 1.8 print("转换后的温度是{:.2f}C".format(C)) # {:.2f}是一个占位符, :.2f表示将结果保留两位小数 elif TempStr[-1] in ['C', 'c']: F = 1.8 * eval(TempStr[0:-1]) + 32 print("转换后的温度是{:.2f}F".format(F)) else: print("输入的格式错误") type(eval(N)) == int 判断是不是某种类型 arr[-1]表示取最后一个元素,arr[0,-1] 截取第一个到倒数第二个子串,不包含最后一个 arr[0,arr.len()]

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

android关键知识

1、handler 与Looper 与MessageQueue 、Message关系 handler:是处理主线程(ui线程)处理耗时操作的线程,通过post message到MessageQueue队列中。使用handler须要实现 handlerMessage方法,通过更新主线程ui Looper:每一个Looper相应一个MessageQueue,在handler之前Looper.prepare()会初始化looper和MessageQueue。最后Looper.loop方法会去循环分发message到指定的handler,改api方法中有一句msg.target.dispatchMessage(msg); 这就是looper和handler之间的调用 2、hander与 AsyncTask的优缺点 AsyncTask实现的原理和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步运行的程度(能够通过接口实现UI进度更新),最后反馈运行的结果给UI主线程. 使用的长处: 简单,快捷 过程可控 使用的缺点: 在使用多个异步操作和并须要进行Ui变更时,就变得复杂起来. Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)执行并生成Message-Looper获取Message并传递给HandlerHandler逐个获取Looper中的Message,并进行UI变更。 使用的长处: 结构清晰,功能定义明白 对于多个后台任务时。简单,清晰 使用的缺点: 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性) 3、android里面几种常见的存储方式 a、Content provider 1) ContentProvider为存储和读取数据提供了统一的接口 2) 使用ContentProvider,应用程序能够实现数据共享 3) android内置的很多数据都是使用ContentProvider形式,供开发人员调用的(如视频,音频。图片,通讯录等) 首先在Androidmanifest.xml中注冊provider权限,然后通过getContentResolver() 然后得到contentResolver()对象 能够对该应用进行类似数据库操作一样的增删改成,须要的參数是uri 和參数值,查询一般得到游标Cursor 通过遍历游标获取属性值 b、SharedPreferences 实际上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences经常使用来存储一些轻量级的数据. 通过getSharedPreferences()得到改SharedPreferences对象 然后得到edit对象用来put值到改对象中。最后须要edit.commit()来将改对象存储到文件里,最后是以文件形式保存在data/data的指定路径下 c、sqlite存储 SQLite是一种轻量级的小型数据库,尽管比較小,可是功能相对照较完好,一些常见的数据库基本功能也具有,在如今的嵌入式系统中使用该数据库的比較多。由于它占用系统资源非常少 须要继承SQLiteOpenHelper 然后helper.getWritableDatabase() 得到SQLiteDatabase 对象,该对象能够对数据进行增删改查操作,提供了key value形式的CURD方法 d、io流存储 e、webview网络存储 4。listview你是怎么优化的。 用viewHolder和convertview优化内存,降低view的实例化个数,当item1被滑出屏幕时。这时不须要创建新的item1的view实例,android里面提供了Recycler(重复循环器)构件,并且viewHolder是静态类,最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时又一次使用就可以。 4.1,listview图片载入优化 1.decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完毕decode。无需再使用java层的createBitmap,从而节省了java层的空间,而且设置图片的压缩比例,从而缩小内存使用 InputStream is = this.getResources().openRawResource(R.drawable.pic1);BitmapFactory.Options options=new BitmapFactory.Options();options.inJustDecodeBounds = false;options.inSampleSize = 10; //width。hight设为原来的十分一Bitmap btp =BitmapFactory.decodeStream(is,null,options);,2.回收图片缓存 if(!bmp.isRecycle() ){bmp.recycle() //回收图片所占的内存system.gc() //提醒系统及时回收} 5,view的刷新,之前说过 View 能够调用invalidate()和postInvalidate()这两个方法刷新 6,IPC及原理 7,Android多线程 8。Android为什么要设计4大组件,他们之间的联系。不设计行不行(主要是为了实现MVC模式。然而java中最难的模式也是这个,非常少有产品能将这个模式做得非常好【Technicolor的面试官问的这个】) 9,service的周期。activity的周期,谈下你对Android内部应用的了解,比方他做电话,以及联系人等等应用。框架层有非常多东西还是多看看。熟悉Android怎么做的,无论你做应用程开发还是应用框架层开发非常有优点。 版权声明:本文博客原创文章。博客,未经同意,不得转载。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4750555.html,如需转载请自行联系原作者

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

知识萃取规范指南-三层知识萃取-构建场景-概念-实体的知识元模型

很多长期写作的人都会遇到一个困境——翻看自己过去几年的文章,少则几十篇,多则数百篇,明明每一个字都是自己写的,每一篇文章都花过心思,但回过头来看,却很难说清楚自己到底积累了什么。更尴尬的是,遇到一个新问题时,隐约记得自己以前写过类似的话题,但翻半天找不到;找到了,又发现当时的写法和现在的理解已经对不上了。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册