首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

前端学习笔记(2) - JavaScript面向对象

javaScript是不是面向对象语言? JavaScript(es6之前)有对象的概念,却没有类的概念,JavaScript对象可以任意添加属性,而java、c++等其他语言却不能。以至于有些人认为JavaScript并非是面向对象的语言,而是基于对象的语言。 实际上JavaScript无疑是面向对象的语言,只不多例如java、c++等语言才用的是“类”的方式来描述对象,这也是最为成功的描述对象方式。但是javaScript采用的较为冷的原型来描述对象的方式。但是由于某些原因JavaScript在原型运行时的基础上加入了例如new、this等语言特性使其看起来更像java。 基于原型的面向对象 “基于类”的编程提倡使用一个关注分类和类之间关系开发模型。在这类语言中,总是先有类,再从类去实例化一个对象。类与类之间又可能会形成继承、组合等关系。类又往往与语言的类型系统整合,形成一定编译时的能力。 “基于原型”的编程看起来更为提倡程序员去关注一系列对象实例的行为,而后才去关心如何将这些对象,划分到最近的使用方式相似的原型对象,而不是将它们分成类。基于原型的面向对象系统通过“复制”的方式来创建新对象。一些语言的实现中,还允许复制一个空对象。这实际上就是创建一个全新的对象。JavaScript的原型对象实现方式并不是真的去复制一个对象,而是使新对象持有一个原型对象的引用。 JavaScript的原型系统其实概括起来如下: 如果所有对象都有私有字段 [[prototype]],就是对象的原型; 读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。 这个模型在 ES 的各个历史版本中并没有很大改变,但从 ES6 以来,JavaScript 提供了一系列内置函数,以便更为直接地访问操纵原型。三个方法分别为: Object.create 根据指定的原型创建新对象,原型可以是 null; Object.getPrototypeOf 获得一个对象的原型; Object.setPrototypeOf 设置一个对象的原型。 基于类的面向对象 在es6的新语法中引入了class关键字,并从标准中删除了所有与[[class]]相关的私有属性,new与function的怪异搭配终于可以退休了。基于类的面向对象正式成为JavaScript官方的编程范式。(JavaScript中基于类的面向对象编程实际上是基于原型面向对象编程的语法糖) class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal { constructor(name) { super(name); // call the super class constructor and pass in the name parameter } speak() { console.log(this.name + ' barks.'); } } let d = new Dog('Mitzie'); d.speak(); // Mitzie barks.

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

链表学习--单链表-增删查实现

链表 在大多数情况下,我们将使用头结点(第一个结点)来表示整个列表。 如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。 我们按索引来访问元素平均要花费 O(N) 时间,其中 N 是链表的长度。 实现如下功能 : get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。 addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。 addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。 deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。 代码如下: 一、定义单链表的节点 package com.leetCode.study.Demo_2019_8_8_Linked; /** * 单链表的定义 * @author liudongting * @date 2019/8/8 10:45 */ public class SinglyListNode { //val 是当前节点的值 int val; //next 是指向下一个节点的指针/引用 SinglyListNode next; //带参构造函数 SinglyListNode(int x) { val = x; } } 二、链表 package com.leetCode.study.Demo_2019_8_8_Linked; /** * @author liudongting * @date 2019/8/8 10:56 */ public class List { static SinglyListNode head; /** * * addAtTail(val) * 将值为 val 的节点追加到链表的最后一个元素。 */ public void addAtTail(int val){ SinglyListNode singlyListNode = new SinglyListNode(val); //如果头节点为空,添加到头节点 if(head == null){ head = singlyListNode; return; } //从头节点开始 SinglyListNode temp = head; //从头节点开始判断,是否有下一个节点,找到最后一个节点 while (temp.next != null){ temp = temp.next; } //最后一个节点的指针指向新加入的节点 temp.next = singlyListNode; } /** * 获取链表中第 index 个节点的值。如果索引无效,则返回-1。 * @param index */ public int get(int index){ int length =0 ; //从头节点开始 SinglyListNode temp = head; //如果结点不为空,判断该节点的索引是否和要求的索引一致。相同则返回,不同继续; while (temp != null) { if(length==index){ return temp.val; } length++; temp = temp.next; } return -1; } /** * 在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。 * @param val */ public void addAtHead(int val){ SinglyListNode singlyListNode = new SinglyListNode(val); //如果头节点为空,添加到头节点 if(head == null){ head = singlyListNode; return; } //创建临时节点,保存头节点的值 SinglyListNode temp = head; //新节点的值,给头结点 head=singlyListNode; //新的头结点的下一个元素指向原来的头结点、 head.next = temp; } /** * 在链表中的第 index 个节点之前添加值为 val 的节点。 * 如果 index 等于链表的长度,则该节点将附加到链表的末尾。 * 如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。 * * */ public void addAtIndex(int index,int val){ if(index<0){ addAtHead(val); return; } if(linkListLength()==index){ addAtTail(val); return; } if(index>linkListLength()){ return; } SinglyListNode singlyListNode = new SinglyListNode(val); int length =0 ; //从头节点开始 SinglyListNode temp = head; //如果结点不为空,判断该节点的索引是否和要求的索引一致。相同则返回,不同继续; while (temp != null) { if((length+1)==index){ //index 前一个节点的指针指向的节点,即index处的节点 SinglyListNode preNode = temp.next; //index 前一个节点的指针 指向 新的节点 temp.next = singlyListNode; //新节点的下一个指针指向 index节点 singlyListNode.next= preNode; return; } length++; temp = temp.next; } } /** * 获取链表的长度 * @return */ public int linkListLength() { int length = 0; //临时节点,从首节点开始 SinglyListNode temp = head; // 找到尾节点 while (temp != null) { length++; temp = temp.next; } return length; } /** * 如果索引 index 有效,则删除链表中的第 index 个节点。 * @param index */ public void deleteAtIndex(int index){ int length = 0; //临时节点,从首节点开始 SinglyListNode temp = head; if(index==length){ head=head.next; } // 找到尾节点 while (temp != null) { if((index-1)==length){ SinglyListNode indexNode =temp.next; SinglyListNode nextNode = indexNode.next; temp.next = nextNode; return; } length++; temp = temp.next; } } public static void main(String[] args) { List list = new List(); // 添加元素 list.addAtTail(2); //在头结点添加元素 list.addAtHead(3); //在指定位置添加元素 list.addAtIndex(1,4); //根据索引删除元素 list.deleteAtIndex(2); //获取链表的长度 list.linkListLength(); System.out.println("222"); System.out.println(" 获取链表的长度 list.linkListLength() : " +list.linkListLength()); System.out.println(" 获取链表的某个元素 list.get(1) : " + list.get(2)); } } [github 获取更多源码] https://github.com/florarose/biji欢迎关注公众号,查看更多内容 :

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

Java学习:反射的应用,依赖加载

使用反射实现从配置文件加载类以及根据配置文件解决特定依赖关系。 配置文件reflect.properties: 1AdminDao=reflect.AdminDao 1GuestDao=reflect.GuestDao 1Manager=reflect.Manager 2Manager:AdminDao 2Manager:GuestDao 对应类文件AdminDao: package reflect; public class AdminDao { public AdminDao(){ System.out.println("成功实例化AdminDao"); } } 对应类文件GuestDao: package reflect; public class GuestDao { public GuestDao(){ System.out.println("成功实例化GuestDao"); } } 对应类文件Manager: package reflect; public class Manager { private AdminDao adminDao = null; private GuestDao guestDao = null; public Manager() { System.out.println("Manage实例化成功"); } public void setAdminDao (Object o) { this.adminDao = (AdminDao)o; System.out.println("解决adminDao依赖"); } public void setGuestDao (Object o) { this.guestDao = (GuestDao)o; System.out.println("解决guestDao依赖"); } } 反射测试工厂类: package reflect; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Set; public class ObjectFactory { public static Map<String,Object> map = new HashMap<String,Object>(); static { BufferedReader br = null; try { br = new BufferedReader(new FileReader("src/reflect.properties")); String str = br.readLine(); while(str != null) { char c = str.charAt(0); switch (c) { case '1': String[] arr = str.substring(1).split("="); Object o = Class.forName(arr[1]).newInstance(); map.put(arr[0].trim().toLowerCase(), o); break; case '2': String[] arr2 = str.substring(1).split(":"); Object obj = map.get(arr2[0].trim().toLowerCase()); Object fieldObj = map.get(arr2[1].trim().toLowerCase()); String methodName = "set"+arr2[1].substring(0, 1).toUpperCase()+arr2[1].substring(1); Method method = obj.getClass().getDeclaredMethod(methodName, Object.class); method.invoke(obj, fieldObj); break; } str = br.readLine(); } } catch (Exception e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { Set<String> set = map.keySet(); for (String string:set) { System.out.println(string+"--"+map.get(string)); } } } 跑起来结果: 成功实例化AdminDao 成功实例化GuestDao Manage实例化成功 解决adminDao依赖 解决guestDao依赖 admindao--reflect.AdminDao@10d1f30 manager--reflect.Manager@7aacc1 guestdao--reflect.GuestDao@1e3cabd

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

ElasticSearch学习笔记1-修改文档

本文中所有用[]括起来的和xxx都是变量 基本操作:1、根据id修改文档,使用POST请求 POST /[index]/[type]/[id]/_update { "doc": {"[XXX]":"[xxxxx]"} } 举例: 上面这个图片中index为test,type为doc,id为1,我们将里面的name改为“name03” age改为20,请求如下: POST /test/doc/_update { "doc": { "name": "name03", "age": 20 } } 返回结果为: { "_index": "test", "_type": "doc", "_id": "1", "_version": 13, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 13, "_primary_term": 1 } 对该id再进行一次查询,结果如图所示: 2、使用脚本修改 POST /[index]/[type]/[id]/_update { "script" : "ctx._source.[xxx] = [xxx]" } 继续使用上面的文档 POST /test/doc/1/_update { "script":"ctx._source.age+=5;ctx._source.name=\"name04\"" } 查询结果:修改成功。3、删除 DELETE /[index]/[type]/[id] 比较简单,不做举例4、批量创建批量创建和批量修改的请求都是一样的, 传的参数不一样请求: POST /[index]/[type]/_bulk 批量创建参数:{"index":{"_id":"xxx"}}{"xxx": "xxx" }{"index":{"_id":"xxx"}}{"xxx": "xxx" } 举例: POST /test01/doc01/_bulk {"index":{"_id":"1"}} {"name": "name01" } {"index":{"_id":"2"}} {"name": "name02","age":20 } {"index":{"_id":"3"}} {"name": "name03","age":20 } --------------1 这里有一点要注意:在图中1的位置,后面一定要换行,否则会报错,提示需要新的一行作为结束的标识,报错信息如下 { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "The bulk request must be terminated by a newline [\n]" } ], "type": "illegal_argument_exception", "reason": "The bulk request must be terminated by a newline [\n]" }, "status": 400 } 注意上面两张图片中最左边序号的不同,下面是正确的json数据,体会什么叫以新的一行作为结束的标识。 这种操作实际上是id存在就更新,不存在就创建,返回结果如下: { "took": 162, "errors": false, "items": [ { "index": { "_index": "test01", "_type": "doc01", "_id": "1", "_version": 6, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 5, "_primary_term": 1, "status": 200 } }, { "index": { "_index": "test01", "_type": "doc01", "_id": "2", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1, "status": 200 } }, { "index": { "_index": "test01", "_type": "doc01", "_id": "3", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1, "status": 201 } } ] } 查看下这三个id的具体内容: 5、批量修改参数: {"update":{"_id":"xxx"}} {"doc": { "XXX": "xxx" } } {"delete":{"_id":"xxx"}} 现在对上面创建的三条记录做批量修改: POST /test01/doc01/_bulk {"update":{"_id":"1"}} {"doc": { "name": "name011"}} {"delete":{"_id":"2"}} {"update":{"_id":"3"}} {"script": "ctx._source.age+=5;ctx._source.name=\"name033\""} -----------1 和批量创建一样,最后一行需要换行。查询索引test01的数据如下:数据全部修改成功!

资源下载

更多资源
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应用均可从中受益。

用户登录
用户注册