PHP/JAVA 杂谈 一(php 槽点)】的更多相关文章

[本文为个人意见,不喜就喷吧!] 最近,同事问到我,『那时候为什么从PHP转成Java?』,我想了很久,且撇开主观上的原因,当初业务重构使用java确实有很多可以说道的地方. 槽点1:哪有最好的语言,只有最合适的语言 2017年的3月份,我所维护的业务,跑的是php,使用的是thinkphp3.2 框架.刚接手的时候,这个业务还是单机,还记得有同事笑道:『这台机厉害哈,单机一年能跑出200多万的流水来!』我当然是一笑置之.可是随着业务组扩展外部渠道,开始发展这个业务,我慢慢发现这样子的系统很难搞…
Java语言安全模型是其有别于传统的编程语言的一个很重要的特点,采用一种沙箱模型隔离了Java的运行环境与具体的操作系统,使得Java在网络环境下能够更为安全的运行.理解Java的安全模型,能够帮助我们站在更高的层面理解Java的底层实现,在适当的时机及时找出问题所在. 沙箱模型的建立主要涉及了Java语言相关的以下几个部分: 类加载器: 运行时包:指由同一个类加载器装载的.属于同一个包的.多类型的集合.任意两个Java类包访问权限适用的前提是:属于同一个包,还必须是属于同一个运行时包.这样规定…
Final关键字 在Java语言中,随着语境的不同final关键字所代表的语义会有一些细微的差异.总的来说,final关键字表达的含义是“禁止修改”,这层有点类似于C++中的const关键字.之所以要采用final关键字,一般是会出于性能和设计层面的考虑.下文会具体讨论final关键字在不同语境中的具体用法. Final + 属性 用final关键字修饰的属性,对于Java编译器来说就是一个“常量”.其特点是:1.具体的值在编译期间就已经被确定:2.在运行时不能再被修改.基于以上两个特点,我们分…
Java中的String Java.Lang.String是Java语言自带的字符串实现,它并不是java的基本类型,但却和几乎每个java程序都密切相关的一个基础java类. string类内部实际实现存储的字符数组在定义时用关键字final修饰,意味着这个属性是一个常量,在初始化之后就不能再被修改.这也同时表明所有对String对象的修改操作(包括append,substring,concat,replace,trim等),在具体实现中返回的都是一个全新的string对象副本.总结来说,Ja…
Java语言的哲学:一切都是对象.对于Java虚拟机而言,一个普通的Java类同样是一个对象,那如果是对象,必然有它的初始化过程.一个类在JVM中被实例化成一个对象,需要经历三个过程:加载.链接和初始化. JAVA类的加载 加载:从字节码二进制文件——.class文件将类加载到内存,从而达到类的从硬盘上到内存上的一个迁移,所有的程序必须加载到内存才能工作.一个Java类在被加载到内存后会在Java堆中创建一个类(java.lang.Class)对象,同时JVM为每个类对象都维护一个常量池(类似于…
Java中的引用 Java“引用”的概念源于C++,原本的定义相当有限:一个引用(Reference)代表的内存通常用于指向另一块内存区域的起始地址.通过引用类型保存的起始地址,可以找到这个引用所指向的对象实例和在方法区中的对象类型数据. 区别于传统的c/c++语言,Java的对象的销毁完全由垃圾回收器管理,核心问题就是何时应该回收对象? Java的策略是:回收那些再也不会被任何引用指向的对象,我们将实例化对象的是否被引用的特性称之为可达性. 其实,这种策略并不涵盖所有的使用情景.试想,我们希望…
1.理解JAVA虚拟机的内存管理 运行时的数据区 从java虚拟机的内存分配来看,一个java程序运行时包含了如下几个数据区: a)     程序计数寄存器(Program Counter Register) b)     虚拟机栈(Java Virutal Machine Stack) c)     本地方法栈(Native Method Stack) d)     Java堆(Java Heap) e)     方法区(Method Area) f)      运行时常量池(Runtime…
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** * 需求:计算网页访问量前三名 * 用户:喜欢视频 直播 * 帮助企业做经营和决策 * * 看数据 */ object UrlCount { def main(args: Array[String]): Unit = { //1.加载数据 val conf:SparkConf = new Spa…
现实生活中,有很多物体,每个物体的长相.行为都不同. 物体存在于不同的空间内,它只在这个空间内发生作用. 物体没用了,空间就把它剔除,不然既占地方,又需要花精力管理. 需要它的时候,就把它造出来,不需要它的时候,就把它销毁. 按照面向对象的设计思想,游戏里的物体,我们也把它定义为一个类. 一个类就定义了一种物体的属性.行为.类是对象的模板,对象是类的实例. 我们用一个集合,把所有的游戏物体都放在里面,对它们进行统一的管理. 随着游戏线程的运行,集合里的物体,它们的逻辑和绘制也不断被调用执行. 我…
在不同的阶段,游戏所运行的逻辑.所显示的界面,都是不同的. 以五子棋举例,游戏开始.游戏中.胜负已分,对应的界面和逻辑都不同. 在游戏中,又分为:自己下棋.对方下棋.游戏暂停.悔棋等多个状态. 再比如RPG游戏的人物,站立.行走.奔跑.攻击.死亡都是不同的动画, 发出一颗子弹,从出现,到往前运动.打到目标,或飞出屏幕,都是不同逻辑. 怎么实现这些效果呢? 程序里设定不同的状态,当前是什么状态,就执行什么逻辑. 这个就叫做:有限状态机! 是不是很简单,不要小瞧它,复杂的游戏功能都是靠它实现的. 接…
线程,让游戏拥有了动态变化的能力. java的图形界面,在启动的时候,就开始了一个线程. 这个线程负责处理:JFrame.JPanel等的绘制.事件处理. 它是由操作系统调用的,在程序启动时开启,程序关闭时消亡. 这个线程里执行的逻辑,支撑着图形框架的基础逻辑,我们无法控制它. 想一下,游戏里那些动画效果.呼啸而出的子弹.飘来飘去的云朵.. 这些行为都不是我们用按键和鼠标来控制的,是随着时间自己在动的. 它们在动,说明它们的坐标发生了变化,那么谁来控制这些坐标变化的呢? 答案是:另一个线程! 先…
经常玩游戏的同学,大家都知道,游戏都会有个主菜单,里面有多个菜单选项:开始游戏.游戏设置.关于游戏.退出游戏等等,这个菜单是怎么实现的呢. 有一定桌面软件开发基础的同学可能会想到,用JButton组件就可以实现,每个选项就是一个按钮嘛. 嗯,这样做是可以的.但是,系统自带的JButton按钮,样式是已经定义好的,虽然可以设置它的颜色.背景等属性,但终归是受限制的. 我们既然是学习游戏开发,那么时刻要记住台哥在之前的一个章节里所讲的,游戏里所有的东西都是计算机画出来的,程序员的工作就是,控制计算机…
大家都知道,游戏需要跟玩家交互,需要接收玩家的鼠标.键盘发出的命令,比如在地图上点击一下,人物就自动寻路走过去:键盘上按下某个键,就弹出一个背包界面. 这些逻辑是怎么处理的呢? 大家先不用深究太详细的,只需要知道,当我们按下键盘时,操作系统会接收到指令,然后把指令传递给java虚拟机,java虚拟机再把指令转发给当前的游戏程序. java定义了一些类来封装事件,比如KeyEvent对应按键事件,按下键盘,就会产生一个KeyEvent对象: 还有另外的一些接口,用来监听处理事件,比如KeyList…
在Eclipse里,编写如下两个类: package game2; import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; /** * java游戏开发杂谈 * ---demo2:画布和画笔 * * @author 台哥 * @date 2019-04-02 */ public class GamePanel extends JPanel { /** 屏幕的宽和高 */ private int wid…
package game1; import javax.swing.JFrame; /** * java游戏开发杂谈 * ---demo1:创建一个窗体 * * @author 台哥 * @date 2019-04-02 */ public class GameFrame extends JFrame{ public GameFrame() { //设置窗体标题 this.setTitle("java游戏开发杂谈-台哥出品"); //设置窗体大小 this.setSize(600, 4…
每个游戏,你所看到的它的一切,都是计算机画出来的! 地图是画出来,人物是画出来的,树木建筑是画出来的,菜单按钮是画出来的,滚动的文字.闪烁的图标.云雾烟火,都是画出来的. 游戏编程,所要做的,就是控制程序,在什么时间,界面上画出什么东西! 大多数游戏,需要不断的重新绘制,以达到动态的效果.比如植物大战僵尸中的向日葵,它一直在动. 这类游戏,是隔很小一段时间,就会重绘.不断的重绘,每次绘制不同的帧,于是界面上显示出向日葵的摇摆动画.       还有些游戏,不需要不断的重绘,比如扫雷,这种没有动画…
Java基础教程:多线程杂谈——双重检查锁与Volatile 双重检查锁 有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化.此时程序员可能会采用延迟初始化.但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题.比如,下面是非线程安全的延迟初始化对象的示例代码: public class A{ private Instance instance; public Instance getInstance(){ if(instance==null){ in…
Java后台服务慢优化杂谈 前言 你是否遇到过这样的场景,当我们点击页面某个按钮后,页面一直loading,要等待好几分钟才出结果的画面,有时直接502或504,作为一个后台开发,看到自己开发的系统是这个样子,就问你惭愧吗.这种问题其实是性能问题,当用户量少数据少的时候,处理还是很快的,数据量一旦大起来,后台处理时间就会延长,前端大部分直接超时或无限等待直接死掉. 方案 解决数据量大的性能问题,要根据实际业务场景来针对分析.但归根结底,只有一条最终方案,即减少与数据库交互次数,尤其是在for循环…
img { border: solid black 1px } 一.前言 最近开始学习Java并发编程,把学习过程记录下.估计不是那么系统,主要应该是Java API的介绍(不涉及最基础的概念介绍),想要深入系统学习推荐看一本书<Java Concurrency in Practice >(建议看英文,也可以看中文译本:< Java 并发编程实战>). 并发编程的基础就是线程,所以这一篇对线程做初步了解. 二.Thread和ThredGroup的关系 因为Thread的构造函数中有…
很多人对JSSE组成部分的Key Tool 工具不太明白,希望本文能有帮助 科班出身的同学应该学过课程“密码学”, 这门课详细解释了现代对称加密的算法原理, 当时学的我云里雾里. 直到现在使用过SSL加密才知道工程上用法是这样的, 老师讲的时候就不能带一点工程实践吗? 简单来说,对称加密体系就是我有一段需要加密的字符, 我用私钥加密之后变成了无意义的密文, 只有用配对的公钥才能对这个密文进行解密还原回来. 下图是个简单的示意,注意由于公私钥是配对的,一般给信息加密的人持有此密钥对. 这套机制可以…
参考的优秀文章: <Java编程思想>第四版 <Effective Java>第二版 Map接口是映射表的结构,维护键对象与值对象的对应关系,称键值对. > hashcode()和equals() hashcode()和equals()即用于识别对象的身份. 在HashMap或类似的实现中,查找一个对象,是通过hashcode()返回的散列值映射到一个范围内的下标,在通过equals()比较此下标连接的链表是否存在相同的对象. 简单来说,hashcode()用于参考.快速定位…
软件开发中一个古老的说法是:80%的工作使用20%的时间.80%是指检查和处理错误所付出的努力.在许多语言中,编写检查和处理错误的程序代码很乏味,并使应用程序代码变得冗长.原因之一就是它们的错误处理方式不是语言的一部分.尽管如此,错误检测和处理仍然是任何健壮应用程序最重要的组成部分. Java 提供了一种很好的机制,用强制规定的形式来消除错误处理过程中随心所欲的因素:异常处理.它的优秀之处在于不用编写特殊代码检测返回值就能很容易地检测错误.而且它让我们把异常处理代码明确地与异常产生代码分开,代码…
在C#中序列化是比较容易的,如果不用第三方的类库,那么C#提供的两个对象也够我们使用,一般的操作是定义一个不含有方法的类,这个类里面定义了要序列化的对象的属性,因为我C#用的比较多,这里直接给出泛型,第一个是我写的,第二个是Copy的: public string ScriptSerialize<T>(T t) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(t); } public T S…
一. Java集合 1.  集合分类:  Collection.Map. 2. Collection: 3. Map 4. 注意点 a. List 有序.可重复:Set 无序.不可重复:Map  键值对.键不可重复.值可重复: b. ArrayList/LinkedList 动态数组实现,一个是基于链表实现: 随机访问快,新增删除快: Vector 是线程同步的. c. HashMap/HashTable 是否线程安全的: HashMap运行key.value都为空.…
1 网站系统开发需要掌握的技术:(借鉴度娘)https://zhidao.baidu.com/question/1701850648247880220.html 需要掌握的有:Java(JavaEE)工程师 .NET软件工程师 外包开发工程师 网站设计和开发工程师 数据库工程师ERP/CRM/OA/B2C开发应用工程师 系统分析设计工程师 文档工程师相关知识,很多人软件专业方向性很强,很抽象,其实也不是这样的,还是由好多知识是集合着的,所以胜任的岗位,就可以说明你要掌握知识的覆盖面,我建议你还是…
多态是面向对象的重要特性之一,我试着用最简单的方式解释Java多态: 要正确理解多态,我们需要明确如下概念:・定义类型和实际类型・重载和重写・编译和运行 其中实际类型为new关键字后面的类型. 重载发生在编译阶段,由定义类型决定.重写发生在运行阶段,由实际类型决定. 确定a.fun(b)最终调用了哪个类的哪个方法,可以通过如下几步进行:1.运用继承规则,确定每个类具有的全部方法,包括父类的方法:2.运用重载规则,确定编译阶段对应的定义类型的方法:3.运用重写规则,确定运行阶段对应的实际类型的方法…
java语言包含很多的知识点,我们并不需要把java语言的知识点都学全了,才开始编程.      你只需要了解: 1,java的数据类型和变量定义 2,类和对象的初步印象. 3,if-else, while等语句如何使用. 4,什么是方法,方法怎么调用. 5,数组是什么,怎么用,最好还知道下链表. 6,awt和swing的基础知识.      ok,知道这些,你就可以开始java编程了.      很多的东西,不用急着去问为什么,先不用去深究它的原理. 等编程经验多了,自然而然的就理解了,或者编…
java是一门编程语言, 它有三个开发平台:j2ee.j2se. j2me.(其实android也算一个了)      j2ee, 也就是web开发,比如网站.各类管理系统,主要是围绕数据库.网页等进行的开发.j2ee涵盖的技术比较多,除了java语法,还需要掌握html/css/javascript等浏览器前端开发技术.jsp/servlet等服务器开发技术,mysql/oracle/sqlsever等数据库,sql语言,以及struts/hibernate/spring等开发框架.这类开发简…
首先抱歉让大家久等了,最近工作的原因,再加上自己维护koalas rpc利用的大部分时间,一直没腾出空来写这篇文章. 先放出来自研的企业级RPC框架源代码地址,上面有使用方式和部署环境说明,说环境部署,其实只需要傻瓜式的安装一个zookeeper就可以了. 地址:https://gitee.com/a1234567891/koalas-rpc,三分钟一个企业级的RPC框架就诞生了.没有那么多繁杂的API,没有那么多需要踩的坑,拿来即用.完全开源 -------------------------…
序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化.什么是反序列化.什么场景的时候才会用到等,然后面试官说:那你能说一下序列化和反序列化底层是如何实现的吗?一脸懵逼,然后回家等通知! 1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指…