精华内容
下载资源
问答
  • 阅读文本大概需要3分钟。...优点:实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可;缺点:NFS依托于复杂的安全机制和文件系统,...尤其对于session这高并发读...

    阅读文本大概需要3分钟。

    0x01:基于NFS的Session

            NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。

    • 优点:实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可;

    • 缺点:NFS依托于复杂的安全机制和文件系统,因此并发效率不高。尤其对于session这类高并发读写的小文件,会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

    0x02: 基于数据库的Session

    • 优点:使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强。

    • 缺点:session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁。虽然可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

    0x03:基于Cookie的Session

    • 原理:将全站用户的Session信息加密、序列化后以Cookie的方式,统一种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现用户的Cookie化Session 在多服务间的共享访问。

    • 实现机制:当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是服务端创建的。

    • 优点:无需额外的服务器资源;

    • 缺点:受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密,另外它也会占用一定的带宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器,敏感信息有安全隐患。

    0x04. 基于缓存的Session(推荐使用)

    • session数据保存到Redis等数据库中,设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,替换掉Servlet容器创建和管理HttpSession的实现。Servlet容器启动时加载。

    0x05:Session复制

            服务器间同步,定时同步各个服务器的session信息,此方法可能有一定延时,用户体验也不是很好,当服务器很多时(几十台),容易引起网络风暴。

    往期精彩

    01 漫谈发版哪些事,好课程推荐

    02 Linux的常用最危险的命令

    03 精讲Spring Boot—入门+进阶+实例

    04 优秀的Java程序员必须了解的GC哪些

    05 互联网支付系统整体架构详解

    关注我

    每天进步一点点

    9ea5432291a74c7747427e004ce4da60.png

    喜欢!在看☟
    展开全文
  • 当多个线程访问某个时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个都能表现出正确的行为,那么就称这个是线程安全的。怎么样才能做到...

    什么是线程安全?

    当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。

    怎么样才能做到线程安全?

    解决线程安全的方案:

    1.基于JVM的锁

    无法解决分布式情况的问题

    2.基于数据库的锁(分布式)

    耗费资源

    3.基于redis的锁(分布式)

    可能会出现死锁

    4.基于zookeeper的锁(分布式)

    最优级

    实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发。从下面几点可以避免并发:

    线程封闭

    无状态的类

    让类不可变

    volatile

    加锁和CAS

    安全的发布

    ThreadLocal

    线程封闭

    什么是线程封闭?

    就是把对象封装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。

    实现线程封闭有哪些方法?

    ad-hoc 线程封闭

    这是完全靠实现者控制的线程封闭,他的线程封闭完全靠实现者实现。

    Ad-hoc 线程封闭非常脆弱,应该尽量避免使用。

    栈封闭

    栈封闭是我们编程当中遇到的最多的线程封闭。

    什么是栈封闭呢?

    简单的说就是局部变量。

    多个线程访问一个方法,此方法中的局部变量都会被拷贝一份到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。

    无状态的类

    没有任何成员变量的类,就叫无状态的类,这种类一定是线程安全的。

    无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类。

    如果这个类的方法参数中使用了对象,也是线程安全的吗?比如:

    7a9da395af2d1d5dbe0a1875a72c69ec.png

    当然也是,为何?因为多线程下的使用,固然 user 这个对象的实例会不正常,但是对于 StatelessClass 这个类的对象实例来说,它并不持有 UserVo 的对象实例,它自己并不会有问题,有问题的是 UserVo 这个类,而非 StatelessClass 本身。

    让类不可变

    让状态不可变,两种方式:

    1,加 final 关键字,对于一个类,所有的成员变量应该是私有的,同样的只要有可能,所有的成员变量应该加上 final 关键字,但是加上 final,要注意如果成员变量又是一个对象时,这个对象所对应的类也要是不可变,才能保证整个类是不可变的。

    参见代码

    public classImmutableClass {private final inta;private final UserVo user = new UserVo();//不安全

    public intgetA() {returna;

    }publicUserVo getUser() {returnuser;

    }public ImmutableClass(inta) {this.a =a;

    }public static classUser{private intage;public intgetAge() {returnage;

    }public void setAge(intage) {this.age =age;

    }

    }

    }

    2、根本就不提供任何可供修改成员变量的地方,同时成员变量也不作为方法的返回值。

    参见代码

    public classImmutableClassToo {private final List list = new ArrayList(3);publicImmutableClassToo() {

    list.add(1);

    list.add(2);

    list.add(3);

    }public boolean isContain(inti){returnlist.contains(i);

    }

    }

    但是要注意,一旦类的成员变量中有对象,上述的 final 关键字保证不可变并不能保证类的安全性,为何?因为在多线程下,虽然对象的引用不可变,但是对象在堆上的实例是有可能被多个线程同时修改的,没有正确处理的情况下,对象实例在堆中的数据是不可预知的。这就牵涉到了如何安全的发布对象这个问题。

    32d461aa9337e015d5bbc919c3f56122.png

    volatile

    并不能保证类的线程安全性,只能保证类的可见性,最适合一个线程写,多个线程读的情景。

    加锁和CAS

    我们最常使用的保证线程安全的手段,使用 synchronized 关键字,使用显式锁,使用各种原子变量,修改数据时使用 CAS 机制等等。

    安全的发布

    类中持有的成员变量,如果是基本类型,发布出去,并没有关系,因为发布出去的其实是这个变量的一个副本.

    参见代码

    /*** 演示基本类型的发布*/

    public classSafePublish {private inti;publicSafePublish() {

    i= 2;

    }public intgetI() {returni;

    }public static voidmain(String[] args) {

    SafePublish safePublish= newSafePublish();int j =safePublish.getI();

    System.out.println("before j="+j);

    j= 3;

    System.out.println("after j="+j);

    System.out.println("getI = "+safePublish.getI());

    }

    }

    但是如果类中持有的成员变量是对象的引用,如果这个成员对象不是线程安全的,通过 get 等方法发布出去,会造成这个成员对象本身持有的数据在多线程下不正确的修改,从而造成整个类线程不安全的问题。

    参见代码

    /*** 不安全的发布*/

    public classUnSafePublish {private List list = new ArrayList(3);publicUnSafePublish() {

    list.add(1);

    list.add(2);

    list.add(3);

    }publicList getList() {returnlist;

    }public static voidmain(String[] args) {

    UnSafePublish unSafePublish= newUnSafePublish();

    List list =unSafePublish.getList();

    System.out.println(list);

    list.add(4);

    System.out.println(list);

    System.out.println(unSafePublish.getList());

    }

    }

    这个 list 发布出去后,是可以被外部线程之间修改,那么在多个线程同时修改的情况下不安全问题是肯定存在的,怎么修正这个问题呢?

    我们在发布这对象出去的时候,就应该用线程安全的方式包装这个对象。

    参见代码

    /*** 安全的发布*/

    public classSafePublishToo {private Listlist= Collections.synchronizedList(new ArrayList(3));publicSafePublishToo() {

    list.add(1);

    list.add(2);

    list.add(3);

    }publicList getList() {returnlist;

    }public static voidmain(String[] args) {

    SafePublishToo safePublishToo= newSafePublishToo();

    List list =safePublishToo.getList();

    System.out.println(list);

    list.add(4);

    System.out.println(list);

    System.out.println(safePublishToo.getList());

    }

    }

    我们将 list 用Collections.synchronizedList 进行包装以后,无论多少线程使用这个 list,就都是线程安全的了。

    private Listlist= Collections.synchronizedList(new ArrayList(3));

    对于我们自己使用或者声明的类,JDK 自然没有提供这种包装类的办法,但是我们可以仿造这种模式或者委托给线程安全的类,当然,对这种通过 get 等方法发布出去的对象,最根本的解决办法还是应该在实现上就考虑到线程安全问题。

    参见以上代码 ↑↑↑

    ThreadLocal

    ThreadLocal 是实现线程封闭的最好方法。

    ThreadLocal 内部维护了一个 Map,Map 的 key 是每个线程的名称,而 Map 的值就是我们要封闭的对象。每个线程中的对象都对应着 Map 中一个值,也就是 ThreadLocal 利用 Map 实现了对象的线程封闭。

    展开全文
  • 蚂蚁、字节、PDD社招面经Java岗(分布式+线程安全+MySQL+CAS) 延迟队列的需求各位应该在日常开发的场景中经常碰到。比如: 用户登录之后5分钟给用户做分类推送; 用户多少天未登录给用户做...
        

    推荐阅读:

    延迟队列的需求各位应该在日常开发的场景中经常碰到。比如:

    用户登录之后5分钟给用户做分类推送;

    用户多少天未登录给用户做召回推送;

    定期检查用户当前退款账单是否被商家处理等等场景。

    一般这种场景和定时任务还是有很大的区别,定时任务是你知道任务多久该跑一次或者什么时候只跑一次,这个时间是确定的。延迟队列是当某个事件发生的时候需要延迟多久触发配套事件,引子事件发生的时间不是固定的。

    业界目前也有很多实现方案,单机版的方案就不说了,现在也没有哪个公司还是单机版的服务,今天我们一一探讨各种方案的大致实现。

    1. Redis zset

    这个方案比较常用,简单有效。利用 Redis 的 sorted set 结构,使用 timeStamp 作为 score,比如你的任务是要延迟5分钟,那么就在当前时间上加5分钟作为 score ,轮询任务每秒只轮询 score 大于当前时间的 key即可,如果任务支持有误差,那么当没有扫描到有效数据的时候可以休眠对应时间再继续轮询。

    方案优劣

    优点:

    简单实用,一针见血。

    缺点:

    1. 单个 zset 肯定支持不了太大的数据量,如果你有几百万的延迟任务需求,大哥我还是劝你换一个方案;
    2. 定时器轮询方案可能会有异常终止的情况需要自己处理,同时消息处理失败的回滚方案,您也要自己处理。

    所以,sorted set 的方案并不是一个成熟的方案,他只是一个快速可供落地的方案。

    2. RabbitMQ队列

    下面说一个可以落地的方案,这个方案也被大多数目前在架构中使用了 RabbitMQ 的项目组使用。不好的一点就是,捆绑 RabbitMQ,当你的架构方案是要用别的 MQ 替换 RabbitMQ 的时候,你就蛋疼了(我现在正在经历)。

    RabbitMQ 有两个特性,一个是 Time-To-Live Extensions,另一个是 Dead Letter Exchanges

    • Time-To-Live Extensions

      RabbitMQ允许我们为消息或者队列设置TTL(time to live),也就是过期时间。TTL表明了一条消息可在队列中存活的最大时间,单位为毫秒。也就是说,当某条消息被设置了TTL或者当某条消息进入了设置了TTL的队列时,这条消息会在经过TTL秒后 “死亡”,成为Dead Letter。如果既配置了消息的TTL,又配置了队列的TTL,那么较小的那个值会被取用。

    • Dead Letter Exchanges

      在 RabbitMQ 中,一共有三种消息的 “死亡” 形式:

      1. 消息被拒绝。通过调用 basic.reject 或者 basic.nack 并且设置的 requeue 参数为 false;
      2. 消息因为设置了TTL而过期;
      3. 队列达到最大长度。

    DLX同一般的 Exchange 没有区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性。当队列中有 DLX 消息时,RabbitMQ就会自动的将 DLX 消息重新发布到设置的 Exchange 中去,进而被路由到另一个队列,publish 可以监听这个队列中消息做相应的处理。

    由上简介大家可以看出,RabbitMQ本身是不支持延迟队列的,只是他的特性让勤劳的 中国脱发群体 急中生智(为了完成任务)弄出了这么一套可用的方案。

    可用的方案就是

    1. 如果有事件需要延迟那么将该事件发送到MQ 队列中,为需要延迟的消息设置一个TTL;
    2. TTL到期后就会自动进入设置好的DLX,然后由DLX转发到配置好的实际消费队列;
    3. 消费该队列的延迟消息,处理事件。

    方案优劣

    优点:

    大品牌组件,用的放心。如果面临大数据量需求可以很容易的横向扩展,同时消息支持持久化,有问题可回滚。

    缺点:

    1. 配置麻烦,额外增加一个死信交换机和一个死信队列的配置;
    2. RabbitMQ 是一个消息中间件,TTL 和 DLX 只是他的一个特性,将延迟队列绑定在一个功能软件的某一个特性上,可能会有风险。不要杠,当你们组不用 RabbitMQ 的时候迁移很痛苦;
    3. 消息队列具有先进先出的特点,如果第一个进入队列的消息 A 的延迟是10分钟,第二个进入队列的消息B 的延迟是5分钟,期望的是谁先到 TTL谁先出,但是事实是B已经到期了,而还要等到 A 的延迟10分钟结束A先出之后,B 才能出。所以在设计的时候需要考虑不同延迟的消息要放到不同的队列。

    3. 基于 Netty#HashedWheelTimer类方法的实现

    HashedWheelTimer 是 Netty 中 的一个基础工具类,主要用来高效处理大量定时任务,且任务对时间精度要求相对不高, 在Netty 中的应用场景就是连接超时或者任务处理超时,一般都是操作比较快速的任务,缺点是内存占用相对较高。

    算法思想

    HashedWheelTimer 主要还是一个 DelayQueue 和一个时间轮算法组合。

    13465705-a7f5c754ff30bb69.png

    Hash Wheel Timer是一个环形结构,可以想象成时钟,分为很多格子,一个格子代表一段时间(越短Timer精度越高),并用一个List保存在该格子上到期的所有任务。同时一个指针随着时间流逝一格一格转动,并执行对应List中所有到期的任务。

    以上图为例,假设一个格子是1s,则整个时间轮能表示的时间段16s。当前任务指向格子2,表明在第2s的时候有任务需要执行。任务列表中有两个任务,每个任务前面的数字表示圈数。2表示当走到第2圈的时候才会执行,那么整个任务的真正执行时间其实是在12s之后执行,即第二圈走到2的时候。每推进一格,对应的每一个 slot 中的round数都要减一。整体算法就是这么个逻辑。

    时间轮设计要点:

    • tick,一次时间推进,每次推进会检查/执行超时任务;
    • tickDuration,时间轮推进的最小单元,每隔 tickDuration 会有一次 tick,它决定了时间轮的精确程度;
    • bucket(ticksPerWheel),上图中的每一隔就是一个bucket,表示一个时间轮可以有多少个tick,它是存储任务的最小单元;
    • 上层时间轮的 tickDuration 是下层时间轮的表示时间的最大范围,即:父 tickDuration = 子 tickDuration * 子 bucket 。

    需要注意的是,这种方式任务是串行执行的。意味着你如果在时间轮中执行任务且任务耗时较长,将会出现调度超时或者任务堆积的情况。所以要将任务的执行异步化。

    算法的要点:

    1. 任务并不是直接放在格子中的,而是维护了一个双向链表,这种数据结构非常便于插入和移除;
    2. 新添加的任务并不直接放入格子,而是先放入一个队列中,这是为了避免多线程插入任务的冲突。在每个tick运行任务之前由worker线程自动对任务进行归集和分类,插入到对应的槽位里面。

    Netty 使用数组 + 双向链表的方式来组织时间轮,对于添加/取消操作仅做了记录,真正的操作实际发生在下一个tick。时间的推进是独立的线程在做,该线程同时也负责过期任务的执行等操作,可简单认为此步骤操作为O(n),因为推进线程需要完全遍历timeoutscancelledTimeoutsbucket链表,在遍历timeouts时,Netty为了避免任务过多,所以限制每次最多遍历10万个,也就是说,一个tick只能规划10万个任务,当任务量过大时,会存在超时任务执行时间延迟的现象。

    方案优劣

    优点:

    实现比较优雅。效率高。

    缺点:

    1. 无法实现HA和横向扩展,要么就使用多个时间轮。
    2. 最重要的是,实现也比较复杂,开发者需要考虑所有可能的情况。

    目前我了解到的延迟队列在生产环境下有如上三种实现方式,每一种都有人在使用。当然没有最好的只有最适合的,你觉得 redis 能满足需求,就按照最简单的来,你要是有充足的开发周期,你也可以实现时间轮展现实力。

    需求千万种,变化就一种:给时间都能做。

    展开全文
  • SSL证书主要作用是传输信息加密和网站标识,在用户与服务器之间提供有效的身份验证方案。根据SSL的安全强度,网站SSL证书的分类如下: 域名型证书 DV SSL 域名型证书无须进行繁杂的书面审查程序,仅需进行域名有效性...

    SSL证书主要作用是传输信息加密和网站标识,在用户与服务器之间提供有效的身份验证方案。根据SSL的安全强度,网站SSL证书的分类如下:
    域名型证书 DV SSL
    域名型证书无须进行繁杂的书面审查程序,仅需进行域名有效性验证,申请流程便捷,证书签发快速,仅需短短几分钟,即可部署于所有主流浏览器及移动设备之上。在网络黑客、钓鱼威胁层出不穷,域名型SSL数字证书可有效保护通过互联网所发送的数据,为网络账户登录、邮件等机密信息资讯提供安全防护。
    企业型证书 OV SSL
    网络市场中有数以万计的网站,而其真实性、可靠性与否,则形成了网友浏览该网站的主要疑虑。企业型证书针对网站域名及所有权进行严格书面审查,通过审核之后,于证书上标示企业资料,让访问用户可以直接了解企业身份并强化信任感,为后续其他基于互联网的服务内容提供妥善保护。
    增强型证书 EV SSL
    增强型证书是最高级别的SSL证书,意味着网站为用户提供最佳信赖的浏览环境,并有助于将陌生访客转化为精准销售客户。EVSSL的最大特点便是激活网站在浏览器的标签栏使其变绿,利用鲜明的标示告诉用户:这个网站正受到最严密的信息安全防护,同时通过证书标示增强机构信赖及网站真实合法认定。
    此外,为确保子域名的信息安全,又出现了通配符证书Wildcard SSL(一张 SSL 证书通常是颁发给完全限定的域名,然而随着网络营销日益蓬勃,许多企业开始利用子域名的操作方式运作各式营销活动)以同时保护一个域名下的所有子域名网站,大幅节省了时间和管理成本,强化了网站信息安全管理效率。
    那么,为什么网站需要SSL证书?两个字,安全。
    在未安装SSL证书时,用户和服务器之间的信息传输是明文的,容易被外界截取;而且对最终用户来讲,他们在浏览服务器时,并不知道这个服务器、网页是否真的存在,如果存在,信息是否真实可信。
    安装证书以后,整个信息传输的过程将被加密,即使中间有人试图截取,也只会得到一段乱码,保证了信息传输的安全;同时,SSL证书需在CA机构核实服务器身份后签发,从而保证了网页的真实有效。
    所以,SSL证书虽然看上去并不起眼,但用处却不容小觑,对企业来说,可以验明网站真身,减免流量损失,赢得用户信赖;同时,通过加密方式传输数据,有效保证了信息安全,尤其是用户隐私、金融支付等敏感数据;此外,对网站优化、提升搜索权重也有裨益。
    试想一下,你会更看好一个“不安全”的网站,还是一个健康、加密的网站呢?相信你心里一定有了答案。

    展开全文
  • 前言在提到多线程的时候...在新的JUC包什么可以替代呢?介绍①为什么ArrayList 是线性不安全的?②替代措施及解决方案?ArrayList 我们都知道底层是以数组方式实现的,实现了可变大小的数组,它允许所有元素,...
  •  #注册消防工程师工作职责1# 根据前端市场人员的签订的相关消防安全类项目,提供安全咨询追踪相关服务(消防演习、隐患排查、消防台账、消防预案),为政府、企事业单位解决安全隐患难题提供一站式解决方案,并且在...
  • 网络攻击无法杜绝,为了做好网站防护,使用CDN高防无疑是一个很好的方案,接下来我们就来具体了解,CDN高防适用于哪些行业和它具有哪些优势。 CDN高防,兼顾内 容加载速度提升,同时可以避免因受频繁攻击导致的站点...
  • 家教APP开发都有哪些功能特点?家教app开发方案: 一、家教类型APP开发平台优势概述: 1、方便快捷:可帮助学生、家长随时随地快速寻找家教以及教育机构2、雄厚师资:雄厚的师资力量,满足社会各类家教需求。 3、...
  • 阿里云态势感知和安骑士都是阿里云盾安全产品,态势感知属于安全管理类的产品,安骑士数据服务器安全类产品,本文详细说下阿里云态势感知和安骑士之间的区别: 简单来说,安骑士是检测云服务器漏洞的,态势感知提供...
  • 目前服务器常用的操作系统: -Unix -Linux -[b]Windows NT/2000/2003 Server.[/b] 这些操作系统都是符合C2级安全级别的操作系 统.但是都存在不少漏洞,如果对这些漏洞不了 解,不采取相应的措施,就会使操作...
  • 一起来看看隔音效果和降噪都出色的挂脖蓝牙耳机有哪些产品呢?HIK Z1线控式音乐挂脖蓝牙耳机耳机采用挂脖设计,拥有磁吸,可以吸附在一起。主控方案是CSR方案,AB功放效果,音质高中低三频都很均衡到位。这款耳机...
  • 应急指挥车是由中控系统、视频系统、广播系统、灯光系统、供电系统等组成可将图像和声音传送到应急中心做应急处理的车辆,有安全生产、人防、森林、环境等分类。可能大家平时接触比较多的就是在马路上看到应急救援车...
  • 为了保证线程安全的使用一个的方法,我们需要在每个线程中都需要创建该(这里记作B)的实例,这个时候我们又是在单例bean(这里记作A)通过@Autowired注解注入的,这个时候每次获取A的实例并不是每次都是...
  • 企业邮箱主要集中应用在办公场景,涉及我们工作中的重要内容,购买前需要认真选择,本文就来盘点一下购买企业邮箱的注意点:1....时间也可以了解一下产品对于这方面的解决方案。2.稳定性企业与客户之间的邮...
  • 8月6日,绿盟科技五大创新产品即将正式亮相。... 《数据安全法草案》发布以来,数据安全防护成为关注焦点,绿盟科技多年来持续进行数据安全领域研究与探索,本次绿盟数据安全解决方案再次加入了六款创新产品
  • 导读 随着国内汽车市场的飞速发展,各大汽车厂商对汽车电机控制相关产品的需求迎来了井喷,他们对产品...让我们先看看电机在汽车中都有哪些应用,通常我们会把这些应用分为动力总成、安全和底盘、车身和舒适三大
  • 在介绍方案之前,我们得清楚的知道汽车照明到底有哪些?细分如下:  1. 内部照明: 背光,调光,集成HMI  2. 外部照明:前照灯,日间行驶灯(DRL),雾灯(FOG),转向灯(TI),装饰灯,位置灯(POS),远近光...
  • 4、网站安全性措施,防黑、防病毒方案。 5、相关程序开发。如网页程序ASP、JSP、CGI、数据库程序等。 四、企业网站内容规划 1、根据网站的目的和功能规划网站内容,一般企业网站应包括:公司简介、产品介绍、服务...
  • 如以前设置过权限了请先看清楚批处理内容里都设了哪些地方,如果你已经设置过的地方直接删除不用重复再设就可以了,一般重复设也没有问题的! PS:最好把你的服务器环境都配置好网站都正常运行后再用设置器...
  • 随着互联网上的数据量呈指数...那么DDoS攻击有哪些类型呢?最常见的DDoS攻击可大致分为三:饱和攻击、协议攻击和应用层攻击。 饱和攻击即容量耗尽攻击,是最常见的DDoS攻击类型。利用大量分布于世界各地的计算机和互
  • OSI 安全框架有哪些内容;概念;机制和服务模型 如何认识网络信息安全,它有哪些主要威胁,它们的含义分别是什么 一次一密有什么特征 一个密码系统由哪些元素所组成。何谓对称密码和公钥密码 什么是分组密码,分组...
  • 让Profiler监视我们感兴趣的事件,可以监视的事件太多,监视太多会大大降低性能和增大表数据,只监视与数据库的性能密切相关的哪些事件。常见的感兴趣的事件:  执行查询的性能  单个用户或应用程序的活动  ...
  • 面对海量且持续增加的各式各样的数据对象,你是否信心知道哪些数据从哪里来以及它如何随时间而变化?采用Hadoop必须考虑数据管理的实际情况,元数据与数据治理成为企业级数据湖的重要部分。 为寻求数据治理的开源...
  • 如果在一个中定义了多个同名的方法,它们或不同的参数个数或不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception什么区别?  error 表示恢复...
  • 未来传输方面的解决方案必然是根据使用场景深度定制的,因此给大家一个可以自由组合的 “协议单元” ,方便大家集成在自己的协议栈中。 For more information, please see the Success Stories. 关于作者 作者:...
  • Redis 常见问题总结

    2020-07-13 18:52:18
    那本地缓存的方案有哪些呢? 一:JDK 自带的 HashMap 和 ConcurrentHashMap ConcurrentHashMap 可以看作是线程安全版本的 HashMap ,两者都是存放 key/value 形式的键值对。但是,大部分场景来说不会使用这两者当做...
  • 单例模式

    2019-01-01 23:03:43
    解决并发访问线程安全问题,保证单例的技术方案有很多种,如:饿汉式,懒汉式, 注册登录式,枚举式,序列化与反序列化等等。 饿汉式 在实例之前,不管你是否使用,都会先new出来,避免了线程安全问题。 创建饿汉式...
  • 第一章-对象入门

    2019-09-09 10:09:06
    每个对象都一个类型:每个对象都是某一个的实例 同一所有对象都能接收相同的信息 1.2对象的接口 也就是对象的句柄,可以对对象进行的操作 1.3实现方案的隐藏 Interface:只定义可以发出哪些请求,但在某些...
  • 101、现场编码,要求写出:缓存+SqlHelper,然后由代码引向面象对象或设计模式。 102、数据库-索引的坏处,事务的级别...107、说说你认为的安全涉及到哪些地方? 108、说说你认为的性能都体现在哪些地方? 1

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 123
精华内容 49
关键字:

安全类方案有哪些