程序员

Java中的内存泄露 和 JVM GC(垃圾回收机制)

南楼画角 提交于 2019-12-01 11:32:59
一、什么是Java中的内存泄露?   在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,   首先,这些对象是 可达的 ,即在有向图中, 存在通路可以与其相连 ;其次,这些对象是 无用的 , 即程序以后不会再使用这些对象 。   如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。   在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。    在Java中,这些不可达的对象都由GC负责回收 ,因此程序员不需要考虑这部分的内存泄露。   通过分析,我们得知,对于C++,程序员需要自己管理边和顶点,而对于Java程序员只需要管理边就可以了(不需要管理顶点的释放)。   通过这种方式,Java提高了编程的效率。 来源: https://www.cnblogs.com/mww-NOTCOPY/p/11683303.html

深入理解面向过程与面向对象的思想差异与各自特色

瘦欲@ 提交于 2019-12-01 10:58:21
一、什么是面向过程 面向过程是一种思维方式。当试图通过面向过程解决问题时,我们的关注点在于问题解决的流程,重在这个过程的控制,需要用大量的模块(模块化的思想源自于硬件,在C语言中是函数)将大问题拆解,程序员通过控制模块的执行顺序以解决问题。 举个例子,当我们解决一个“如何将大象装入冰箱?”的问题时,最简单的解决思路是面向过程解决: 1、关注过程,将大问题拆解为小问题,实现每个小问题的解决方法 a、打开冰箱门 b、将大象装入冰箱 c、关闭冰箱门 2、通过控制代码,控制模块执行,执行顺序为a->b->c,问题解决。 在日常生活或者说日常编程中,简单的问题用面向过程的思路解决,更加直接有效,但是当问题的规模稍大时,如要描述三万个人吃饭的问题,或者要构建一个航空母舰模型的时候,用面向过程的思想是远远不够的。而且面向过程程序的代码复用性、可扩展性、可移植性、灵活性、健壮性都会在处理大规模问题中出现问题。 二、什么是对象?什么是面向对象的思想?有什么好处? 1、对象与类 万事万物都是对象,对象是自然界的任一个体,比如一本书、一支笔,一片叶子等,而对象和对象间是有相似之处的,比如书(每本书都是一个对象)都是由纸做成的,都印着内容(性质上的相似点),都是用来看的(行为上的相似点),将这些相似之处抽象出来就是类(抽象这个词很难懂,那么说成是分类、提取出事物的共同要素更易理解),类的实例就是对象。 2

# IDEA 简介

烂漫一生 提交于 2019-12-01 10:25:34
什么是IDEA IDEA 全称 IntelliJ IDEA,是 Java 语言开发的集成环境,IntelliJ 在业界被公认为最好的 Java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、各类版本工具(git、svn、github 等)、JUnit、CVS 整合、代码分析、 创新的 GUI 设计等方面的功能可以说是超常的。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持 HTML,CSS,PHP,MySQL,Python 等。免费版只支持 Java 等少数语言。 特色功能 智能的选取:在很多时候我们要选取某个方法,或某个循环或想一步一步从一个变量到整个类慢慢扩充着选取,IDEA就提供这种基于语法的选择,在默认设置中 Ctrl + W,可以实现选取范围的不断扩充,这种方式在重构的时候尤其显得方便。 丰富的导航模式:IDEA 提供了丰富的导航查看模式,例如 Ctrl + E 显示最近打开过的文件,Ctrl + N 显示你希望显示的类名查找框(该框同样有智能补充功能,当你输入字母后IDEA将显示所有候选类名)。在最基本的 Project 视图中,你还可以选择多种的视图方式。 历史记录功能:不用通过版本管理服务器,单纯的 IDEA 就可以查看任何工程中文件的历史记录

bugku 程序员本地网站

a 夏天 提交于 2019-12-01 10:24:00
提示从本地访问,怎样让服务器认为你是从本地进行访问的: 使用burp抓包并在包中进行修改加入 X-Forwarded-For: 127.0.0.1 X-Forwarded-For: 简称 XFF 头,它代表客户端,也就是 HTTP 的请求端真实的 IP ,只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项。 得到flag 来源: https://www.cnblogs.com/lzlzzzzzz/p/11681492.html

做高逼格程序员之说走就走的「Linux To Go 」

◇◆丶佛笑我妖孽 提交于 2019-12-01 10:20:33
简介:想拥有一个Linux,在自己的电脑上安装双系统太麻烦。想和WTG一样,随插随用。 使用LTG的好处 安装、修复系统;配置好后的Linux系统极其强大。 工作中我们同样可以使用这个系统,回到家里插在自己电脑上继续工作;环境保持进度不变。(以后可能电脑都是没有硬盘的,每人带一个这个) 把U盘插到其他电脑,同样可以运行,走到哪里就可以带到哪里,相当于私人独家系统。 LTG 的硬件要求 准备工具 移动固态硬盘一个,8GU盘一个(如三星T5或者 My Passport SSD、土豪直接考虑 Portable SSD X5 ); 因为 4K 读写性能较弱,普通 USB3.0 U盘体验相对较差,USB2.0 的话,Emmm.... 硬盘检测软件 AS SSD Benckmark 等; 读写性能分别在 100MB/S 和 100MB/S 以上应该就可以制作 ,速度越快体验性越好。 Linux系统; 这里以Manjaro与Mint为例 UltraISO软碟通 用来做U盘启动盘使用。 点击下载工具 提取码:brjf 开始制作 打开 UltraISO软碟通 ,文件 - 打开 - 选择下载好的镜像 如图: 启动 - 选择要制作的U盘(8G的那个) - 写入硬盘映像 - 如图: 刻录成功后 插入你的移动固态硬盘 和 启动U盘 - 开机按 F12 在进入U盘的时候一定要bios的安全启动(Secure

优秀的Java程序员必须了解GC的工作原理

旧时模样 提交于 2019-12-01 10:04:43
一个优秀的 Java 程 序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面 提升内存的管理效率 ,才能提高整个应用程序的性能。本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些 Java 程序设计建议,从GC角度提高Java程序的性能。   GC的基本原理   Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。   对于程序员来说,分配对象使用new关键字;释放对象时,只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为\"不可达的\".GC将负责回收所有\"不可达\"对象的内存空间。   对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有 对象(详见 参考资料1 )。通过这种方式确定哪些对象是\"可达的\",哪些对象是\"不可达的\".当GC确定一些对象为\"不可达\"时,GC就有责任回收这些内存空间。但 是,为了保证GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等 重要问题都没有明确的规定。因此

「用户标签」在数据库设计时应该如何存储?

偶尔善良 提交于 2019-12-01 09:49:24
业务逻辑是这样的: 用户可以给自己贴标签,以供他人搜索。比如我给自己贴上“90后 程序员”的标签,那么别人就能通过“90后”或者“程序员”搜到我。 用户最多可以给自己贴10个标签。标签可以随时更新。 方案一:在User表里设置一个tags字段,里面存的是“90后,程序员”这样的字符串,用逗号分隔不同标签。缺点:不便于搜索,建立索引的话会很低效,因为“90后,程序员”和“程序员,90后”被认为是不同的。 方案二:在User表里设置10个tag_n字段(n=1,2,3...10),每个字段存一个标签。缺点:不利于Update。比如我现在把我的标签改为“程序员,90后,帅哥”,那么我要逐个检查“程序员”、“90后”和“帅哥”是否已存在,不存在才能添加。 不知道有什么好方法。 我在问问题的时候想到可以先给标签排序在存到数据库里。 注1:存tag的id而不是存tag的内容这一点已经采用了,我在问题里直接用tag内容是为了表述方面。 注2:我使用的是关系型数据库。 解决方案1:多对多 这应该是一个多对多的问题。 对于小型系统,我的设计方案通常是这样 user表 ===================== userId userName ===================== 1 test 2 test2 ... tag表 ===================== tagId

从面试官角度观察到的程序员技能瓶颈,同时给出突破瓶颈的建议

我与影子孤独终老i 提交于 2019-12-01 09:43:53
我在做技术面试官的时候,面试对象大多数是初级开发和高级开发,偶尔也会面试架构师。我发现,IT人的工资固然和相关技术的使用年限有关,但如果候选人的技能无法跨越到更高层次的话,他们的收入也就会停留在当前级别,哪怕工资年限再多,也无法提升工资水平。 比如,我就面试过不少工作了5,6年的程序员,他们的技能也就停留在增删改查阶段,那么只能领到初级程序员的工资。更可悲的时,在面试过程中我发现他们甚至不知道上升的途径和方式,这样的话,可能当他们有10年经验时,或许还只是初级程序员。 对此本文将围绕着初级程序员,高级程序员和架构师这三个职位,说明下这些级别的技能瓶颈,并给出若干突破瓶颈的建议。 1 初级程序员的技能瓶颈与收入瓶颈 哪怕是非相关专业,从培训班出来的程序员,要找个工作也不难,更何况是计算机相关专业出身的学生。 在一般的公司里,对初级程序员的要求大多也是会增删改查,熟悉基本的业务,而且不少公司不会让他们干更高级的活。所以我在面试过程中,不少3年以内的初级程序员的水平和一些有5年经验的人差不多,这就进入了初级程序员的收入瓶颈。 比如Java方面,他们仅仅会用技能,比如集合,多线程,数据库等,也会在Spring框架下干活,SQL方面,仅会写基本的SQL语句,或许还会使用简单的索引等技能。但如果我问及底层代码,他们知道得很少,问及Spring等框架知识,他们只会告诉我如何配置

小程序商城如果让程序员兼职做多少钱?

别来无恙 提交于 2019-12-01 09:37:17
小程序商城,如果不是特别的定制化了,其实作为一个程序员来说非常的简单,因为技术已经非常的成熟了,什么拼团,砍价,首页自定义和各种优惠券服务呀,这些都是很成熟的技术。 如果一个外行看来,肯定是难上加难,不懂技术,又不懂具体操作。 https://www.cnblogs.com/liaosp/p/11075260.html 来源: https://www.cnblogs.com/liaosp/p/11675360.html