Entry

特朗普政府暂停签发H-1B签证,Yann LeCun怒怼:这是在自杀!

。_饼干妹妹 提交于 2020-08-12 05:05:09
美国时间 6 月 22 日,特朗普宣布暂停 H-1B、H-2B、L 和 J 非移民工作签证的发放,白宫认为此举将为美国带来 50 多万工作岗位。然而,此举引发了包括美国科技界的愤怒和抵制。 机器之心报道,参与:魔王、泽南、小舟。 美国时间周一下午,特朗普政府发布公告,宣布将暂停发放部分种类工作签证,包括适用于技术型人才的 H-1B 签证、适用于跨国公司管理人员和专业人员的 L 签证,以及适用于园艺工人和其他工业领域工作人员的 H-2B 季节性工人签证等。 这项公告将于 6 月 24 日 12:01am 生效,并持续至 2020 年 12 月 31 日。 该公告适用于 公告生效时不在美国境内、无有效非移民签证,以及不具备除签证外准许其赴美和入境的官方旅行证件的外国人 。 美国合法永久居民、美国公民的配偶或子女、为美国食品供应链提供必要服务的外国工作人员,以及被美国国务卿、美国国土安全部长等认定符合美国国家利益的外国人不在此公告范围内。 此外,该公告还续签了 4 月份的绿卡暂停批准行政令,将期限延长至今年年底。 白宫表示,该公告有助于恢复遭受新冠肺炎打击的美国经济,为美国工人开放 52.5 万个工作岗位。但这一举措遭到许多企业的强烈反对。 在该公告涉及的签证中,H-1B 是美国最主要的工作签证类别,它是美国签发给在该国从事专业技术类工作的人士的签证。而白宫暂停 H-1B

浅谈ThreadLocal的内存泄露问题

偶尔善良 提交于 2020-08-12 03:15:46
写在前面 因为有个交流群里突然有个小伙伴问为什么jdk建议threadLocal用private static修饰,于是小研究了下。这里就记录一下吧。 ThreadLocal的原理 源码细节就不贴了,简单描述下原理吧: 当调用threadLocal对象的set方法的时候,实际上是在当前线程对象的threadLocals成员变量(类型是ThreadLocal的的内部类:ThreadLocalMap,可以暂时理解为就是一个Map,但比较简单,数据结构就是一个entry数组,只不过内部寻址是通过hash寻址)里面注册了一个entry,key为threadLocal对象,value为threadLocal包装的值。 当调用threadLocal对象的get方法的时候,实际上就是threadLocal对象这个key从线程对象的threadLocals成员变量这个map里面取对应的值。 这里面还需要注意的有个细节,get,set方法也针对内存泄露问题做了优化,在get或set方法时针对部分entry判断是否key=null,如果key=null则进行清除,等会会将为什么key=null,但entry却还在。 易导致内存泄露的原因 看下ThreadLocal类的这部分: Thread类成员变量ThreadLocals的Entry构造方法中调用了WeakReference的构造方法

Java HashMap的源代码备注,方便以后查看。

拥有回忆 提交于 2020-08-12 02:14:31
package java.util; import java.io.*; public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { // 系统默认初始容量,必须是2的n次幂,这是出于优化考虑的 static final int DEFAULT_INITIAL_CAPACITY = 16; // 系统默认最大容量 static final int MAXIMUM_CAPACITY = 1 << 30; // 系统默认负载因子,可在构造函数中指定 static final float DEFAULT_LOAD_FACTOR = 0.75f; // 用于存储的表,长度可以调整,且必须是2的n次幂 transient Entry[] table; // 当前map的key-value映射数,也就是当前size transient int size; // 阈值 int threshold; // 哈希表的负载因子 final float loadFactor; // 用于确保使用迭代器的时候,HashMap并未进行更改 transient volatile int modCount; // 构造一个带指定初始容量和加载因子的空 HashMap。

HashMap进行put操作会引起死循环?

∥☆過路亽.° 提交于 2020-08-12 02:10:18
HashMap进行put操作会引起死循环? 最近在磕《java并发编程艺术》,在看到第六章的时候出现了下面这段我不是很理解的东西,如下 《java并发编程艺术》截取 为什么要使用ConcurrentHashMap 在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。 1. 线程不安全的HashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,执行以下代码会引起死循环。 final HashMap < String , String > map = new HashMap < > ( 2 ) ; Thread t = new Thread ( ( ) - > { for ( int i = 0 ; i < 10000 ; i ++ ) { new Thread ( ( ) - > map . put ( UUID . randomUUID ( ) . toString ( ) , "" ) , "ftf" + i ) . start ( ) ; } } , "ftf" ) ; t . start ( ) ; t . join ( ) ;

ThreadLocal

主宰稳场 提交于 2020-08-12 01:41:08
一、ThreadLocal简介   多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。   ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一乐ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题,如下图所示 二、ThreadLocal简单使用   下面的例子中,开启两个线程,在每个线程内部设置了本地变量的值,然后调用print方法打印当前本地变量的值。如果在打印之后调用本地变量的remove方法会删除本地内存中的变量,代码如下所示 1 package test; 2 3 public class ThreadLocalTest { 4 5 static ThreadLocal<String> localVar = new ThreadLocal<> (); 6 7 static void print(String str) { 8

(三)学习了解OrchardCore笔记——灵魂中间件ModularTenantContainerMiddleware的第一行①的模块部分

醉酒当歌 提交于 2020-08-11 20:49:55
  了解到了OrchardCore主要由两个中间件(ModularTenantContainerMiddleware和ModularTenantRouterMiddleware)构成,下面开始了解ModularTenantContainerMiddleware中间件第一行代码。   了解asp.net core机制的都知道中间件是由构造函数和Invoke(或者InokeAsync)方法构成,构造函数不过就是个依赖注入的过程,Invoke也可以直接依赖注入,两者的区别是构造函数时全局的,Invoke只是当次请求,所以从Inovke开始了解! public async Task Invoke(HttpContext httpContext) { // Ensure all ShellContext are loaded and available. await _shellHost.InitializeAsync(); var shellSettings = _runningShellTable.Match(httpContext); // We only serve the next request if the tenant has been resolved. if (shellSettings != null ) { if (shellSettings.State ==

vue项目中使用bpmn-流程图json属性转xml(七篇更新完成)

狂风中的少年 提交于 2020-08-11 18:18:16
内容概述 本系列“vue项目中使用bpmn-xxxx”分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中。主要包括vue项目中bpmn使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。如果转载或通过爬虫直接爬的,格式特别丑,请来原创看: 我是作者原文 前情提要 上一节我们讨论了将xml中的节点属性,转成前端常用的json格式。这一篇,我们来讨论更改了json后,如何写入到xml中去。首先,我们通过一张图看看流程图xml和json结构的对应关系。一定要仔细看,这张图理解了,这篇文章就理解一半了。 思路分析 xlm中,属性包裹在<bpmn:extensionElements>中,下一层分别是<camunda:inputOutput>和<camunda:inputParameter>,inputParameter的下一层,会有三种格式。上一节我们读取属性也是按照这个顺序,层层遍历拿到的属性值。 所以,我们本次的出发点,是根据json各字段的属性类型,从里向外为<bpmn:extensionElements>添加内容。步骤如下: 1.elementRegistry.get 和节点id找到节点实例element,因为写入xml的时候需要知道为哪个节点写属性 2.bpmnFactory.create ,顾名思义,作用为创建标签

ThreadLocal必知必会

雨燕双飞 提交于 2020-08-11 18:15:49
前言 自从被各大互联网公司的"造火箭"级面试难度吊打之后,痛定思痛,遂收拾心神,从基础的知识点开始展开地毯式学习。每一个非天才程序猿都有一个对35岁的恐惧,而消除恐惧最好的方式就是面对它、看清它、乃至跨过它,学习就是这个世界给普通人提供的一把成长型武器,掌握了它,便能与粗暴的生活一战。 最近看了好几篇有关ThreadLocal的面试题和技术博客,下面结合源码自己做一个总结,以方便后面的自我回顾。 本文重点: 1、ThreadLocal如何发挥作用的? 2、ThreadLocal设计的巧妙之处 3、ThreadLocal内存泄露问题 4、如何让新线程继承原线程的ThreadLocal? 下面开始正文。 一、ThreadLocal如何发挥作用的? 首先来一段本地demo,工作中用的时候也是类似的套路,先声明一个ThreadLocal,然后调用它的set方法将特定对象存入,不过用完之后一定别忘了加remove,此处是一个错误的示范... 1 public class ThreadLocalDemo { 2 3 private static ThreadLocal<String> threadLocal = new ThreadLocal<String> (); 4 5 public static void main(String[] args) { 6 threadLocal.set(

读懂操作系统之虚拟内存基本原理篇(一)

南笙酒味 提交于 2020-08-11 15:28:55
前言 由于个人对虚拟内存这块特别感兴趣,所以就直接暂且跳过其他,接下来将通过几篇文章进行详细讲解,当然其他基础内容后续在我进行相应整体学习后也会同步输出文章,比如操作系统概念、程序链接、进程管理、页面置换算法、流水线、浮点指令、内存管理、磁盘管理等内容。不管周遭的环境如何,毕竟还很菜,坚持每天让自己进步一点点,放下暂时的焦虑,不如专注于眼前的学习,跟着我一起学习操作系统吧。 虚拟存储器设计初衷 缓存从高到低,主存可作为磁盘的缓存,我们将这项技术称作为虚拟存储器,基于历史观点,构造虚拟存储器的主要出于两个目的,其一是允许云计算在多个虚拟机之间有效而安全的共享存储器,其二则是受限的主存容量对程序设计所造成的极大影响。有了虚拟存储器这样可确保每个程序只能对划分给它的那部分主存进行读写操作,而主存只需存放程序中的活跃区域。虚拟存储器实现程序地址空间到物理地址的转换,通过这种转换处理加强了各个程序地址之间的保护。若用户加载多个程序直接到主存,很显然最终可能会超过主存的容量,如此一来,将程序进行卸载或转入成为程序员不可推卸的责任,加重了程序员的负担,那么怎样才能将程序员从这种情况中解放出来呢?现代操作系统将主存提供了一种对主存的抽象概念,叫作虚拟内存,虚拟内存是硬件异常,硬件地址翻译、主存、磁盘文件和内核软件的完美交互,虚拟内存主要提供了三种能力:【1】

详解JS函数柯里化

此生再无相见时 提交于 2020-08-11 14:59:44
第一次看到柯里化这个词的时候,还是在看一篇算法相关的博客提到把函数柯里化,那时一看这个词就感觉很高端,实际上当你了解了后才发现其实就是高阶函数的一个特殊用法。 果然是不管作用怎么样都要有个高端的名字才有用。 首先看看柯里化到底是什么? 维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。 看这个解释有一点抽象,我们就拿被做了无数次示例的add函数,来做一个简单的实现。 // 普通的add函数 function add(x, y) { return x + y } // Currying后 function curryingAdd(x) { return function (y) { return x + y } } add(1, 2) // 3 curryingAdd(1)(2) // 3 实际上就是把add函数的x,y两个参数变成了先用一个函数接收x然后返回一个函数去处理y参数。现在思路应该就比较清晰了,就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。 但是问题来了费这么大劲封装一层,到底有什么用处呢?没有好处想让我们程序员多干事情是不可能滴,这辈子都不可能. 来列一列Currying有哪些好处呢? 1.