精华内容
下载资源
问答
  • 多一些理解的说说
    万次阅读
    2021-05-20 08:53:51

    说说对SaveChanges的理解。

    SaveChanges是以Context为维度的一次提交,对于数据库操作的一切动作,只要是在同一个Context实例,所有的操作,在调用SaveChanges方法后,统一体现到数据库中去;

    更多相关内容
  • 学完本章内容后,说说你自己理解的政治是什么?.pdf
  • 说说对vue的理解

    千次阅读 2022-03-03 20:25:02
    1.vue是什么(what?) Vue.js是一个用于创建用户界面的开源JavaScript框架,也是一个创建单页面应用的Web应用框架 2.vue的核心特性 ...熟悉一些常见的指令 3.vue跟传统开发的区别 vue所有的界面事件,都是只

    1.vue是什么(what?)

    Vue.js是一个用于创建用户界面的开源JavaScript框架,也是一个创建单页面应用的Web应用框架。

    Vue在构建用户界面时,能够

    编写结构:vue提供指令、数据驱动视图构建页面的结构

    美化样式:基础css样式即可美化

    处理交互:基于vue提供的事件绑定,可轻松处理用户和界面之间的交互行为

    2.vue的核心特性

    数据驱动(MVVM)

    mvvm表示的是Model-View-ViewModel,viewmodel用来连接Model和View,是Model和View之间的桥梁

    组件化

    相当于把一个页面分为几块部分,能够降低系统的耦合度,提高可维护性,调试方便

    指令系统

    熟悉一些常见的指令

    3.vue跟传统开发的区别

    vue所有的界面事件,都是只去操作数据的,而像jquery是用来操作DOM;

    vue所有界面的变动,都是根据数据自动绑定出来的,jquery操作DOM

    4.vue和react对比

    相同点

    都有组件化思想

    都支持服务端渲染

    都有Virtual DOM(虚拟dom)

    数据驱动视图

    都有自己的构建工具

    区别

    数据流向不同。react从诞生开始就推崇单向数据流,而vue是双向数据流

    数据变化的实现原理不同。react使用的是不可变数据,vue使用的是可变数据

    组件化通信不同。react中我们使用的是回调函数来进行通信,而vue中子组件向父组件传递方式有两种:事件和回调函数

    diff算法不同。react主要使用diff队列保存需要更新哪些DOM,得到patch树,再统一操作批量更新DOM。vue使用双向指针,边对比,边更新DOM

    展开全文
  • 对sql注入的一些理解

    千次阅读 2022-01-26 14:12:10
    我对这个漏洞的理解就是前端的数据可以直接传到后端并且执行(传到后端执行的数据主要是sql语句) sql注入的就是前端可以输入一些数据库的查询语句传到后端执行 查询一些重要的信息,列如管理员用户的账号和密码等。...

    前言:

    第一个接触的漏洞就是sql注入,一个危害很大到现在都还在流行的漏洞。利用sql注入可以对网站进行脱库,也可以写入shell控制服务器。假期正好有时间,再一次梳理关于sql注入的一些知识。

    自身理解:

    我对这个漏洞的理解就是前端的数据可以直接传到后端并且执行(传到后端执行的数据主要是sql语句) sql注入的就是前端可以输入一些数据库的查询语句传到后端执行 查询一些重要的信息,列如管理员用户的账号和密码等。

    dvwa靶场具体分析

    结合dvwa靶场的sql注入环境的相关代码进行分析, 在php当中request变量用于获取http请求当中的get和post参数,在这里从http请求中获取了id这个参数的值并把他赋值给我id变量,然后是一个数据库的查询语句,将id参数获取的值直接代入到数据库当中进行查询。直接id这个值并没有对获取的值进行一个限制,导致各种数据类型都可以通过这个参数传入到后端的数据库进行查询,攻击者就可以构造数据的一些查询语句,直接查询出数据库里面的敏感信息甚至写入木马控制数据库。

    这个是低难度的sql注入,没有对获取的参数进行任何形式的过滤。

    前端代码 其提交数据的方式为get

     

     如何判断sql注入的类型

    sql注入的类型分为字符型、数字型还有搜索型

    如何判断sql注入且判断其属于什么类型呢?

    数值型注入后台的sql语句

    select * from where id = x

    此处的参数x为整数

    此时需要用经典的 and 1=1 ,and 1=2来判断

      1. Url 地址中输入 

    http://xxx/abc.php?id= x and 1=1 

      1. 页面依旧运行正常,继续进行下一步。
      1. Url 地址中继续输入 
      2. http://xxx/abc.php?id= x and 1=2 
      3. 页面运行错误,则说明此 Sql 注入为数字型注入

    解析下具体的原理

    当输入and 1=1时

    select * from 表名> where id = x and 1=1

    1=1恒成立所以此时页面回显是正常的

    当输入and1=2时

    select * from 表名> where id = x and 1=2

    1=2不成立会报错

    字符型sql注入 后台sql语句

    select * from where id = 'x'

    此处的参数x是使用引号引起来的 当使用数值型对其进行验证的时候

    带入执行的sql语句是则海洋select * from where id = 'x and 1=1'

    select * from where id = 'x and 1=2'

    整个会当成一个字符串进行解析 就不存在and的逻辑结构

    对于字符型注入我们使用  and '1'='1 和 and '1'='2 来进行判断

    带入后台执行后刚好与引号闭合 and的逻辑结构得以执行

    select * from 表名> where id = 'x' and '1'='1'

    select * from 表名> where id = 'x' and '1'='2

    例子具体分析

    下面结合一个ctf的sql注入赛题进行分析

    2019年极客大赛的sql注入 easysql

    启动靶场环境 发现是一个登录框 对登录框进行一系列测试判断其是否属于注入

    输入单引号

     报错显示错误的登录名和密码 说明单引号被带入到后台查询 此处存在sql注入的漏洞

     

    接下来需要判断属于那种类型的sql注入

    构造数值型的payload进行测试

     

     

    依旧报错 可以判断不是数值型注入

    尝试闭合单引号

    这里是一个典型的字符型注入的报错 参数的值是被引号引起来的需要对引号进行闭合 

     

    构造payload

    第一种 注释掉后面的引号

    得到flag

     第二种 与参数的引号闭合

    也能得到flag

     

    搜索型注入 

     select * from tabname where id like '%1%'

    对与这种类型的sql注入 类似于字符型注入闭合单引号 这里我们需要对%进行闭合

    可以构造payload 8%' and/or '1'='1' and '%'='

    当这个payload被带入后台 与查询语句拼接过后 select * from tabname where id like '%8' adn/or '1'='1' and '%'='%'

    最后总结一下 sql注入最核心根本的东西就是前端代码被带入后端执行 但是由于后端sql查询语句的条件限制

    就造成了注入的类型不同 需要根据实际情况构造不同的payload与他的规则相适应使其执行构造的payload

    整体思路:

    对于sql注入:主要的思路为

    1.判断是否存在sql注入 注入的类型字符型、数字型还是搜索型

    2猜解字段

    3.确定显示的字段顺序

    4.获取当前的数据库

    5.获取数据库中的表

    6.获取表中的字段名

    7.查询数据 管理员用户密码

    8.扫描后台 找到其登录后台

    9.上传木马 控制主机进一步进行后渗透

     

    展开全文
  • 即便创建时所在的执行上下文被销毁,但创建时所在词法环境依然存在,以达到延长变量的生命周期的目的❞ 下面举个例子: 在页面上添加一些可以调整字号的按钮 function makeSizer(size) { return function() { ...

    一、是什么

    一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)

    也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域

    JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁

    下面给出一个简单的例子

    function init() {
        var name = "Mozilla"; // name 是一个被 init 创建的局部变量
        function displayName() { // displayName() 是内部函数,一个闭包
            alert(name); // 使用了父函数中声明的变量
        }
        displayName();
    }
    init();
    

    displayName() 没有自己的局部变量。然而,由于闭包的特性,它可以访问到外部函数的变量

    二、使用场景

    任何闭包的使用场景都离不开这两点:

    • 创建私有变量

    • 延长变量的生命周期

    一般函数的词法环境在函数返回后就被销毁,但是闭包会保存对创建时所在词法环境的引用,即便创建时所在的执行上下文被销毁,但创建时所在词法环境依然存在,以达到延长变量的生命周期的目的

    下面举个例子:

    在页面上添加一些可以调整字号的按钮

    function makeSizer(size) {
      return function() {
        document.body.style.fontSize = size + 'px';
      };
    }
    
    var size12 = makeSizer(12);
    var size14 = makeSizer(14);
    var size16 = makeSizer(16);
    
    document.getElementById('size-12').onclick = size12;
    document.getElementById('size-14').onclick = size14;
    document.getElementById('size-16').onclick = size16;
    

    柯里化函数

    柯里化的目的在于避免频繁调用具有相同参数函数的同时,又能够轻松的重用

    // 假设我们有一个求长方形面积的函数
    function getArea(width, height) {
        return width * height
    }
    // 如果我们碰到的长方形的宽老是10
    const area1 = getArea(10, 20)
    const area2 = getArea(10, 30)
    const area3 = getArea(10, 40)
    
    // 我们可以使用闭包柯里化这个计算面积的函数
    function getArea(width) {
        return height => {
            return width * height
        }
    }
    
    const getTenWidthArea = getArea(10)
    // 之后碰到宽度为10的长方形就可以这样计算面积
    const area1 = getTenWidthArea(20)
    
    // 而且如果遇到宽度偶尔变化也可以轻松复用
    const getTwentyWidthArea = getArea(20)
    

    使用闭包模拟私有方法

    JavaScript中,没有支持声明私有变量,但我们可以使用闭包来模拟私有方法

    下面举个例子:

    var Counter = (function() {
      var privateCounter = 0;
      function changeBy(val) {
        privateCounter += val;
      }
      return {
        increment: function() {
          changeBy(1);
        },
        decrement: function() {
          changeBy(-1);
        },
        value: function() {
          return privateCounter;
        }
      }
    })();
    
    var Counter1 = makeCounter();
    var Counter2 = makeCounter();
    console.log(Counter1.value()); /* logs 0 */
    Counter1.increment();
    Counter1.increment();
    console.log(Counter1.value()); /* logs 2 */
    Counter1.decrement();
    console.log(Counter1.value()); /* logs 1 */
    console.log(Counter2.value()); /* logs 0 */
    

    上述通过使用闭包来定义公共函数,并令其可以访问私有函数和变量,这种方式也叫模块方式

    两个计数器 Counter1Counter2 是维护它们各自的独立性的,每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境,不会影响另一个闭包中的变量

    其他

    例如计数器、延迟调用、回调等闭包的应用,其核心思想还是创建私有变量和延长变量的生命周期

    三、注意事项

    如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响

    例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。

    原因在于每个对象的创建,方法都会被重新赋值

    function MyObject(name, message) {
      this.name = name.toString();
      this.message = message.toString();
      this.getName = function() {
        return this.name;
      };
    
      this.getMessage = function() {
        return this.message;
      };
    }
    

    上面的代码中,我们并没有利用到闭包的好处,因此可以避免使用闭包。修改成如下:

    function MyObject(name, message) {
      this.name = name.toString();
      this.message = message.toString();
    }
    MyObject.prototype.getName = function() {
      return this.name;
    };
    MyObject.prototype.getMessage = function() {
      return this.message;
    };
    

    面试官JavaScript系列正在更新:7/33

    面试官:说说JavaScript中的数据类型?区别?文末彩蛋!

    面试官:Javscript数组的常用方法有哪些?

    面试官:Javscript字符串的常用方法有哪些?

    面试官:谈谈 JavaScript 中的类型转换机制

    面试官:== 和 ===区别,分别在什么情况使用?

    面试官:深拷贝浅拷贝的区别?如何实现一个深拷贝?

    篇副有限,扫下方二维码查看往期

    展开全文
  • 面试题,说说你对spring IOC和AOP的理解

    万次阅读 多人点赞 2019-07-06 19:50:42
    在面试中,经常会问,说说你对spring IOC和AOP的理解,问题很宽泛,似乎不知道从何说起。 回答思路:1.先用通俗易懂的话解释下何为IOC和AOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用 以下是...
  • 它的缺点也有三点: 第一点:初次加载耗时,为实现单页 Web 应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一加载,部分页面按需加载; 第二点:前进后退路由管理,由于单页应用在一个页面中...
  • 说说你对MVC和MVVM的理解

    千次阅读 2017-09-17 22:53:21
    1、MVC View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户得到反馈 所有的通信都是单向的。 ...ViewModel:它是View的抽象,负责View与Model之间信息...
  • 在以前,函数组件也被称为无状态的组件,只负责渲染的一些工作 因此,现在的函数组件也可以是有状态的组件,内部也可以维护自身的状态以及做一些逻辑方面的处理 二、有哪些 上面讲到,Hooks让我们的函数组件拥有了类...
  • 说说你对前端模块化的理解 模块的定义: 可以理解成实现特定功能的相互独立的一组方法 为什么要使用模块化: 可维护性 命名空间 可复用性 模块化规范 CommonJS AMD UMD CMD Module(es6) CommonJS CommonJS 扩展了...
  • 面试官问:说说你对cookie的理解?

    千次阅读 2022-03-03 10:29:43
    cookie的理解
  • 说说对EFCore中EntityState的理解。 因为EFCore对于数据库的所有操作都是通过上下文DbContext来完成的,且是通过SaveChanges方法统一落实到数据库中去的;EntityState是EFCore 在对数据库操作增删改的时候,记录当前...
  • 说说你对它的理解。 源码追溯:src/core/vdom/patch.js-updateChildren() 结论 1.key的主要作用是为了高效的更新虚拟DOM,其原理是vue在patch过程中通过key可以精准判断两个节点是否是同一个,从而避免频繁更新不同...
  • 说说对运维的理解

    千次阅读 2018-07-11 16:56:14
    配置管理:通过配置管理平台(自研,开源)管理服务涉及到的个模块,个版本的关系以及配置的准确性。 发布管理:通过构建自动化的平台确保每一次版本变更可以安全可控地 发布到生产环境。 容量管理:在服务运行...
  • 说说你对语义化的理解

    千次阅读 2017-09-16 12:06:19
    2、有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重; 3、方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页...
  • 说说你对数据库读写分离的理解 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从...
  • 关键字static的理解

    千次阅读 2022-04-24 14:59:46
    1.概念 像在VB,C#,C,C++,Java,PHP,Objective-C,JavaScript中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、... 2.观察在函数中有无static对结果的影响 (1)有static时 .......
  • # 获取B 的余额并存入B_balance变量:60 SELECT user_id,@B_balance:=balance from account where user_id = 'B' for UPDATE; # 修改A 的余额 UPDATE account set balance =...
  • 说说对Redis的理解 Redis是一种基于键值对的NoSQL数据库(非关系型数据库);是一个key-value存储系统 Redis有两个特点:高能性 可靠性 高能性:Redis将所有数据都存储在内存中,所有读写性特别高 可靠性:Redis将...
  • 线程的使用: 比如在庞大的项目中,一个请求中,可能要调用N 个服务, 比如调用积分服务,订单服务,地址服务,库存服务或者一些其他公司的服务等, 次调用过程中如果每个服务都用掉500ms,那么整体的时长就是n*...
  • 原型链的理解

    千次阅读 2020-12-29 19:50:14
    2.原型链,简单理解就是原型组成的链,原型也是一个对象,也有__proto__属性,原型的__proto__又是原型的原型,就这样可以一直通过__proto__想上找,这就是原型链,当向上找找到Object的原型的时候,这条原型链就算...
  • 说说你对servlet 的理解或者 servlet 是什么?

    万次阅读 多人点赞 2017-08-06 21:57:55
    说说你对servlet的理解或者 servlet 是什么? Servlet(Servlet Applet),全称Java Servlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。其主要功能在于交互式的浏览和修改数据,生成...
  • 说说你对互联网行业的理解

    千次阅读 2019-12-19 22:07:49
    对互联网行业的理解,也就是对互联网思维的理解。而要充分理解互联网,就得先理解以下几个思维。 (1)用户思维(2)简约思维(3)极致思维(4)迭代思维(5)流量思维(6)社会化思维(7)大数据思维(8)平台思维...
  • 说说你对GC理解,什么是GC?

    千次阅读 2018-11-22 23:13:42
    它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。 写C/C++程序,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。内存再大也是有限的,所以当程序不再需要使用某个变量的时候,就需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 206,588
精华内容 82,635
关键字:

多一些理解的说说