Other

ES6中实现继承的方法

1. 通过 extends、super 关键字继承 步骤1、使用class构造一个父类 class Parent { constructor(name,age){ this.name = name this.age = age } // 私有方法 sayName(){ console.log(this.name); } } 步骤2、使用class构造一个子类,并使用 extends 实现继承,super 指向父类的原型对象 class Child extends Parent{ constructor(name,age,gender){ super(name,age) this.gender = gender } // 私有方法 sayGender(){ console.log(this.gender); } } 步骤3、实例化对象  const ming = new Child('ming',18,'男') ming.sayGender() ming.sayName() console.log(ming.name); // ming console.log(ming.age); // 18  

Android强化——项目基本准备

项目基本准备:  包:model,ui(activity,fragment,adapter),base,utils,persenter,view  主题:theme中设置NOACTIONBAR去除标题  color.xml:设置颜色  Material新组件:BottomNavigationView  Fragment:设置基础BaseFragment简化操作。通过getSurpootFragmentManger()获取fragment事务管理器  LogUtils:方便操作,上线后不用输出log  BottomNavigationView:底部导航栏  属性:  app:menu 设置菜单(记住,menu里都是控件)  app:itemIconTint:用selector设置点击后icon颜色  app:itemTextColor: 用selector设置点击后text颜色   方法:  setOnNavigationItemSelectedListener(): 点击子项触发事件  FragmentTransaction  获取:  通过getSupportFragmentManger().beigin()  方法:  replace(View container , Fragment fragment)  参数:  container:包裹fragment的容器,是FramLayout  fragment:切换的fragment  返回值:无  返回值意义:无  作用:切换到目标fragment,需要commit()才能切换。   使用:  MENU <menu xmlns:android=http://schemas.android.com/apk/res/android> <item android:id=@+id/home android:title=主页 android:icon=@mipmap/home_normal/> <item android:id=@+id/selected android:title=挑选 android:icon=@mipmap/select_normal/> <item android:id=@+id/red_packet android:title=特惠 android:icon=@mipmap/red_packet_normal/> <item android:id=@+id/search android:title=搜索 android:icon=@mipmap/search_normal/> </menu>   BottomNavigationView

机器学习中的优化 Optimization Chapter 2 Gradient Descent(2)

\(\large \bf{Theorem }\ 2.7:\) \(f:\mathbb{R^d}\rightarrow\mathbb{R}\text{ be convex and differentiable with a global minimum }x^*;\text{ Suppose }f\text{ is smooth with parameter }L.\text{ Choosing stepsize: }\gamma = \frac{1}{L},\text{ gradients descent yields:}\) \[\begin{align} f(x_T)-f(x^*)\leq \frac{L}{2T}||x_0-x^*||^2 \end{align} \] \(\large\bf Proof:\) \(f\text{ is differentiable and smooth, according to Lemma 2.6, we can get:}\) \[\begin{align} f(x_{t+1})-f(x_t)\leq -\frac{1}{2L}||g_t||^2 \end{align} \] \(\text{Therefore:}\) \[\begin{align} \frac{1}{2L}||g_t||^2\leq f(x_t)-f(x_{t+1}) \end{align} \] \(\text{Now we sum up:}\) \[\begin{align} \frac{1}{2L}\sum_{t=0}^{T-1}||g_t||^2&\leq \sum_{t=0}^{T-1}[f(x_t)-f(x_{t+1})]\\ &=f(x_0)-f(x_T) \end{align} \]

Java安全之JSF 反序列化

Java安全之jsf 反序列化 前言 偶遇一些奇葩环境,拿出来炒冷饭 JSF简述 JSF”指的是2004年发布的第一个版本的Java规范。这方面的许多实现 规范存在。其中最常用的是Sun(现在的Oracle)发布的Mojarra和Apache发布的MyFaces JavaServerFaces(JSF)概念在几年前就已经引入,现在主要在J2EE中使用 应用。它在web应用程序开发中最繁琐的部分之一:用户界面上添加了一个抽象层。 JSF层有助于在应用程序中集成复杂的小部件,例如: •使用专用标签的图形组件; •借助表单属性实现自动Ajax层; •复杂格式的数据导出功能(例如:PDF、Excel等)。 然而,如果认为添加这种特性只会促进开发人员的任务,那就太天真了。事实上,它伴随着 模糊和复杂的机制。ViewState就是这些机制之一。 Mojarra 反序列化调试 web.xml中配置 <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Map these files with JSF --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> public void service(ServletRequest req, ServletResponse resp) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp; this.requestStart(request.getRequestURI()); if (!this.isHttpMethodValid(request)) { response.sendError(400); } else { //省略... } //省略.

Day12 顺序表(二)

就是顺序表的增删改查,挺有意思的 1 public class SequentialList { 2 3 /** 4 * The maximal length of the list. It is a constant. 5 */ 6 public static final int MAX_LENGTH = 10; 7 8 /** 9 * The actual length not exceeding MAX_LENGTH. 10 */ 11 int length; 12 13 /** 14 * The data stored in an array. 15 */ 16 int[] data; 17 18 /** 19 * Construct an empty sequential list.

java学习笔记day01

1,java语言概述 java是一门高级编程语言 sun公司研发,收购于Oracle公司 java之父詹姆斯.高斯林 java的技术平台:javase标准版,javaee企业版,javame(小型版,不常用) 2,java环境搭建:JDK安装,常用命令 JDK:java开发者工具包; jdk产品发展史--------LTS-长期支持版:jdk8.0,jdk11.0,jdk17.0 企业使用jdk8.0的原因(特点):成熟稳定,安全可靠 下载最新版jdk即17.0 Oracle官网, 直达地址:https://www.oracle.com/java/technologies/downloads/#jdk18-windows 安装时目录建议不带中文以及空格,容易出现莫名其妙的bug 如何验证是否安装成功: 看jdk的bin包下的java程序和javac程序是否可用,具体方法:找到相关程序,点击闪退,为何? 调出命令行:cmd,java回车,javac回车,java -version回车查看是否是17版本 (目前我下载的是18.0.1版本) javac和java介绍(java开发环境中的最重要的两个命令): java:执行工具 javac:编译工具  因为Java程序是高级语言,计算机底层是硬件不能识别这些语言,需要通过javac编译工具进行编译,然后在通过java执行工具执行才可以驱动机器干活 补充: 命令行窗口的常用命令(记) 盘符:切换:D: C: dir:查看当前路径下的文件信息 cd: 进入单极目录 cd xxx 进入多级目录 cd D:\xxx 回退上一级目录 cd .. 回退根目录 cd \ cls:清屏 table:补全目录文件夹全名 直达目录:cd 粘贴路径  多演示练练    3,java入门程序:helloworld java程序开发的三个步骤: 编写,编译,运行代码   PS: 第一个java程序建议使用记事本书写; 建议代码文件名全英文,首字母大写,满足驼峰模式,源代码文件的后缀必须是.java。 具体操作 ①编写代码: 新建一个文件夹code:然后建立一个文本文档  ctrl+s:保存文件 table:空行  ②编译代码: javac 文件名.java eg:javac HelloWorld.java

更改this指向的call() 、 apply()  和 bind()

首先,函数内部中的 this 指向谁,不是在函数定义时决定的,谁调用,指向谁。 1. call 方法 语法:函数名.call(调用者, 参数1, …)作用:函数被借用时,会立即执行,并且函数体内的this会指向借用者或调用者 function fn(name, age) { this.name = name; this.age = age; } const obj = {} // 经过call,this指向obj,obj开始有name、age属性 fn.call(obj, '李四', 100) // 以下this均指向window,name:undefined,age:undefined fn.call() fn.call(null) fn.call(undefined) 结果:普通函数的this指向window,利用call方法将this指向了obj 2. apply方法 语法:函数名.apply(调用者, [参数, …])作用:函数被借用时,会立即执行,并且函数体内的this会指向借用者或调用者 function fn(name, age) { this.name = name; this.age = age; } const obj = {} // 经过apply,this指向obj,obj开始有name、age属性 fn.apply(obj, ['李四', 100]) // 以下this均指向window,name:undefined,age:undefined fn.apply() fn.apply(null) fn.apply(undefined) 结果:普通函数的this指向window,利用apply方法将this指向了obj 3. bind方法 语法:函数名.bind(调用者, 参数, …)作用:函数被借用时,不会立即执行,而是返回一个新的函数。需要自己手动执行,一般用于不需要立即执行的时候

思考kafka在做幂等性的时候,producerId在内存中什么时候清理掉

情景  最近在看kafka幂等性的源码的时候,在思考一个问题,既然幂等性是通过producerId + Sequence Number来判断是否重复,那么应该在broker缓存中,有保存producerId 和 Sequence Number,那么如果长时间一直使用,是否会由于 producerId 和 Sequence Number 的增长,造成OOM呢?在网上没找到答案,所以本文通过源码,来找到这个答案 代码追踪  本文不再从具体的producer代码分析了,直接从ApiKeys的代码开始,直接追踪,前面有不理解的朋友,请参考:【转载】万字长文干货 | Kafka 事务性之幂等性实现   【步骤1】kafka.server.KafkaApis#handle 1 def handle(request: RequestChannel.Request) { 2 try { 3 ... 4 request.header.apiKey match { 5 //处理发上来的请求 6 case ApiKeys.PRODUCE => handleProduceRequest(request) 7 ... 8 } 9 } catch { 10 ... 11 } finally { 12 ... 13 } 14 }   【步骤2】kafka.server.KafkaApis#handleProduceRequest 1 def handleProduceRequest(request: RequestChannel.

docker容器网络配置

Linux内核实现名称空间的创建 ip netns命令 可以借助ip netns命令来完成对 Network Namespace 的各种操作。ip netns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装。 注意:ip netns命令修改网络配置时需要 sudo 权限。 可以通过ip netns命令完成对Network Namespace 的相关操作,可以通过ip netns help查看命令帮助信息: 1 [root@localhost ~]# ip netns help 2 Usage: ip netns list # 查看名称空间 3 ip netns add NAME # 添加名称空间 4 ip netns attach NAME PID # 进到空间里去 5 ip netns set NAME NETNSID # 设置名称空间的名字 6 ip [-all] netns delete [NAME] # 删除 7 ip netns identify [PID] 8 ip netns pids NAME # pid 9 ip [-all] netns exec [NAME] cmd .

cocos creator promise 原生平台BUG

1 class NewPromise extends Promise{ 2 constructor(fn){ 3 4 const fn2 = function(resolve, reject) { 5 const reject2 = (err) => { 6 setTimeout(() => {reject(err);}, 0) 7 }; 8 9 try { 10 fn(resolve, reject2); 11 } catch (error) { 12 reject2(error) 13 } 14 } 15 16 17 super(fn2); 18 } 19 } 20 21 window.Promise = NewPromise; 异步异常捕获, 如果不重写,会抛好几个错误。 直接将这个代码设置为插件就OK