首页 文章 精选 留言 我的

精选列表

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

《白帽子讲WEB安全》学习笔记之第2章 浏览器安全

第2章浏览器安全 2.1同源策略 同源策略是浏览器的安全基础。同源策略的作用是让"document"相互独立。 影响“源”的因素:host(域名或IP,如果是IP地址则看做一个根域名),子域名,端口,协议。 注意:对于当前页面来说,页面内存放的javascript文件的域并不重要,重要的是加载javascript页面所在的域是什么。 在浏览器中<script>、<iframe>、<img>、<link>等标签都可以跨域加载资源,而不受同源策略的此案只。这些带“src”属性的标签每次加载时,实际上是由浏览器发起了一次GET请求。不同于XMLHttpRequest的是,通过src属性加载的资源,浏览器限制了javascript的权限,使其不能读写返回的内容。 注意跨域访问方案的安全基础就是新人“javascript无法控制该HTTP头”。 http://www.qq.com/crossdomain.xml 结果: This XML file does not appear to have any style information associated with it. The document tree is shown below. <cross-domain-policy> <allow-access-from domain="*.qq.com"/> <allow-access-from domain="*.gtimg.com"/> </cross-domain-policy> 2.2浏览器沙箱 目前的浏览器多是采用多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,也不会影响到其他的进程。 Sandbox可以通过封装的API访问本地文件系统,内存,数据库,网络的请求。 浏览器插件会编程浏览器安全的一个威胁来源。 2.3恶意网址拦截 恶意网址拦截一般都是浏览器周期性的从指定的服务器获取一份最新的恶意网址黑名单。 2.4高速发展的浏览器安全 很多浏览器插件都是使用javascript编写的,但是这些浏览器插件的权限比一般页面的javascript的权限高。 2.5小结 浏览器是WEB的入口,浏览器的安全也左右着WEB的安全。 本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1859546

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

JNI学习笔记之AS+Cmake+NDK配置自动编译出so并集成流程

创建Android工程 这里开始我不勾选supportC++选项,而是我想在一个非NDK工程上添加配置,使之成为NDK工程 编写Java代码 还是一个简单的例子 package com.newtrekwang.ndkpractice; public class JNIUtils { public static native String getStringFromC(); } 编写C/C++源码 在src/main下创建一个cpp文件夹,文件夹名字任取,不过IDE默认cpp存放c/c++源码 image.png gradle配置c/c++源文件路径 在app Module的gradle里的android域添加sourceSets域,像这样 sourceSets{ main { jni.srcDirs=["src/main/cpp"] //指定c/c++源码位置 } } gradle配置CMakeLists.txt文件的位置 在app Module的gradle里的android域添加externalNativeBuild域,像这样 externalNativeBuild{ cmake{ path "src/main/cpp/CMakeLists.txt" } } CMakeLists.txt内容如下 cmake_minimum_required(VERSION 3.4.1) add_library(hello SHARED hello.c) 然后gradle同步一下,接着就可以在JNIUtils的getStringFromC那儿,Alt+Enter直接跳到hello.c文件叫你编写C层的getStringFromC实现。 然后写完hello.c #include <jni.h> JNIEXPORT jstring JNICALL Java_com_newtrekwang_ndkpractice_JNIUtils_getStringFromC(JNIEnv *env, jclass type) { char* result="Hello from C!"; return (*env)->NewStringUTF(env, result); } 然后没什么特殊的配置的话,就可以编译项目生成libhello.so了 具体ExternalNativeBuild域的配置可以查ExternalNativeBuild image.png defaultConfig域的属性 ExternalNativeCmakeOptions ExternalNativeNdkBuildOptions 最后,编译出的so文件会在build目录下 Android Studio 2.2 更方便地创建JNI项目-CMake

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

学习虚幻4需要储备的知识(2D游戏开发者向)

这些都是入门可读的资料,所有英文资料都有中译本。 2D游戏引擎可认为是3D游戏引擎的子集+优化(可选)。简单的2D游戏引擎可以基于Draw(不用节点)和继承树(不用ECS),甚至没多少继承(直接堆Class)……而3D游戏引擎则要复杂一些。 各种效果术语扫盲 如果只是术语扫盲,官方文档好多是机翻,而且写的很详细(复杂)(各种流程,原理,例子,gif,视频混在一起),完全不如那些游戏网站,或者卖硬件的写的简单清楚,简单几句话就写完了(毕竟人家是要卖的),比如这个: 玩得更明白 显卡帝揭秘3D游戏画质特效 组件式引擎、ECS 现代引擎架构基本上都是组件式的,之前的那个似乎可以称作是继承树结构。继承人人都知道,但是继承的弊端并不是一两句话就能说清楚的。组件式扫盲文挺多,但是好多没有UML图和案例,这两个算是写的清楚点的: 一个基于组件的动态对象系统 Refactoring Game Entities with Components 游戏引擎整体概述 《游戏引擎基础知识》系列 本文是游戏记者西川善司在Fami通杂志上连载的系列专栏内容。 游戏引擎基础知识第一讲 游戏引擎怎么来的 游戏引擎基础知识第二讲 著名的游戏引擎 游戏引擎基础知识第三讲 五花八门的中间件 《Game Engine Architecture》 很棒的书,作者译者都是资深人士,看完就知道大概了,先有整体印象非常重要,否则你要在一堆记忆碎片上自己建立,那是很蛋疼的。如果实在没精力读的话,留着当字典查也行。 本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/1765094 ,如需转载请自行联系原作者

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

《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?

类和结构体非常相似,很多情况下没有区别。如果你是设计人员在进行系统设计时候,是将某种类型设计成为类还是结构体? 类和结构体异同: 类和结构体都有如下功能: 定义存储属性 定义方法 定义下标 定义构造函数 定义扩展 实现协议 只有类才有的功能: 能够继承另外一个类 能够核对运行期对象的类型 析构对象释放资源 引用计数允许一个实例有多个引用 选择的原则: 结构体是值类型,每一个实例没有独一无二的标识,下面两个数组实例本质上没有区别,他们可以互相替换。 1 2 varstudentList1:[String]=[ "张三" , "李四" , "王五" ] varstudentList2:[String]=[ "张三" , "李四" , "王五" ] 但是我们提到类时候,它是引用类型,每个实例都有独一无二的标识。我们看看下面员工Employee类代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Employee{ varno= 0 varname= "" varjob= "" varsalary= 0.0 } varemp1=Employee() emp1.no= 100 emp1.name= "Tom" emp1.job= "SALES" emp1.salary= 9000 varemp2=Employee() emp2.no= 100 emp2.name= "Tom" emp2.job= "SALES" emp2.salary= 9000 emp1和emp2两个员工实例即便内容完全相同,但是这不能说明他们就是同一个员工,只是相似而已。每一个员工实例的背后都有独一无二的标识。 我们再来看看部门Department结构体。 1 2 3 4 5 6 7 8 9 10 11 12 structDepartment{ varno:Int= 0 varname:String= "" } vardept1=Department() dept1.no= 20 dept1.name= "Research" vardept2=Department() dept2.no= 20 dept2.name= "Research" Department为什么被设计成为结构体而不是类呢,那要看我们对于两个不同部门的理解是什么,如果具有相同的部门编号(no)和部门名称(name),我们就认为他们是两个相同的部门,那么就可以把Department定义为结构体,这一点与员工Employee不同。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746591,如需转载请自行联系原作者

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

《从零开始学Swift》学习笔记(Day 12)——说几个特殊运算符

除了一些常用的运算符,还有一些其他的: 引用号(.):实例调用属性、方法等操作符。 问号(?):用来声明可选类型。 感叹号(!):对可选类型值进行强制拆封。 箭头(->):说明函数或方法返回值类型。 冒号运算符(:):用于字典集合分割“键值”对。 …… 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746098,如需转载请自行联系原作者

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

一脸懵逼学习hadoop之HDFS的java客户端编写

1:eclipse创建一个项目,然后导入对应的jar包: 鼠标右击项目,点击properties或者alt+enter快捷键--->java build path--->libraries--->add library--->user library--->next--->user libraries--->new--->hdfsLib(根据自己的需要填写)---》add external jars(添加自己的需求包): 2:开始添加自己的需求包,路径如 hadoop-2.4.1\share\hadoop\hdfs的hadoop-hdfs-2.4.1.jar和hadoop-2.4.1\share\hadoop\hdfs\lib下面的全部包; hadoop-2.4.1\share\hadoop\common的hadoop-common-2.4.1.jar和hadoop-2.4.1\share\hadoop\common\lib下面的全部包; 1 package com.master01; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.net.URISyntaxException; 6 7 import org.apache.commons.io.IOUtils; 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.FSDataOutputStream; 10 import org.apache.hadoop.fs.FileStatus; 11 import org.apache.hadoop.fs.FileSystem; 12 import org.apache.hadoop.fs.LocatedFileStatus; 13 import org.apache.hadoop.fs.Path; 14 import org.apache.hadoop.fs.RemoteIterator; 15 16 public class HdfsTest { 17 18 19 //public FileSystem fs = null; 20 /* 21 @Before 22 public void init() throws IOException, InterruptedException, URISyntaxException{ 23 //读配置文件 24 Configuration conf = new Configuration(); 25 //这里直接拷贝配置或者直接设置值 26 conf.set("fs.defaultFS", "hdfs://master:9000/"); 27 28 //获取配置文件里面的内容 29 fs = FileSystem.get(conf); 30 //fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); 31 } 32 */ 33 34 35 /** 36 * 上传文件 37 * @throws IOException 38 */ 39 public static void upload() throws IOException{ 40 //读配置文件 41 //读取classpath下的core-site.xml配置文件,并且解析其的内容,封装到conf的对象中; 42 Configuration conf = new Configuration(); 43 //这里直接拷贝配置或者直接设置值 44 //也可以在代码中对conf的配置信息进行手动设置,会覆盖配置文件中的配置信息 45 conf.set("fs.defaultFS", "hdfs://master:9000"); 46 47 //获取配置文件里面的内容 48 //根据配置信息,去获取一个具体文件系统的客户端操作实例对象 49 FileSystem fs = FileSystem.get(conf); 50 //本地文件是输入流,hdfs是输出流 51 52 //先搞出路径 53 Path src = new Path("hdfs://master:9000/aa/test.txt"); 54 //搞出输出流,即向hdfs上面写内容 55 FSDataOutputStream create = fs.create(src); 56 57 //输入流就是读,本地文件,输入流 58 FileInputStream fileInputStream = new FileInputStream("d:/test.txt"); 59 60 //将文件fileInputStream到create即完成上传到hdfs 61 IOUtils.copy(fileInputStream, create); 62 } 63 64 65 //最快的上传文件的方法 66 public void upload02() throws IllegalArgumentException, IOException, InterruptedException, URISyntaxException{ 67 //读配置文件 68 Configuration conf = new Configuration(); 69 //这里直接拷贝配置或者直接设置值 70 conf.set("fs.defaultFS", "hdfs://master:9000"); 71 72 //获取配置文件里面的内容 73 FileSystem fs = FileSystem.get(conf); 74 //FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); 75 fs.copyFromLocalFile(new Path("d:/test.txt"), new Path("hdfs://master:9000/aa/test.txt")); 76 } 77 78 79 /** 80 * 下载文件 81 * @throws IOException 82 * @throws IllegalArgumentException 83 */ 84 public void download02() throws IllegalArgumentException, IOException{ 85 //去配置文件 86 Configuration conf = new Configuration(); 87 conf.set("fs.defaultFS", "hdfs://master:9000"); 88 89 //获取配置文件里面的内容 90 FileSystem fs = FileSystem.get(conf); 91 fs.copyToLocalFile(new Path("hdfs://master:9000/aa/test.txt"), new Path("d:/test2.txt")); 92 93 } 94 95 /*** 96 * 创建文件夹的方法 97 * @throws IOException 98 */ 99 public void mkdir02() throws IOException{ 100 //主配置文件 101 Configuration conf = new Configuration(); 102 //设置配置文件的值 103 conf.set("fs.defaultFS", "hdfs://master:9000"); 104 //获取配置文件里面的内容 105 FileSystem fs = FileSystem.get(conf); 106 107 //文件夹的创建 108 fs.mkdirs(new Path("hdfs://master:9000/aaa/bbb/ccc")); 109 } 110 111 112 /** 113 * 删除文件 114 * @throws IOException 115 */ 116 public void remove02() throws IOException{ 117 //主配置文件 118 Configuration conf = new Configuration(); 119 //设置值 120 conf.set("fs.defaultFS", "hdfs://master:9000"); 121 //获取配置文件里面的内容 122 FileSystem fs = FileSystem.get(conf); 123 124 //执行删除操作 125 fs.delete(new Path("hdfs://master:9000/aaa/bbb/ccc"), true); 126 } 127 128 /** 129 * 文件的移动 130 * @throws IOException 131 */ 132 public void move() throws IOException{ 133 //主配置文件 134 Configuration conf = new Configuration(); 135 //设置值 136 conf.set("fs.defaultFS", "hdfs://master:9000"); 137 //获取配置文件里面的内容 138 FileSystem fs = FileSystem.get(conf); 139 140 //移动操作 141 fs.rename(new Path("hdfs://master:9000/aa/test.txt"), new Path("hdfs://master:9000/aaa/bbb")); 142 } 143 144 /*** 145 * 查看文件的信息 146 * @throws IOException 147 */ 148 public void listFiles() throws IOException{ 149 //主配置文件 150 Configuration conf = new Configuration(); 151 //设置值 152 conf.set("fs.defaultFS", "hdfs://master:9000"); 153 //获取配置文件里面的内容 154 FileSystem fs = FileSystem.get(conf); 155 156 //查看的是文件,不是文件夹 157 //listFiles列出的是文件信息,而且提供递归遍历 158 RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("hdfs://master:9000/"), true); 159 //迭代输出信息 160 while(listFiles.hasNext()){ 161 LocatedFileStatus file = listFiles.next(); 162 //文件路径 163 Path path = file.getPath(); 164 System.out.println(path.getName()); 165 } 166 167 System.out.println("============================================="); 168 //listStatus列出文件和文件夹的信息,但是不提供自带的递归遍历 169 FileStatus[] listStatus = fs.listStatus(new Path("hdfs://master:9000/")); 170 /*for(int i = 0 ; i<listStatus.length; i++){ 171 System.out.println(listStatus[i]); 172 }*/ 173 for(FileStatus fileStatus : listStatus){ 174 //根据获取的路径获取文件夹的名称 175 Path path = fileStatus.getPath(); 176 System.out.println(path.getName()); 177 } 178 179 } 180 181 public static void main(String[] args) { 182 HdfsTest hdfsTest = new HdfsTest(); 183 try { 184 //上传文件的调用 185 //hdfsTest.upload02(); 186 187 //下载文件的调用 188 //hdfsTest.download02(); 189 190 //文件夹的创建 191 //hdfsTest.mkdir02(); 192 193 //删除操作 194 //hdfsTest.remove02(); 195 196 //移动文件的操作 197 //hdfsTest.move(); 198 199 //查看文件信息 200 hdfsTest.listFiles(); 201 } catch (Exception e) { 202 e.printStackTrace(); 203 } 204 } 205 206 } 3:NameNode的职责 (1):维护元数据的信息; (2):维护hdfs的目录树; (3):响应客户端的请求;

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

小众精品 | 开发者弹药库升级 推荐五个机器学习框架

你可能没听过它们,但今天或许会考虑上手。至于那些不同生态、不同编程语言的工具——对于高手而言,即便没有使用需求,借鉴它们的代码执行也能为自己的产品开发带来许多灵感。 雷锋网提醒:顺序与重要性无关。 1. Scikit-plot 一帮缺乏艺术细胞的数据科学家,在某年某月某天突然心怀恐惧地意识到:可视化是数据科学最关键的东西之一,而不仅仅是一个加分项。 这就导致了 Scikit-plot 的诞生。 KDnuggests 副主编 Matthew Mayo 表示: “我注意到 Scikit-plot,是因为在 Reddit 上看到了它的作者的发帖,随后几乎立刻便上了手。” 该项目旨在为 Scikit-learn 用户提供一系列标准、实用的图表。这包括: Elbow plots Feature importance graphs PCA projection

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

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

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

用户登录
用户注册