精华内容
下载资源
问答
  • <div><p>自己的项目中不管在哪个页面按返回键都会直接退出插件,...按返回键会回到上个页面。 目前没找到原因,请指点一下。</p><p>该提问来源于开源项目:MiEcosystem/miot-plugin-sdk</p></div>
  • 众所周知,简历“了解=听过名字;熟悉=知道是啥;熟练=用过;...大家看看他的简历是怎么写的:熟练掌握计算机网络、数据结构、算法、操作系统等课内基础知识;熟悉Linux系统;精通Java 基础...

    f0a12552963198ef9174c3c8fe3838fd.png

    众所周知,简历上“了解=听过名字;熟悉=知道是啥;熟练=用过;精通=做过东西;

    前两天一个关系比较密切的粉丝问我,为什么自己身为中山大学计算机专业硕士,投出简历却如石沉大海,没有人邀他面试?我让他把简历发来看看。

    他发来简历后让我大跌眼镜,好家伙,10个技术,8个“精通”???

    大家看看他的简历是怎么写的:

    • 熟练掌握计算机网络、数据结构、算法、操作系统等课内基础知识;
    • 熟悉Linux系统;
    • 精通Java 基础知识;
    • 精通JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理)
    • 精通高并发、高可用、高性能系统开发;
    • 精通Spring、Hibernate、Ajax、Mybatis等;
    • 精通SSH 整合、SSM 整合、 SOA 架构;
    • 精通Dubbo;
    • 精通Zookeeper;
    • 精通常见消息队列;
    • 精通MySQL常见优化手段;
    • 精通Spring Boot +Spring Cloud +Docker:;
    • 熟练掌握Hadoop 生态相关技术;

    我有点哭笑不得:“你简历是认真的吗?”

    他说:“肯定是啊,这些技术我都用过啊。”

    我:“用过不能叫精通啊。你知道啥是精通吗?”

    他:“我感觉我确实精通呀…同学遇到问题都是我帮他们解决的。”

    我:“你可能对精通有误解…那我就问问你MySQL,你知道在MySQL 5.6中,对索引做了哪些优化吗?”

    他:“???我们在学校用的是5.5啊。”

    我:“行吧…你能说说B+树和B树在查询上的区别吗?”

    他:“B+tree更快点儿?”

    我:“还有呢?”

    他:“没了呀…”

    我:“这你怎么敢在简历上写“精通”啊???”

    大厂面试都会问什么?大家都知道要问Redis、并发编程、JVM、源码等等,很容易被忽略的一个点就是MySQL优化。对于程序员来说,去任何一家公司面试,数据库是避不开的。开发人员对MySQL掌握的越深入,你能做的事情就越多。

    完成业务功能,要懂基本的Sql语句。

    做性能优化,要懂索引,懂引擎。

    做分库分表,要懂主从,懂读写分离。

    做安全,要懂权限,懂备份,懂日志。

    做云数据库,要懂源码,懂瓶颈。很多同学,被问到sql优化,张口就是索引、执行计划、分表分库,这就有点小题大做。你首先要知道哪些地方需要优化?优化就是要找出运行最慢的地方,搞定;把最慢的sql语句找到,搞定!如何找到最慢的sql语句?可以从慢查询日志入手。很多程序员没做过数据库调优,或者sql调优。如果你不熟MySQL,大公司你肯定进不了,小公司你进去了也吃不开。

    0fb93d7d3e976adcf5900d370e5d9e00.png

    MySQL查询过程

    阿里等大厂很看重底层知识,为了让大家可以熟练掌握甚至“精通”MySQL优化,我特意将自己这些年对MySQL的总结整理了出来(学习笔记及面试专题)戳这即可免费获取到!

    a9b917c28f9cf7e9c0cef6574de7c593.png

    f0542943898af04260f1d2ceee80c3e9.png

    aa8893433060d82c031d3b43ffa131ae.png

    大厂必问--索引底层详剖

    1、索引的本质是什么?

    2、MySQL中索引使用哪些数据结构?

    3、索引使用B+Tree的数据结构,如何存放在磁盘中?

    4、如何通过离散性,最左匹配,回表等原则分析优秀的索引?

    如何全盘的考虑MySQL性能优化?

    1、什么是MySQL慢查询?

    2、执行计划我们要看什么?如何与原理结合了解

    3、实战演示:如何系统的优化SQL的执行速度


    学完这些,你将会获得什么?

    1、各种MySQL优化技巧及实战经验

    让你在日常工作效率事半功倍,面试时薪资轻松翻倍

    2、MySQL优化技巧及2020年Java最新最全的大厂面试真题

    00dc4139f453ccc75bca75e8fa02231c.png

    bc1965c5d99df67ac57c941bcdebb4c3.png

    2b3c6cf4497360b70e9795541f411990.png

    上文提及全部笔记的获取方式:点赞+关注,私信 666 即可,戳这即可免费获取到!

    展开全文
  • 请教大家一问题:Cordova 开发的app,基本用html5+js+css实现,现在需要在app中需要重新配置wifi,所以从app跳转到了系统setting界面设置wifi,但是打开setting界面设置完后怎么让它返回到app界面?
  • 以前,我曾在Windows 7 x86谈论过几漏洞类,这是一具有最低保护级别的操作系统。在这篇文章中,我想深入地研究一下我之前在x86讨论过的令牌窃取有效载荷的问题,并看看x64架构可能有什么不同。此外,我想更...

    ff945dcae908f92b0f41833bb36a6c0e.gif

    以前,我曾在Windows 7 x86上谈论过几个漏洞类,这是一个具有最低保护级别的操作系统。在这篇文章中,我想深入地研究一下我之前在x86上讨论过的令牌窃取有效载荷的问题,并看看x64架构可能有什么不同。此外,我想更好地解释这些有效载荷是如何工作的。写这篇文章的另一个目的是让我自己更加熟悉x64架构,并了解诸如Supervisor Mode Execution Prevention(SMEP)之类的保护措施。

    28855c839c087c9fee3b6b07c0fabd02.png令牌窃取

    除了Windows之外,还有所谓的系统进程。系统进程的PID为4,包含了大多数内核模式的系统线程。存储在系统进程中的线程,仅在内核模式下运行。在某种程度上,进程是线程的 “容器”,线程是执行代码执行的进程中的实际项。在Windows中,每个进程对象(称为_EPROCESS)都有一个访问令牌。回想一下,对象是动态创建(在运行时配置)的结构,此访问令牌确定进程或线程的安全上下文。由于系统进程容纳内核模式代码的执行,所以它需要在允许它访问内核的安全上下文中运行。这将需要系统或管理特权,这就是为什么我们的目标将是识别系统进程的访问令牌值,并将其复制到我们控制的进程中,或者复制到我们用来利用系统的进程中。只有这样,我们才可以从从现在的特权进程中生成cmd.exe,这将使我们可以执行NT AUTHORITY \ SYSTEM特权代码。

    28855c839c087c9fee3b6b07c0fabd02.png识别系统进程访问令牌

    我们将使用Windows 10 x64来概述整个过程。首先,在调试器计算机上启动WinDbg,并与被调试器计算机启动内核调试会话,详细情况请点此。此外,我注意到在Windows 10上,必须完成bcdedit.exe命令后,才能在调试器计算机上执行以下命令:cdedit.exe /dbgsettings serial debugport:1 baudrate:115200。

    设置完成后,执行以下命令以转储活动进程:

    !process 0 0

    1851f391eee800829a27c0fda72d4441.png

    这将返回每个进程的几个字段,我们最感兴趣的是“进程地址”,该地址已在上图中的地址0xffffe60284651040中进行了概述。这是指定进程(在本例中为SYSTEM进程)的_EPROCESS结构的地址,枚举进程地址后,我们可以使用_EPROCESS结构枚举有关进程的更多详细信息。

    dt nt!_EPROCESS

    da1017bfba13a2806b36edcd808653d8.png

    dt将显示关于各种变量、数据类型等的信息,从上图可以看到,系统进程的_EPROCESS结构的各种数据类型都显示出来了。如果继续在WinDbg中的kd窗口中浏览,则会看到Token字段,其偏移量为_EPROCESS + 0x358。

    716da936dfae4b468bd1ba4653bfe533.png

    这意味着对于Windows上的每个进程,访问令牌都位于与进程地址偏移0x358的位置。我们一定会在以后使用此信息。不过,在继续之前,让我们看一下令牌的存储方式。

    从上图可以看到,有一个名为_EX_FAST_REF的文件,或者是一个Executive Fast Reference union。union和结构之间的区别在于,union将数据类型存储在相同的内存位置。注意,与_EX_FAST_REF union的基值相比,各个字段的偏移量没有区别,如下图所示。它们的偏移量都是0x000。以下就是存储过程访问令牌的内容,让我们仔细看看。

    dt nt ! _EX_FAST_REF

    75bffa08911917e9d1420cbf4db5b5da.png

    RefCnt元素是一个附加到访问令牌的值,用于跟踪访问令牌的引用。在x86上,这是3位。在x64,它是4位的。不过,我们只提取标记的实际值,而不提取其他不必要的元数据。

    要提取令牌的值,只需查看系统进程的_EX_FAST_REF union,偏移量为0x358(这是令牌所在的位置)。这样,我们就可以弄清楚如何清除RefCnt。

    dt nt!_EX_FAST_REF +0x358

    faba5723b9e73ad8b1f6a0c6fa2354f0.png

    可以看到,RefCnt等于0y0111。0y表示二进制值,因此,这意味着此实例中的RefCnt等于十进制的7。

    因此,让我们使用逻辑AND尝试清除最后几位。

    ? TOKEN & 0xf

    25826f22ee15e2b53ac91b97daf601d3.png

    如你所见,结果为7。这不是我们想要的值,实际它的倒数才是我们想要的值。逻辑告诉我们,我们应该取0xf的倒数-0xf。

    642320114e1cd1ecb8daf31b23a6aa41.png

    因此,我们最终提取了原始访问令牌的值。现在,让我们看看将这个令牌复制到一个普通的cmd.exe会话时会发生什么。

    在调试机上打开一个新的cmd.exe进程:

    8f7e912d219dc78386ce419d41fd46f7.png

    在调试器上生成cmd.exe进程之后,让我们在调试器中标识进程地址。

    !process 0 0 cmd.exe

    5f916bbd4cc43a45eafc31eb8f804675.png

    正如你可以看到的,我们的cmd.exe进程的进程地址位于0xffffffe6028694d580。根据前面的研究,我们还知道进程的令牌位于与进程地址相对的偏移量0x358处。让我们使用WinDbg用系统进程的访问令牌覆盖cmd.exe访问令牌。

    7982cbff025efa3ffc26e60a92533348.png

    现在,让我们回顾一下以前的cmd.exe过程。

    56bf63623a052c3dacd45732f16ce9ef.png

    正如你所看到的,cmd.exe已经成为一个特权进程!现在剩下的惟一问题是,如何使用一段shellcode动态地实现这一点。

    7dbc724756dffbcb8e968d3d8cbd3ad1.png

    不管怎样,让我们开发一个可以在x64中动态执行上述任务的汇编程序。

    因此,让我们从这个逻辑开始,而不是生成一个cmd.exe进程,然后将系统进程访问令牌复制到它。那为什么不在利用发生时将访问令牌复制到当前进程呢?利用期间的当前进程应该是触发漏洞的进程(从其中运行利用代码的进程)。我们可以在漏洞利用完成之后从当前过程中(并在上下文中)生成cmd.exe,该cmd.exe进程将具有管理特权。

    在开始之前,让我们看看如何获取当前进程的信息。

    如果你使用Microsoft Docs(以前称为MSDN)来研究进程数据结构,那么请参考这篇文章。本文说明有一个Windows API函数可以识别当前进程并返回指向它的指针!PsGetCurrentProcessId()就是这个函数。这个Windows API函数标识当前线程,然后返回一个指向找到该线程所在进程的指针。这与IoGetCurrentProcess()相同。但是,Microsoft建议用户调用PsGetCurrentProgress()。让我们在WinDbg中反汇编这个函数。

    uf nt!PsGetCurrentProcess

    973559a10e85430de4c210bdce20c8f3.png

    让我们看看第一个指令mov rax, qword ptr gs:[188h],正如你所看到的,这里使用的是GS段寄存器。这个寄存器指向一个数据段,用来访问不同类型的数据结构。如果仔细观察这个段,在偏移量0x188字节处,你将看到KiInitialThread。这是指向当前线程_ETHREAD结构中的_KTHREAD条目的指针。要知道_KTHREAD是_ETHREAD结构中的第一个条目,_ETHREAD结构是线程的线程对象(类似于_EPROCESS是进程的进程对象),它将显示关于线程的更详细的信息。nt !KiInitialThread是_ETHREAD结构的地址,让我们仔细看看。

    dqs gs:[188h]

    ad85cf30c9dfce7e98473e61e38ab678.png

    这显示了偏移量为0x188的GS段寄存器拥有一个地址0xffffd500e0c0cc00(在你的机器上由于ASLR/KASLR而不同)。这里应该是nt!或当前线程的_ETHREAD结构。让我们用WinDbg来验证一下。

    !thread –p

    6983d8e2df3914bd7c48a5310fbae997.png

    如你所见,我们已经验证了nt!KiInitialThread代表当前线程的地址。

    回想一下前面提到的关于线程和进程的内容,线程是实际执行代码的进程的一部分(在本文中这些是内核线程)。现在我们已经确定了当前线程,让我们来确定与该线程(即当前进程)相关联的进程。让我们回到上图,我们在其中反汇编了PsGetCurrentProcess()函数。

    mov rax, qword ptr [rax,0B8h]

    RAX已包含偏移量为0x188(包含当前线程)的GS段寄存器的值,上面的汇编指令会将nt!KiInitialThread + 0xB8的值移入RAX。逻辑告诉我们这必须是当前进程的位置,因为PsGetCurrentProcess()例程中剩下的唯一指令是ret,让我们对此做进一步调查。

    因为我们相信这将是我们当前的进程,所以让我们在_EPROCESS结构中查看这些数据。

    dt nt!_EPROCESS poi(nt!KiInitialThread+0xb8)

    df7c94fabb9ca3827df9b10ab7392599.png

    poi本质上取消对指针的引用,这意味着获得指针指向的值。

    正如你所看到的,我们已经找到了当前流程所在的位置!此时当前进程的PID是SYSTEM进程(PID = 4),这可能会根据执行的内容等进行更改。但是,我们能够确定当前的进程是非常重要的。

    让我们开始建立一个汇编程序,以跟踪我们的工作。

    30659927524b09196a12dbb4c538e7ef.png

    注意,我也将存储在RAX中的当前进程也复制到了RBX中。你很快就会看到为什么需要这样做。

    现在,让我们再看一下_EPROCESS结构的其他一些元素。

    dt nt ! _EPROCESS

    86c357e3faf75fe1990fe9ac43398fdc.png

    让我们来看看ActiveProcessLinks的数据结构_LIST_ENTRY:

    dt nt ! _LIST_ENTRY

    2264327670a578f7f1b5d0db57774e58.png

    ActiveProcessLinks跟踪当前进程的列表,它如何跟踪你可能想知道的这些过程?它的数据结构是_LIST_ENTRY,一个双向链接列表。这意味着链表中的每个元素不仅指向下一个元素,而且指向上一个元素。本质上,这些元素指向每个方向。如前所述,这个链表负责跟踪所有的活动进程。

    我们需要跟踪_EPROCESS的两个元素,第一个元素位于Windows 10 x64上偏移量0x2e0处,它是UniqueProcessId。这是进程的PID。另一个元素是ActiveProcessLinks,它位于偏移量0x2e8处。

    因此,从本质上讲,我们可以在x64汇编中执行的操作是通过上述PsGetCurrentProcess()方法找到当前进程。这样,我们就可以迭代并循环遍历_EPROCESS结构的ActiveLinkProcess元素,该元素通过双向链接列表跟踪每个进程。在读取了当前的ActiveProcessLinks元素之后,我们可以将当前的UniqueProcessId(PID)与常量4(即SYSTEM进程的PID)进行比较。让我们继续我们已经开始的汇编程序。

    823e75e6ed7a0a62a76bca1b465b6413.png

    找到系统进程的_EPROCESS结构后,我们现在就可以继续检索令牌并将其复制到当前进程中。

    74d79c8c6a10028e5a8d4554deb5d2bd.png

    找到系统进程后,请记住Token元素位于该进程_EPROCESS结构的偏移量0x358处。接下来,让我们完成Windows 10 x64的其余令牌窃取载荷。

    cc40511e02fd7ffcdf613a03f36b4da5.png

    注意我们使用了逻辑AND,正在通过CL寄存器清除RCX寄存器的后4位。如果你已阅读有关套接字重用漏洞利用的文章,你将知道我在谈论使用x86或x64寄存器(RCX,ECX,CX,CH,CL等)的低字节寄存器。在x64架构中,我们需要清除的最后4位位于低或L 8位寄存器(CL,AL,BL等)中。

    你还可以看到,我们通过使用逻辑XOR清除RAX来结束我们的shellcode。NTSTATUS使用RAX作为错误代码的注册者。NTSTATUS返回值0时,表示操作成功执行。

    在继续展示载荷之前,让我们开发一个绕过SMEP的漏洞。我们将以内核中的堆栈溢出为例,介绍如何使用ROP绕过SMEP。

    参考及来源:https://connormcgarr.github.io/x64-Kernel-Shellcode-Revisited-and-SMEP-Bypass/

    537c53781a6202d64e24f419bb0aeb11.png

    d99ddaed0b916617b052e24d2782221c.png

    展开全文
  • 我在ncurses有菜单系统。选择其中一选项将转到另一菜单。但我怎么回去?在import cursesdef Main():x = 0while x!= ord('2'):x = screen.getch()screen.clear();screen.border();screen.addstr(1,1, "Please ...

    我在ncurses有菜单系统。

    选择其中一个选项将转到另一个菜单。但我怎么回去?在import curses

    def Main():

    x = 0

    while x!= ord('2'):

    x = screen.getch()

    screen.clear();screen.border();

    screen.addstr(1,1, "Please choose:")

    screen.addstr(3,1, "1 - Another Menu")

    screen.addstr(4,1, "2 - Exit")

    if x==ord('1'):

    y = 0

    while y!= ord('2'):

    y = screen.getch()

    screen.clear();screen.border();

    screen.addstr(1,1, "Please choose from new menu:")

    screen.addstr(3,1, "1 - Do Something new")

    screen.addstr(4,1, "2 - Previous Menu")

    if y == ord('1'): doSomething()

    #Here I exit the internal loop. I need to go back to the previous menu, but I don't know how.

    ##

    ##exit outside loop and close program

    ##

    curses.endwin(); exit();

    screen = curses.initscr()

    Main()

    理想情况下,我需要使用GOTO模块在代码行之间跳转,但我使用的设备没有内置该模块。在

    你们知道其他方法吗?非常感谢你的帮助。在

    ==========更新:=============

    好吧,我还意识到你可以轻松地重新生成两个菜单:

    ^{pr2}$

    展开全文
  • 使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的下文 (context) 中执行图.使用 tensor 表示数据....综述TensorFlow 是一编程系统, 使用图来表示计算任务. 图中的节点被称之为 op...

    使用图 (graph) 来表示计算任务.

    在被称之为 会话 (Session) 的上下文 (context) 中执行图.

    使用 tensor 表示数据.

    通过 变量 (Variable) 维护状态.

    使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.

    综述

    TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为 op

    (operation 的缩写). 一个 op 获得 0 个或多个 Tensor, 执行计算,

    产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组.

    例如, 你可以将一小组图像集表示为一个四维浮点数数组,

    这四个维度分别是 [batch, height, width, channels].

    一个 TensorFlow 图描述了计算的过程. 为了进行计算, 图必须在 会话 里被启动.

    会话 将图的 op 分发到诸如 CPU 或 GPU 之类的 设备 上, 同时提供执行 op 的方法.

    这些方法执行后, 将产生的 tensor 返回. 在 Python 语言中, 返回的 tensor 是

    numpy ndarray 对象; 在 C 和 C++ 语言中, 返回的 tensor 是

    tensorflow::Tensor 实例.

    计算图

    TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤

    被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op.

    例如, 通常在构建阶段创建一个图来表示和训练神经网络, 然后在执行阶段反复执行图中的训练 op.

    TensorFlow 支持 C, C++, Python 编程语言. 目前, TensorFlow 的 Python 库更加易用,

    它提供了大量的辅助函数来简化构建图的工作, 这些函数尚未被 C 和 C++ 库支持.

    三种语言的会话库 (session libraries) 是一致的.

    构建图

    构建图的第一步, 是创建源 op (source op). 源 op 不需要任何输入, 例如 常量 (Constant). 源 op 的输出被传递给其它 op 做运算.

    Python 库中, op 构造器的返回值代表被构造出的 op 的输出, 这些返回值可以传递给其它

    op 构造器作为输入.

    TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点. 这个默认图对

    许多程序来说已经足够用了. 阅读 Graph 类 文档

    来了解如何管理多个图.

    import tensorflow as tf

    # 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点

    # 加到默认图中.

    #

    # 构造器的返回值代表该常量 op 的返回值.

    matrix1 = tf.constant([[3., 3.]])

    # 创建另外一个常量 op, 产生一个 2x1 矩阵.

    matrix2 = tf.constant([[2.],[2.]])

    # 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.

    # 返回值 'product' 代表矩阵乘法的结果.

    product = tf.matmul(matrix1, matrix2)

    默认图现在有三个节点, 两个 constant() op, 和一个matmul() op. 为了真正进行矩阵相乘运算, 并得到矩阵乘法的

    结果, 你必须在会话里启动这个图.

    在一个会话中启动图

    构造阶段完成后, 才能启动图. 启动图的第一步是创建一个 Session 对象, 如果无任何创建参数,

    会话构造器将启动默认图.

    欲了解完整的会话 API, 请阅读Session 类.

    # 启动默认图.

    sess = tf.Session()

    # 调用 sess 的 'run()' 方法来执行矩阵乘法 op, 传入 'product' 作为该方法的参数.

    # 上面提到, 'product' 代表了矩阵乘法 op 的输出, 传入它是向方法表明, 我们希望取回

    # 矩阵乘法 op 的输出.

    #

    # 整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.

    #

    # 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.

    #

    # 返回值 'result' 是一个 numpy `ndarray` 对象.

    result = sess.run(product)

    print result

    # ==> [[ 12.]]

    # 任务完成, 关闭会话.

    sess.close()

    Session 对象在使用完后需要关闭以释放资源. 除了显式调用 close 外, 也可以使用 "with" 代码块

    来自动完成关闭动作.

    with tf.Session() as sess:

    result = sess.run([product])

    print result

    在实现上, TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU

    或 GPU). 一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测. 如果检测到 GPU, TensorFlow

    会尽可能地利用找到的第一个 GPU 来执行操作.

    如果机器上有超过一个可用的 GPU, 除第一个外的其它 GPU 默认是不参与计算的. 为了让 TensorFlow

    使用这些 GPU, 你必须将 op 明确指派给它们执行. with...Device 语句用来指派特定的 CPU 或 GPU

    执行操作:

    with tf.Session() as sess:

    with tf.device("/gpu:1"):

    matrix1 = tf.constant([[3., 3.]])

    matrix2 = tf.constant([[2.],[2.]])

    product = tf.matmul(matrix1, matrix2)

    ...

    设备用字符串进行标识. 目前支持的设备包括:

    "/cpu:0": 机器的 CPU.

    "/gpu:0": 机器的第一个 GPU, 如果有的话.

    "/gpu:1": 机器的第二个 GPU, 以此类推.

    阅读使用GPU章节, 了解 TensorFlow GPU 使用的更多信息.

    交互式使用

    文档中的 Python 示例使用一个会话 Session 来

    启动图, 并调用 Session.run() 方法执行操作.

    为了便于使用诸如 IPython 之类的 Python 交互环境, 可以使用

    InteractiveSession 代替

    Session 类, 使用 Tensor.eval()

    和 Operation.run() 方法代替

    Session.run(). 这样可以避免使用一个变量来持有会话.

    # 进入一个交互式 TensorFlow 会话.

    import tensorflow as tf

    sess = tf.InteractiveSession()

    x = tf.Variable([1.0, 2.0])

    a = tf.constant([3.0, 3.0])

    # 使用初始化器 initializer op 的 run() 方法初始化 'x'

    x.initializer.run()

    # 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果

    sub = tf.sub(x, a)

    print sub.eval()

    # ==> [-2. -1.]

    Tensor

    TensorFlow 程序使用 tensor 数据结构来代表所有的数据, 计算图中, 操作间传递的数据都是 tensor.

    你可以把 TensorFlow tensor 看作是一个 n 维的数组或列表. 一个 tensor 包含一个静态类型 rank, 和

    一个 shape. 想了解 TensorFlow 是如何处理这些概念的, 参见

    Rank, Shape, 和 Type.

    变量

    Variables for more details.

    变量维护图执行过程中的状态信息. 下面的例子演示了如何使用变量实现一个简单的计数器. 参见

    变量 章节了解更多细节.

    # 创建一个变量, 初始化为标量 0.

    state = tf.Variable(0, name="counter")

    # 创建一个 op, 其作用是使 state 增加 1

    one = tf.constant(1)

    new_value = tf.add(state, one)

    update = tf.assign(state, new_value)

    # 启动图后, 变量必须先经过`初始化` (init) op 初始化,

    # 首先必须增加一个`初始化` op 到图中.

    init_op = tf.initialize_all_variables()

    # 启动图, 运行 op

    with tf.Session() as sess:

    # 运行 'init' op

    sess.run(init_op)

    # 打印 'state' 的初始值

    print sess.run(state)

    # 运行 op, 更新 'state', 并打印 'state'

    for _ in range(3):

    sess.run(update)

    print sess.run(state)

    # 输出:

    # 0

    # 1

    # 2

    # 3

    代码中 assign() 操作是图所描绘的表达式的一部分, 正如 add() 操作一样. 所以在调用 run()

    执行表达式之前, 它并不会真正执行赋值操作.

    通常会将一个统计模型中的参数表示为一组变量. 例如, 你可以将一个神经网络的权重作为某个变量存储在一个 tensor 中.

    在训练过程中, 通过重复运行训练图, 更新这个 tensor.

    Fetch

    为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor,

    这些 tensor 会帮助你取回结果. 在之前的例子里, 我们只取回了单个节点 state, 但是你也可以取回多个

    tensor:

    input1 = tf.constant(3.0)

    input2 = tf.constant(2.0)

    input3 = tf.constant(5.0)

    intermed = tf.add(input2, input3)

    mul = tf.mul(input1, intermed)

    with tf.Session() as sess:

    result = sess.run([mul, intermed])

    print result

    # 输出:

    # [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]

    需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。

    Feed

    上述示例在计算图中引入了 tensor, 以常量或变量的形式存储. TensorFlow 还提供了 feed 机制, 该机制

    可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor.

    feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为 run() 调用的参数.

    feed 只在调用它的方法内有效, 方法结束, feed 就会消失. 最常见的用例是将某些特殊的操作指定为 "feed" 操作,

    标记的方法是使用 tf.placeholder() 为这些操作创建占位符.

    input1 = tf.placeholder(tf.float32)

    input2 = tf.placeholder(tf.float32)

    output = tf.mul(input1, input2)

    with tf.Session() as sess:

    print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

    # 输出:

    # [array([ 14.], dtype=float32)]

    for a larger-scale example of feeds.

    如果没有正确提供 feed, placeholder() 操作将会产生错误.

    MNIST 全连通 feed 教程

    (source code)

    给出了一个更大规模的使用 feed 的例子.

    展开全文
  • 截取iOS系统返回事件

    2017-06-28 11:36:00
    pop 回上一界面,比如一视频播放界面,进入横屏后,默认点击返回按钮仍然是 pop 返回上界面,但是如果我们想要在横屏点击返回按钮的时候是返回竖屏模式,而不是 pop 到上一界面,这该怎么实现呢? 注意:...
  • 若用户想要返回操作的话,主要看用户选择的手势导航方式,一般来说可以通过上滑返回到手机桌面,当然了,若用户不习惯手势导航,可以设置虚拟导航键,这样的话手机屏幕下方就会出现一返回键,点击即可返回上一级。...
  • 网络中文就出现乱码,应该是编码问题,请问接收到教务网站返回的数据时怎么指定编码。 谢谢了 ![![图片说明](https://img-ask.csdn.net/upload/201609/11/1473565276_866835.jpg)图片说明]...
  • 我听到这段面试的时候觉得这可能是一考察分布式事务的知识点,所以我回答了一下用spring cloud 引用lcn jar包在方法加上LCN注解或者spring cloud alibaba 有一 seata 可以解决,然后还把TCC补偿机制给说了一下...
  • ‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦~作者:马力部门:新零售测试一、背景半年公司的网关系统进行了重构,需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求,为...
  • //绑定,将 ListenSock 绑定在本地的一ip和端口 //1、动态获取用户输入的端口 int Port = pChatClient->GetDlgItemInt(IDC_LISTENPORT_INPUT); if (Port || Port > 65535) { AfxMessageBox(_T("请输入...
  • <div><p>我用的是华为4c android 系统是 4.4. 过程如下,从一portrait 的activity 中启动 这播放视频的MainActivity(本demo 里的MainActivity)。然后按照原来的landscape 播放,点击...
  • 我感觉最让我受不了的是它没有主返回上一级键(注意这里说的不是退出到桌面),你自己还设置不了,所以这就导致我在浏览各种APP时想返回上一级时特别困难,比如在看视频的时候想返回上一级,就需要先点一下屏幕找到...
  • 需求是我们的系统要获取ERP放在服务器中间表的数据,我们系统不存放数据,只发送请求和返回接收信息,作为客户端需要怎么做? 是直接连接数据库读取数据,还是连接服务器读取数据。。。 第一次做,没一点头绪。。...
  • DNS其实就是系统上的一占用53端口的服务,用来提供域名和IP地址的相互转换。比如你访问ip.gs,路由器是不可能知道这地址,你需要先连接到DNS服务器,DNS服务器会返回ip.gs的IP地址,这样在网上就可以正常的路由...
  • 我做跨境电商也有六年的时间了,在电商这行业也有自己的一些经验。经验也许没有其他大卖家丰富,但会将我知道的都进行分享。如果有不懂得亚马逊...可以通过在云服务器安装一Ubuntu的远程桌面环境来登录亚马...
  • 各位有没有人遇到过这样的情况,就是在使用MFMessageComposeViewController进行发送信息的时候我在没有SIM卡的真机进行发送信息明明没有发送成功,可是在MFMessageComposeViewController的代理方法中返回的result...
  • 一篇聊了下汇编的伪指令,本人也是学汇编没多长时间,所以难免有些不对的地方,如果你在阅读过程中发现了错误,还希望不辞吝教呀,这一篇我们一起来看看汇编语言的程序返回操作系统这部分是怎么实现的。...
  • System.out.println("请输入你的操作功能(0返回上一级操作、1、退出系统):"); break; case 2: case 3: } 现在问题就是,当case1执行完后,我想返回"查看全部用户信息",但我不知道...
  • 怎么能够捕获调用activity的返回页面的返回事件,然后看看做了什么动作? 当点击退出camera activity时,我可以设置一点击的监听事件以便可以对假tab(图像)被点击做出会用。一旦退出,tab应该更新以便你...
  • 但是要开发一商业项目,还要考虑怎么收集日志,方便产品上线后定位线问题。如果线上产品运行出异常时能把当时的下文日志发到一文件服务器,有利于分析异常的原因。例如如果有通信数据日志,可以先判断是后端...
  • Node.js 是一基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。...怎么个牛法?看看下面的代码就知道了。//引入http模块var http = require(...
  • 2、游览器检查是否有缓存(游览器缓存-系统缓存-路由器缓存)。如果有,直接显示。如果没有,跳到第三步。 3、在发送http请求前,需要域名解析(DNS解析),解析获取对应过的ip地址。 4、游览器向服务器发起...
  • Juggler-一也许能骗到黑客的系统 应用场景 现在很多WAF拦截了恶意请求之后,直接返回一些特殊的错误页面(之前有看到t00ls有看图识WAF)或一些状态码(403或者500啥的)。 但是实际返不退回特殊响应都不会有啥...
  • 以下是他们的实例,在自己的软件的一串xml,具体信息可以参考图片 ====================================== 集团总部' loginName='admin' password='888888' /> ...
  • 第一步应该是更新 源 怎么更新呢? ... ...输完后“回车”下。...找到源网址后,填网址后,后面的 “/×××× ”,这些怎么写? ![图片说明](https://img-ask.csdn.net/upload/201505/23/1432373689_586289.png)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 496
精华内容 198
关键字:

怎么返回上个系统