# 1863. Sum of All Subset XOR Totals

key idea is how to generate all subset of array.

take 3 elements of arrays for example,

[a, _, _] -> [1, 0, 0]
[_, b, _] -> [0, 1, 0]
[a, b, _] -> [1, 1, 0]
[_, _, c] -> [0, 0, 1]
[a, _, c] -> [1, 0, 1]
[_, b, c] -> [0, 1, 1]
[a, b, c] -> [1, 1, 1]

integer i is loop through 1 to Math.pow(2, nums.length) – 1, for each integer, we check how many 1 bit

i & 1, if it is 1, we get nums[index] out as elements for subarray.

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23   class Solution { public int subsetXORSum(int[] nums) { int result = 0; int x = (int)Math.pow(2, nums.length) - 1; for(int i=1;i<=x;i++) { int p = i; int r = 0; for(int j=0;j<nums.length;j++) { int t = p & 1; p >>= 1;   if (t == 1) { r ^= nums[j]; } }   result += r; }   return result; } }```

# java – Spring Mergeable

There are 4 type of Mergeable Object in Spring

ManagedList
ManagedProperties
ManagedMap
ManagedSet

Take ManagedList as example

if mergeEnabled is set to be false, merge will stop
if parent is null, return itself.

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override @SuppressWarnings("unchecked") public List<E> merge(@Nullable Object parent) { if (!this.mergeEnabled) { throw new IllegalStateException("Not allowed to merge when the 'mergeEnabled' property is set to 'false'"); } if (parent == null) { return this; } if (!(parent instanceof List)) { throw new IllegalArgumentException("Cannot merge with object of type [" + parent.getClass() + "]"); } List<E> merged = new ManagedList<>(); merged.addAll((List<E>) parent); merged.addAll(this); return merged; }```

# java – method bridge

java reflection could get all methods of a class.

isBridge() could check whether method is bridged or not.

when we override parent class general type method in child class, method will become bridged.

here is example:

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package org.spring.main;   import java.lang.reflect.Method;   import org.springframework.core.BridgeMethodResolver;   public class BridgeMethodResolverEntry {   public class Node<T> {   public T data;   public Node(T data) { this.data = data; }   public void setData(T data) { System.out.println("Node.setData"); this.data = data; } }   public class MyNode extends Node<Integer> {   public MyNode(Integer data) { super(data); }   @Override public void setData(Integer data) { System.out.println("MyNode.setData"); super.setData(data); } }   public static void main(String[] args) { // TODO Auto-generated method stub BridgeMethodResolverEntry x = new BridgeMethodResolverEntry(); MyNode resolver = x.new MyNode(5); Method[] declaredMethods = resolver.getClass().getDeclaredMethods();   for (int i = 0; i < declaredMethods.length; i++) { Method declaredMethod = declaredMethods[i]; String methodName = declaredMethod.getName(); Class<?> returnType = declaredMethod.getReturnType(); Class<?> declaringClass = declaredMethod.getDeclaringClass(); boolean bridge = declaredMethod.isBridge(); System.out.print((i+1) + " method name is" + methodName + ", return type is " + returnType + " "); System.out.print(bridge ? " is Bridge Method" : " is not Bridge Method"); System.out.println(" it is declared at "+declaringClass.getSimpleName()+""); }   }   }```

# Java – Static Initialization Block

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.dw.lib.test;   public class StaticInitializationBlock {   static { System.out.println("STATIC BLOCK"); }   public StaticInitializationBlock() { System.out.println("constructor"); }   public static void main(String[] args) {   StaticInitializationBlock block = new StaticInitializationBlock();   System.out.println("MAIN METHOD");   }   }```

output:
STATIC BLOCK
constructor
MAIN METHOD

# log4j src – parse log4j.xml building DocumentBuilder

log4j uses DocumentBuilder to parse log4j.xml

here is example code which is same as log4j original source code.

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66   package main;   import java.io.*; import java.net.*;   import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;   import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException;   public class DocumentBuilderEntry {   public static void loop(Node node) { // do something with the current node instead of System.out System.out.println(node.getNodeName());   NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node currentNode = nodeList.item(i); if (currentNode.getNodeType() == Node.ELEMENT_NODE) { //calls this method for all the children which is Element loop(currentNode); } } }   public static void main(String[] args) { // TODO Auto-generated method stub URL url = DocumentBuilderEntry.class.getResource("log4j.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder parser = factory.newDocumentBuilder(); URLConnection uConn = url.openConnection();   uConn.setUseCaches(false); InputStream stream = uConn.getInputStream(); try { InputSource src = new InputSource(stream); src.setSystemId(url.toString()); Document doc = parser.parse(src); loop(doc.getDocumentElement()); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { stream.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }       }   }```

# Spring – MultiValueMap and LinkedMultiValueMap

MultiValueMap is common object type in Spring Utils source code.

Here is an example of how to use it.

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 MultiValueMap<String, String> multiValueMaps = new LinkedMultiValueMap<String, String>(); multiValueMaps.add("Tom", "Book"); multiValueMaps.add("Tom", "Pen");   multiValueMaps.add("ABC", "Company"); multiValueMaps.add("ABC", "WebSite");   for(String key: multiValueMaps.keySet()) { List<String> value = multiValueMaps.get(key); System.out.print(key + "\t"); for(String s: value) { System.out.print(s + "\t"); } System.out.println(); }```

a useful method when program done and run last step task.

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32     public class AddShutdownHookTest {   static class Message extends Thread {   public void run() { System.out.println("Bye."); } }   public static void main(String[] args) { // TODO Auto-generated method stub try {   // register Message as shutdown hook Runtime.getRuntime().addShutdownHook(new Message());   // print the state of the program System.out.println("Program is starting...");   // cause thread to sleep for 3 seconds System.out.println("Waiting for 3 seconds..."); Thread.sleep(3000);   // print that the program is closing System.out.println("Program is closing...");   } catch (Exception e) { e.printStackTrace(); } }```

# Tomcat Src – tomcat logging

This is starting of tomcat source code analysis.

Tomcat Log is simple.

the following is main example on how to invoke tomcat logging

```1 2 3 4 5 6 7 8 9 10 11 12 13   package main;   import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory;   public class tomcat { public static void main(String[] args) { Log log = LogFactory.getLog(tomcat.class); log.info("this is a info message from tomcat"); log.debug("this is a debug message from tomcat"); } }```

but when debugging tomcat src, I find that org.apache.juli.ClassLoaderLogManager is invoked.

Its entry is in catalina.sh as starting up script for tomcat.

```1 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager```

# Anypoint Studio Frozen Problem when starting on Mac Platform

Anypoint Studio Frozen Problem when starting on Mac Platform

solution: most important is to install jdk 1.8.0 151, this is max version of anypoint studio that support.
any version older that 151 would fail to work.

Edit target AnypointStudio.ini
AnypointStudio.app/Contents/Eclipse/AnypointStudio.ini

use
-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin
to point to JAVA_HOME of jdk 1.8 151

use
-clean to clean up workspace

```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -clean -startup ../Eclipse/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar -vm /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin --launcher.library ../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.300.v20150602-1417 -vmargs -Xms512m -Xmx1536m -XX:MaxPermSize=512m -Dosgi.instance.area.default=@user.home/AnypointStudio/workspace -Dhttps.protocols=TLSv1.1,TLSv1.2 -Djava.awt.headless=true -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts```

# Spring Tomcat – integration error

Spring with Tomcat

add spring security, then restart tomcat get the following error.

```1 2 3 4 5 6 7 8 9 10 11 12 Caused by: java.util.zip.ZipException: invalid LOC header (bad signature) at java.util.zip.ZipFile.read(Native Method) at java.util.zip.ZipFile.access\$1400(ZipFile.java:60) at java.util.zip.ZipFile\$ZipFileInputStream.read(ZipFile.java:717) at java.util.zip.ZipFile\$ZipFileInflaterInputStream.fill(ZipFile.java:419) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at sun.misc.IOUtils.readFully(IOUtils.java:65) at java.util.jar.JarFile.getBytes(JarFile.java:425) at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193) at java.util.jar.JarFile.getManifest(JarFile.java:180) at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:140) ... 13 more```

try to build on console.

\$ mvn package.

if mvn says some jar/war is interuptted,
```1 2 3 <bean id="passwordEncoder" class="org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method="getInstance">```